Non-persistent HTTP 흐름
1. (Client) -> (Server) : TCP 연결요청
2. (Client) <- (Server) : Connection accept
3. (Client) -> (Server) : HTTP request
4. (Client) <- (Server) : HTTP response
5. (Server) : Connection close
RTT (Round Trip Time) 이란?
-> 네트워크 시작 지점에서 패킷이 대상 지점으로 이동하고 다시 시작 지점으로 이동하는데 걸리는 시간
Non-persistent HTTP의 경우 매번 요청과 응답마다 ( 2*RTT + 파일전송시간 ) 이 소요된다.
Persistent HTTP 흐름의 경우?
-> Server에서 TCP 연결을 끊지 않고 유지한다.
- Non-persistent 에 비해 요청 하나당 1*RTT를 줄일 수 있다.
Start-line
Request ex)
POST / HTTP/1.1
1. HTTP Method
2. Target URL
3. HTTP version
Status-line 이라고 한다.
Response ex)
HTTP/1.1 200 OK
1. HTTP version
2. Status code
3. Status text (상태를 설명)
HTTP headers
General header
→ Request, Response 모두 사용, 컨텐츠 자체에는 적용되지 않음
ex)
Date : 만들어진 날짜와 시간을 포함
ex)Date: Tue, 09 Feb 2021 06:14:28 GMT
Cache-Control : 캐싱 메커니즘을 위해 사용
ex)Cache-Control: max-age=<seconds>
Connection : 네트워크 접속을 유지할지 말지 제어
ex)Connection: keep-alive
Request header
→ Fetch 될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함 (컨텐츠와는 관련 없음)
ex)
Accept : 클라이언트가 이해 가능한 컨텐츠 타입이 무엇인지 알려줌
ex)Accept: text/html
Cookie : 서버에 의해 이전에 전송되어 저장된 HTTP cookies를 포함
ex)Cookie: name=value
If-Modified-Since : 조건부 요청으로 날짜를 지정하여 날짜 이후 수정되면 200, 수정되지 않았다면 리소스 없이 304 를 반환
ex)If-Modified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
Response header
→ 위치 또는 서버자체에 대한 정보 (컨텐츠와는 관련 없음)
ex)
Server : 서버의 소프트웨어 정보를 포함
ex)Server: gws
Location : 리다이렉트 할 URL
ex)Location: http://www.google.com
Entity header
→ Request, Response 모두 사용, 메세지 바디의 컨텐츠에 대한 정보
ex)
Content-Length : 바이트 단위의 본문의 크기
ex)Content-Length: 219
Content-Type : 리소스의 MIME type(media type)의 정보
ex)Content-Type: text/html
→ 터미널에서 curl -i -X GET http://google.com
명령어를 통해 google.com에 HTTP get 요청을 보낸 패킷을 캡쳐한 결과
→ 응답받은 HTTP 패킷의 정보
좋은 글 감사합니다.