HTTP에 대해 알아보자

Daye Kang·2019년 12월 10일
2
post-custom-banner

HTTP란?

: Hyper Text Transfer Protocol: HTML(문서, 텍스트)을 교환하기 위해 만들어진 통신규약.

'데이터가 전송된다'라는 것: 텍스트를 보내는 것, 이해할 수 있는 통신 규약을 통해서 HTML에 맞춰 만들어진 통신규약(프로토콜)

HTTP의 핵심 요소

  1. 요청과 응답 Request & Response
  • 클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조.

  • 클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어짐.

  • 요청을 보냈는데 응답이 오지 않으면 에러가 뜸.

  • 요청을 보내는 주체: 사용자가 사용하는 웹 브라우저

  • 요청을 보내는 주체: 백엔드 API

    (frontEnd) --request--> (webBrowser),
    rendering --data request--> (backEnd) --response--> (webBrwoser)

  1. Stateless (각 통신은 독립적)
  • 각 통신은 독립적; 현재 통신 이전에 통신이 있다는 걸 알지 못함.
    예를 들어, 로그인을 하더라도 그 통신이 있었다는 걸 알지 못해 전 통신에 대한 정보가 없으므로 그 통신의 정보를 다음 요청을 보낼 때 같이 첨부해서 보냄.
  • 따라서 http 통신 처리는 모든 정보를 함께 보내야 함.
  • 웹 브라우저는 모든 정보를 다 저장을 해야 함. => 다음 요청을 할 때 필요한 정보를 첨부해서 보냄.
    (with token, 토큰은 하나의 문자배열로 HTTP의 규격형태에 맞춘 것)

HTTP의 요청 구조(HTTP Request)

: request 구조: start line, headers, body

  1. start line: http request의 첫 번째 라인으로 HTTP Method(요청이 원하는 방법), Request target(end Point), HTTP version 으로 이루어져 있다.

    a) HTTP Method

    • 해당 request가 의도한 action을 정의하는 부분.
    • HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등등이 있다.
    • 주로 GETPOST 가 쓰임

    b) Request target

    • 해당 request가 전송되는 목표 uri.
    • 예를 들어 /login.
    • naver.com(도메인)/search(target, 기능)

    c) HTTP Version

    • 말 그대로 사용되는 HTTP 버전. 버전에는 1.0, 1.1, 2.0 등이 있다.
  1. Headers: 요청에 대한 정보(메타 데이터), 해당 request에 대한 추가 정보(additional information)를 담고 있는 부분.
  • key:value 값으로 구성되어 있음.
  • HOST: google.com => Key = HOST / Value = google.com
  • HOST: 요청이 전송되는 target의 host url.
    예를 들어, google.com
  • User-Agent: 요청을 보내는 클라이언트에 대한 정보, 예를 들어 웹브라우저에 대한 정보(크롬)
    그리고 이러한 정보는 기업의 마케팅, 홍보, 광고 등에 이용되고 있다.
  • Accept: 해당 요청이 받을 수 있는 응답(response) 타입
  • Connection: 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 커넥션을 유지할 것인지 아니면 끊을 것인지에 대해 지시하는 부분
  • Content-Type: 해당 요청이 보내는 메세지 body의 타입.
    예를 들어, JSON을 보내면 application/json.
  • Content-Length: 메세지 body의 길이.
    Accept: */*
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Type: application/json
    Content-Length: 257
    Host: google.com
    User-Agent: HTTPie/0.9.3

3. Body
  - 해당 request의 실제 메세지 내용
  - Body가 없는 request도 많다.
  예를 들어, Get 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
}


** https는 http를 암호화한 정보로 쉽게 확인할 수 있는 http의 정보에 암호를 걸어 쉽게 정보에 접근할 수 없게 한 것.


# HTTP이 응답 구조(HTTP Response)
: Status Line, Headers, Body 로 이루어져 있다.

1. Status Line
: response의 상태를 간략하게 나타내주는 부분. 3부분으로 구성되어 있다. 
HTTP Version, Status Code, Status text

1) Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있다. 
예를 들어, `200`

2) Status text: 응답 상태를 간략하게 설명해주는 부분
예를 들어, "Not Found"

HTTP/1.1 404 Not Found


2. Headers
- Request의 headers와 동일
- 다만 response 에서만 사용되는 headers 값들이 있다.

3. Body
- Response의 body와 일반적으로 동일.
- Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 피요가 없을경우 body가 비어있게 됨.



reference: https://stackoverflow.com/c/wecode/questions/308


profile
뭐든 하자
post-custom-banner

0개의 댓글