CS/Network

Web and HTTP ( header & cookie )

WakaraNai 2021. 10. 15. 18:48
728x90
반응형

+) 1 msec = 0.01

 

 

HTTP

hyper text transfer protocol

 

web의 application layer protocol

client/server model

TCP를 이용

  • 1st. setup TCP connection
    • server는 80번으로 대기
    • client는 url로 TCP connection을 열고 socket 생성
    • server가 이를 수락
  • 2nd. HTTP messages exchanges
    • application-layer protocol messages를 브라우저와 서버 간 교환
  • 3rd. closed TCP connection

 

HTTP는 “stateless”

  • 한 세션이 끝나고나면 어떤 요청을 받았는지 유지하지 않음
  • state를 유지하면 매우 복잡해짐
    • 과거 기록을 유지보수해야하고
    • server/ client의 충돌, 불일치성 등도 해결해야 해서

 

서로 다른 web browser라도

동일한 web server를 사용할수 있는 이유는

http 덕분이다.

 

 

 

 

+) state / connections / parallel

HTTP

stateless - 클라이언트가 누구였는지, 뭘 했는지 잊어버림

conection (persistent) - 한 번만 하고 맺은 연결을 끊어버릴지 말지

parallel - 하나의 브라우저가 여러 개의 connection 동시에 진행

 

 

 

HTTP connections

Each TCP segment can only carry one request : non-persistent라고 여러 개 담을 수 없음

non-persistent HTTP

  • TCP connection을 열고 한 번 주고 받으면 바로 닫아버림
  • 여러 개의 object를 다운받으려면, 여러 개의 connection이 필요

persistent HTTP

  • 여러개의 object가 하나의 열려있는 TCP connection으로 주고 받을수 있다
  • 특정 페이지를 다운받는 데 걸리는 delay가 더 짧음

 

 

 

Non-persistent HTTP

[과정]

  1. 서버는 포트 80번으로 TCP connection을 기다림
  2. 80번으로 URL를 이용해 연결 요청이 들어오면 수락하고, client에 이를 알림 (handshaking)
  3. client가 TCP connection socket에 request 메시지를 보냄
  4. HTTP server는 요청을 받아서 request 객체가 포함된 response 메시를 작성
  5. client가 response 메시지를 받으면 그 속의 html을 화면에 띄움.
  6. 각 사진들을 가져오기 위해 이 과정을 그 개수만큼 반복

 

[Response time]

  • RTT : 작은 packet이 client에서 server찍고 돌아오는데 걸린 delay
  • HTTP response time :
    • 1 RTT time for initiate TCP connection
    • 1 RTT time for HTTP request
    • file transmission time
  • = 2 RTT + file transmission time
  • ex) 각 object마다 2 RTT가 필요하다면
    • for base HTMLfile = (1+1)
    • for 10 object = 10 * (1+1)   “반복”
    • = 22 RTT

 

  • Parallel TCP connection
    • 경우에 따라 운영체제가 하나의 브라우저에서 여러 개의 TCP connection을 열게 해 줌 
    • 대신 운영체제의 overhead가 커짐
    • 각 object마다 전체 과정을 반복할 필요가 없어짐

 

 

 

 

Persistent HTTP

Connection : Keep-alive

  • server는 connection을 닫지 않고 열어둠
  • 10개 객체를 연달아서 보내줌. 사진으로는 겹쳐지지만 절대 동시에 보내지 않음
  • 연결 성립 = 1 RTT
  • base HTML file = 1 RTT
  • 나머지 objects = 1 RTT
  • 총  3 RTT에 n 개의 object 가능

 

 

 

 

suppose the base HTML file references 3 very small objects on the same server.

Neglecting transmission times, how much time elapses with

 

  • IP 주소를 얻는데  걸리는 총 시간 = RTT1 + … + RTTn
  • Setup TCP connection 소요 시간 = RTT0
  • 작은 개체를 요청하고 받는 데 걸린 시간 = RTT0
  • total response time = 2RTT0 + RTT1 + .. RTTn

 

a.     Non-persistent HTTP with parallel connections?

  • = total response time  + 2 RTT0
  • = 4RTT0+RTT1+…+RTTn

b.     Non-persistent HTTP with no parallel TCP connections?

  • = total response time  + 3*2 RTT0
  • = 8RTT0+RTT1+…+RTTn

