TIL - HTTP

KDG·2020년 6월 10일
0

HTTP

  • HyperText Transfer Protocol

  • 하이퍼텍스트(HTML)문서를 교환하기 위해 만들어진 protocol(통신규약)

  • 웹상에서 네트워크로 서버끼리 통신할 때 어떠한 형식으로 서로 통신을 하자고 규정해놓은 것(통신형식, 통신구조)

  • 통신방식

    • 클라이언트가 HTTP request(요청)를 서버에 보내면 서버는 HTTP response(응답)를 보내는 구조
    • HTTP는 stateless(상태를 저장하지 않음)
      • 클라이언트가 요청을 보내고 응답을 받은 후, 나중에 다시 요청을 보낼 때 전의 요청/응답에 대해 알지못함
      • 만약 요청/응답의 진행과정이나 데이터가 필요할 때는 쿠키나 세션등을 사용한다.

* HTTP request 구조

1. start line(HTTP request의 첫라인)

  • HTTP Method
    • 해당 request가 의도한 것을 정의하는 부분
    • HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등이 있다.
  • Request target
    • 해당 request가 전송되는 목표 uri
    • ex) /login, /search
  • HTTP Version
    • 사용되는 HTTP버전
    • 1.0, 1.1, 2.0 등이 있다.
GET /search HTTP/1.1

2. headers

  • 해당 request에 대한 추가 정보를 담고 있는 부분
  • Key : Value 값으로 되어있다.
  • Headers도 크게 3부분으로 나뉘어짐(general headers, request headers, entity headers)
  • 자주 사용되는 headers 정보
    - Host
    요청이 전송되는 target의 host url:
    - User-Agent
    요청을 보내는 클라이언트의 대한 정보, 웹브라우저에 대한 정보.
    - Accept
    해당 요청이 받을 수 있는 응답(response) 타입.
    - Connection
    해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 관한 정보
    - Content-Type
    해당 요청이 보내는 메세지 body의 타입.
    - Content-Length:
    메세지 body의 길이.
Accept: */*
Connection: keep-alive
Content-Type: application/json 
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3

3. Body

  • 클라이언트가 요청한 것의 실제 내용이 담겨있다.
  • 하지만 body가 없는 것도 있음
POST /payment-sync HTTP/1.1   ## start line

Accept: application/json    ## headers
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",        ## body
    "merchant_uid": "order_id_8237352",
    "status": "paid"
}

* HTTP response 구조

1. status line

  • response의 상태를 간략하게 나타내준다.
    • HTTP 버전
    • Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드.
    • Status text: 응답 상태를 간략하게 설명해주는 부분.
HTTP/1.1 404 Not Found

2. headers

  • HTTP request의 headers와 동일
  • 그러나 respons에서만 사용되는 header값들이 있음
    ex) User-Agent 대신에 Server 헤더가 사용된다.

3. Body

  • body도 request와 동일
  • 데이터를 전송할 필요가 없을경우 body가 비어있게 된다.

* HTTP Methods

  • GET

    • 데이터를 서버로 부터 받아올때 사용
    • 데이터 생성/수정/삭제 없이 받아오기만 할때 사용
  • POST

    • 데이터를 생성/수정/삭제 할때 사용
    • 데이터를 생성 및 수정 할때 많이 사용하기 때문에 대부분 request body가 포함돼서 보내짐
  • PUT

    • POST와 비슷하다. 데이터를 생성 할때 사용
  • DELETE

    • 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰임
  • OPTIONS

    • 주로 요청 uri에서 사용할 수 있는 Method를 받아올때 사용
    • 예를 들어, /update uri에서 어떤 method가 요청 가능한가(GET? POST?)를 알고 싶을때 먼저 OPTIONS을 사용해서 확인한다. 그럼 GET인지 POST인지 알려준다.

* HTTP Status Code

  • 200 OK
    문제없이 잘 실행될때 보내는 코드

  • 301 Moved Permanently
    해당 uri가 다른 주소로 바뀌었을때 보내는 코드

  • 400 Bad Request
    해당 요청이 잘못된 요청일때 보내는 코드. 주로 요청에 포함된 input 값이 잘못된 값일때 사용되는 코드

  • 401 Unauthorized
    유저가 해당 요청을 진행하려면 회원가입이나 로그인 등을 해야 진행할 수 있다는것을 알려주는 코드

  • 403 Forbidden
    유저가 해당 요청에 대한 권한이 없다는 코드

  • 404 Not Found
    요청된 uri가 존재하지 않다는 코드

  • 500 Internal Server Error
    서버에서 에러가 났을 때 보내는 코드

0개의 댓글