[네트워크] | HTTP 메시지

제롬·2022년 4월 19일
0
post-custom-banner

HTTP 메시지 구조

// HTTP 7230 공식스펙
 HTTP-message   = start-line
                      *( header-field CRLF )
                      CRLF
                      [ message-body ]

[HTTP 메시지 구조]

  • 시작라인, 헤더, 공백라인, 메시지 본문으로 구성되어 있다.
  • 요청/응답 메시지 모두 동일한 구조를 갖지만 각 구조의 구성요소들은 차이가 있다.
  • 공백라인(CRLF)은 필수정보

HTTP 메시지 종류

[요청 메시지]

HTTP 요청 메시지HTTP 메서드, 리소스의 경로, 프로토콜 버전, 헤더로 구성된다. (HTTP 요청 메시지에도 메시지 본문이 추가될 수 있다.)

[응답 메시지]

HTTP 응답 메시지프로토콜 버전, 상태 코드, 상태 메시지, 헤더 그리고 메시지 본문으로 구성된다.

HTTP 메시지 구성요소 - 전체구조

[요청 메시지 전체 구조]

// 요청 메시지
/* rfc7230 공식스펙 */
// method(GET,POST) SP(공백) request-target SP HTTP-version CRLF(엔터)

GET /search?q=hello&hl=ko HTTP/1.1
Host:www.google.com

[응답 메시지 전체 구조]

// 응답 메시지
/* rfc7230 공식스펙 */
// HTTP-version SP(공백) status-code SP reason-phrase CRLF(엔터)

HTTP/1.1 200 OK
Content-type: text/html;charset=UTF-8
Content-Length: 3423

<HTML>
  <body>...</body>
</HTML>

HTTP 메시지 구성요소 - 시작라인

☑️ 요청 메시지 - 시작라인

GET /search?q=hello&hl=ko HTTP/1.1
  • HTTP 메서드(method): GET
  • 요청 대상(request-target): /search?q=hello&hl=ko
  • HTTP 버전(version): HTTP/1.1

#️⃣ HTTP 메서드

  • 종류 : GET, PUT, POST, DELETE
  • 서버가 수행해야할 동작 지정

#️⃣ 요청 대상(request-target)

  • absolute-path[?query](절대경로[?쿼리])
  • 절대경로: /로 시작하는 경로

☑️ 응답 메시지 - 시작라인

HTTP/1.1 200 OK
  • HTTP 버전: HTTP/1.1
  • 상태 코드(Status Code): 200
  • 상태 메시지(Status Message): OK

#️⃣ 상태 코드(Status Code)

  • 요청의 성공과 실패를 나타낸다.
    • 200 : 성공
    • 400 : 클라이언트 요청 오류
    • 500 : 서버 내부 오류

#️⃣ 상태 메시지(Status Message)

  • 사람이 이해할 수 있는 짧은 상태 코드를 설명하는 글

HTTP 메시지 구성요소 - 헤더

[HTTP 헤더 형식]

header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
// field-name 대소문자 구분 없음

☑️ 요청 메시지 - 헤더

Host:www.google.com

☑️ 응답 메시지 - 헤더

Content-type: text/html;charset=UTF-8
Content-Length: 3423
  • HTTP 전송에 필요한 모든 부가정보를 담고있다.
    • 메시지 바디의 내용, 메시지 바디의 크기, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보
  • 표준헤더가 많다.
  • 필요시 임의의 헤더를 추가할 수 있다.

HTTP 메시지 구성요소 - 메시지 바디

[HTTP 메시지 바디 형식]

<HTML>
  <body>...</body>
</HTML>
  • 실제 전송할 데이터
  • HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능

[Reference]
gparkkii.log
Catsbi's Dlog
김영한 - HTTP 웹 기본지식 강의
Mozilla

post-custom-banner

0개의 댓글