c.     Persistent HTTP?

  • =  total response time  + RTT0
  • =  3RTT0+RTT1+…+RTTn

 

base html 파일 이외에 3개의 object를 포함하는 web page를 down 받으려고 할 때, 각각 몇 번의 RTT가 소요되는지 

non-persistent HTTP,  = 8

non-persistent HTTP with parallel TCP connection,  = 4

persistent HTTP = 3

 


HTTP “request” message

  • type of method (“Get” or “Post”) + URL + 어떤 버전의 HTTP인지
    • POST method : HTTP message의 entity body에 
    • GET method : request line의 URL field에
    • form input을 실어서 서버에 업로드 함
  • header line
    • 그 URL에 해당하는 웹 페이지에 들어있는 host name
    • User-Agent : browser의 종류
    • Accept-Language : 어느 언어를 원하는지
    • Connection : persistent connection을 하고 싶은지
  • header line의 끝을 표시하기
    • \r : carriage return 
    • \n : line-feed character

 

 

 

Uploading form input

Post method

  • entity body 속 내용을 server에 올려야 할 때

URL method

  • GET method를 사용하여 URL에 쿼리문을 넣어, request line을 추가

 

 

Method types

HTTP/1.0

  • GET
  • POST
  • HEAD : test 목적으로 request를 보내기에 server가 응답할 필요 없다고 알림

HTTP/1.1

  • GET, POST, HEAD
  • 서버 측의 파일을 올리고 삭제하는 기능 추가
    • PUT : server에 올리고 싶은 파일을 entity file을 업로드한 뒤 URL필드에 표시 (  서버에 새로운 내용을 업로드)
    • DELETE : URL 필드에 적어둔 특정 파일 삭제 ( 서버에 저장된 내용을 삭제)

 

HTTP “response” message

status line : protocol + status code + status phrase

header lines

  • date : 이 메시지(요청)가 만들어진 시각 request generation time
  • server : server 종류
  • last-modified : 보내는 객체가 마지막으로 수정된 시각 
  • content-length : header line 후에 나오는 요청된 html 파일의 길이 (bytes)
  • connection : persistent connection인지
  • content-type : html, css 등
  •   

 

 

HTTP response “status codes”

  • 200 : OK
  • 204 : No Content - HTTP response body가 비어있을 수 있다
  • 301 : Moved Permanently
  • 400 :  Bad Request
  • 404 : Not Found  - HTTP response body가 비어있을 수 있다
  • 505 : HTTP Version Not Supported

 


 

User-server state: cookies

 

cookie 에 필요한 4가지  components

  • cookie header line of HTTP response message
  • cookie header line of HTTP request message
  • 브라우저 측에서 cookie file을 보유
  • server는 back-end database를 유지

web server는 back-end database 관리,

browser는 cookie file 유지

 

 

 

ex) : 

  • 한 사용자가 쇼핑몰 사이트에 접속하면 request 요청을 서버에 전송
  • 서버는 그 사용자를 위한 ID를 사용자에게 제공하고, 그 쿠키는 DB에 저장
  • 생성한 쿠키 는 response msg에 넣어서 client에게 보냄
  • 이후로 사용자는 해당 쿠키를  포함하여 request msg를 보내게 됨
  • 그럼 서버는 쿠키를 보고 저장된 쿠키에서 찾아서 그에 맞는 일을 함
  • 일주일 뒤에도 서로 알고 있는 쿠키를 이용하여 통신

server가 set cookie header line을 HTTP response 통해서 먼저 보내면

그 이후로 client가 HTTP request 보낼 때 cookie header line을 포함하여 보낸다.

 

 

쿠키로 할 수 있는 것

  • authorization
  • shopping carts
  • recommendations
  • user session state ( e-mail )

 

state를 유지하는 방법

  • multiple transaction에서도 state를 유지한다는 의미
  • 쿠키를 이용 : state 정보를 msg로 저장

 

쿠키를 허용하면 DB에 사용자의 정보를 쌓아둘 수 있음

이는 이름, e-mail, 활동 등을 누적하기에 privacy의 문제가 있음

 

 

 

 

728x90
반응형

'CS > Network' 카테고리의 다른 글

Electronic Mail  (0) 2021.10.15
Caching  (0) 2021.10.15
Application layer  (0) 2021.10.15
Networks Under Attack : Security  (0) 2021.10.15
Protocol Layers, Service Models  (0) 2021.10.15