HTTP

박제구·2021년 2월 15일
1

Network

목록 보기
6/6

🧩 HTTP 란?

  • Hypertext Transfer Protocal
  • 인터넷에서 하이퍼 텍스트 문서를 주고 받을 수 있는 통신 규약
  • 클라이언트 - 서버 간의 프로토콜
  • Application layer 프로토콜

🧩 HTTP 기본 흐름

  1. 클라이언트는 서버에 TCP 연결 요청
  2. 서버는 클라이언트로부터 TCP 연결을 Accept
  3. HTTP 메세지를 보내고 받음
  4. TCP 연결 종료
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를 줄일 수 있다.

🧩 HTTP의 구조

  • HTTP의 Request, Response는 유사한 구조를 갖는다.
  1. Start-line

    • Request
    Request ex) 
    POST / HTTP/1.1 
    
    1. HTTP Method
    2. Target URL
    3. HTTP version
    • Response
    Status-line 이라고 한다.
    
    Response ex) 
    HTTP/1.1 200 OK
    
    1. HTTP version
    2. Status code
    3. Status text (상태를 설명)
    
  2. 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

  1. Empty line
  • 헤더의 끝을 의미
  1. Body
  • Request와 관련된 HTML 폼, 콘텐츠가 들어가거나 Response 와 관련된 document가 포함

🧩 HTTP Method

  • HTTP는 Request Method 를 통해 클라이언트에서 웹서버로 리소스 요청의 목적을 알림
  • GET : 특정 리소스의 문서 정보 요청
  • HEAD : 특정 리소스의 헤더 정보 요청(본문X)
  • POST : 특정 리소스에 정보를 보냄
  • PUT : 요청 한 정보로 리소스의 전체를 갱신
  • PATCH : 요청 한 정보로 리소스의 일부분을 수정
  • DELETE : 특정 리소스 삭제
  • OPTIONS : 서버의 지원가능한 메소드를 확인
  • TRACE : 요청 리소스의 경로를 추적
  • CONNECT : 서버를 연결하는 중간 프록시 서버에 요청

🧩 Wireshark 를 이용한 HTTP 패킷 분석

💡 Request

→ 터미널에서 curl -i -X GET http://google.com 명령어를 통해 google.com에 HTTP get 요청을 보낸 패킷을 캡쳐한 결과

💡 Response

→ 응답받은 HTTP 패킷의 정보

  • 301 Moved Permanently 라는 응답 코드를 받았는데, 밑에 Location에 나와 있듯이 해당 URL이 영구적으로 새로운 URL로 변경되었음을 나타내주는 정보이다. (www.google.com 으로 정확히 GET 요청을 보내면 200 OK의 응답 코드를 받을 수 있다.)

References


Computer Networking: A Top-Down Approach (6th Edition)

HTTP 개요(MDN)

profile
안녕하세요!

1개의 댓글

comment-user-thumbnail
2021년 2월 15일

좋은 글 감사합니다.

답글 달기