티스토리 뷰

CS/Network

HTTP 메시지

bool-flower 2022. 4. 3. 01:08

HTTP(HyperText Transfer Protocol)


Text는 의미를 전달하는 목적을 가지고 글 또는 문서를 표현하는 것이다. 우리는 Text에 순차적으로 접근하고, 순차적으로 정보를 습득한다. 왼쪽에서 오른쪽으로 읽고, 위에서 아래로 내려가면서 읽는다.

HyperText는 이러한 특성을 뛰어넘는다는 의미다. 링크를 클릭해 다른 페이지로 이동한다던지, 같은 페이지의 다른 데이터로 이동하는 등 순차적인 접근을 뛰어넘어, 비순차적인 접근을 표현할 수 있는 것을 HyperText라고 한다.

HTML을 이용해 이 HyperText를 표현한다. 이 HyperText를 주고 받는 것에 대한 약속이 바로 HTTP이다. 다시 말해 HTTP는 HTML 리소스를 주고받기 위한 소통방식 또는 약속이다.

HTTP 특징


  • Stateless(무상태) - 모든 HTTP 요청은 독립적이므로 서버가 클라이언트의 상태를 보존하지 않는다.
  • Connectionless(비연결성) - 요청에 따른 응답이 완료가 되면 클라이언트와 서버의 연결은 끊어진다.

HTTP 메시지 구조


  • start-line - 시작 줄에는 실행되어야 하는 요청 또는 요청받은 것을 수행한 결과(성공, 실패)가 기록됨. 항상 한 줄
  • header - 요청에 대한 설명, 메시지 본문에 대한 설명. 옵션으로 HTTP 헤더 세트가 들어감.
  • blank line - 메타 정보가 모두 전송되었음을 알리는 빈 줄
  • message body - 요청 및 응답과 관련된 실제 메시지 또는 내용

HTTP 메시지는 요청 메시지, 응답 메시지로 구분된다. 구조는 위와 같이 구분되고 둘 다 같은 구조를 갖는다. start-line(시작 줄)과 header(헤더)를 묶어서 요청 헤드(head)라고 부른다.

HTTP 요청 메시지


Request-line 

  • HTTP Method, Request target, HTTP Version 이 한 줄에 표시되어 요청됨.
  • HTTP Method : 요청이 의도하는 동작을 정의. GET, POST, PUT, DELETE, OPTIONS 등
  • Request target : 요청이 전송되는 목표 URI
  • HTTP Version : 사용되는 HTTP 버전. ex) HTTP/1.1, HTTP/2.0 등
GET /search HTTP/1.1

HTTP Methods

  • Get - body 정보 없이 객체 요청 (필요시 URL에 포함시켜 입력 정보 전달)
  • POST - body 입력 정보와 함께 객체 요청
  • HEAD - 헤더 정보만 요청
  • PUT - 파일 업로드
  • DELETE - 파일 삭제

Headers

  • 해당 요청에 대한 추가 정보를 담고 있음. request 메시지 body의 총 길이 (Content-Length) 등.
  • Key : Value 값으로 되어 있음.
Host: google.com
User-Agent: HTTPie/0.9.3
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257

자주 사용되는 Headers 정보들

  • Host : 요청이 전송되는 target의 host url
  • User-Agent : 요청을 보내는 클라이언트의 대한 정보
  • Accept : 해당 요청이 받을 수 있는 응답(response) 타입.
  • Connection : 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지할 것인지 끊을 것인지 설정.
  • Content-Type : 해당 요청이 보내는 메시지 body의 타입. ex) JSON을 보내면 application/json.
  • Content-Length : 메시지 body의 길이.

Body

  • Request의 실제 메시지 또는 내용
  • Body가 없는 경우도 많음.
POST /payment-sync HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3

{
    "imp_uid": "imp_1234567890",
    "merchant_uid": "order_id_8237352",
    "status": "paid"
}

HTTP 응답 메시지


Status-Line

  • HTTP 버전, Status code, Status text로 구성됨
  • HTTP 버전
  • Status code : 응답 상태를 나타내는 코드(숫자) ex) 200, 404 등
  • Status text :  응답 상태를 간략하게 설명 ex) "Not Found"

Headers

  • Request의 Headers와 동일
  • response에서만 사용되는 header 값들이 있음

Body

  • Request의 Body와 동일
  • 모든 응답이 body가 있지는 않음. 데이터를 전송할 필요가 없을 경우 body가 비어있음.
HTTP/1.1 404 Not Found

Connection: close
Content-Length: 1573
Content-Type: text/html;
charset=UTF-8
Date: Mon, 20 Aug 2018 07:59:05 GMT

<!DOCTYPE html>
--- 생략

 

참조


https://brunch.co.kr/@coveryou/14

https://velog.io/@inah-_-/HTTP

https://medium.com/@rlatla626/http-%EC%A0%95%EB%A6%AC-3958d2a82312

https://velog.io/@duarufp06/HTTP-Stateless-Connectionless-HTTP-%EB%A9%94%EC%8B%9C%EC%A7%80-%EA%B0%9C%EB%85%90

https://hyojin96.tistory.com/entry/HTTP-%ED%86%B5%EC%8B%A0

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages https://velog.io/@teddybearjung/HTTP-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%ED%95%B5%EC%8B%AC-%EC%9A%94%EC%86%8C

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

HTTP 상태코드  (0) 2022.07.15
HTTP 원리와 지속 비지속 연결  (6) 2022.07.07
인터넷과 프로토콜  (0) 2022.06.16
SOP와 CORS  (0) 2022.06.13
이메일과 SMTP  (0) 2022.06.04
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday