+) 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
[과정]
- 서버는 포트 80번으로 TCP connection을 기다림
- 80번으로 URL를 이용해 연결 요청이 들어오면 수락하고, client에 이를 알림 (handshaking)
- client가 TCP connection socket에 request 메시지를 보냄
- HTTP server는 요청을 받아서 request 객체가 포함된 response 메시를 작성
- client가 response 메시지를 받으면 그 속의 html을 화면에 띄움.
- 각 사진들을 가져오기 위해 이 과정을 그 개수만큼 반복
[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의 문제가 있음
'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 |