공부

[HTTP의 이해] 1. 개요, HTTP 메소드, HTTP 상태 코드

glory 2020. 10. 1. 16:19

HTTP(Hyper Text Transfer Protocol)

  • Application Layer Protocol (OSI 7)
  • 신뢰할만한 전송 혹은 세션 레이어의 연결을 통해 메시지를 주고받는, 상태가 없는(stateless) 요청/응답 프로토콜

HTTP Client

  • 서버와 연결을 맺고 하나 이상의 HTTP 메시지를 보내는 프로그램

HTTP Server

  • 클라이언트의 연결을 수락하고 HTTP 요청을 처리하여 응답을 보내주는 프로그램

 


HTTP Method

Properties

  • Idempotent : 여러번 요청해도 의도한 효과는 한번 요청한 것과 같다.
  • Safe : 근본적으로 read-only인 효과를 의도한 요청

 

1. Get

  • "서버의 리소스를 달라"
  • Safe, Idempotent
GET /example HTTP/1.1
Host: example.org:8080

 

2. POST

  • "서버에 데이터를 보내겠다"
  • Unsafe, Non-Idempotent
POST /example HTTP/1.1
Host: example.org:8080
Content-Type: application/json

{"name": "naver"}

 

3. PUT

  • "서버가 갖고있는 리소스를 내가 보내는 것으로 대체하라"
  • Unsafe, Idempotent
PUT /example HTTP/1.1
Host: example.org:8080
Content-Type: application/json

{"name": "naver"}

※ 주의 : 리소스를 "수정"하는 요청이 아니다. 리소스를 URL에 가져다 넣는 것(Get했을 때 읽을 수 있는 정보를 모두 파라미터로 넘겨야한다)

 

4. DELETE

  • "서버가 가지고있는 리소스를 삭제하라"
  • Unsafe, Idempotent
DELETE /example/1 HTTP/1.1
Host: example.org:8080

 

5. PATCH

  • "서버가 가지고있는 리소스를 수정하라"
  • Unsafe, Non-Idempotent
PATCH /example/1 HTTP/1.1
Host: example.org:8080
Content-Type: application/json-patch+json
If-Match: "abc123"

[{"op": "replace"}, {"path": "/location", "value", "Seoul"}]

 

6. OPTIONS

  • "특정 URL에 대한 옵션들을 알려달라"
  • 보통 사용 가능한 메소드들을 반환함

 

7. HEAD

  • "GET으로 요청하면 어떤 헤더들을 받게 될 지 알려달라"
  • GET과 같으나 본문이 없음

 

8. TRACE

  • "내 요청이 서버에 갔다가 응답이 돌아올때 까지 어떤 프록시들을 거치느니 알려달라"

 

9. CONNECT

  • SSL 터널이 등 특수 용도에 사용하는 메소드

 


HTTP Status Code

1xx - Informational (100, 101)

  • 100 Continue 
  • 101 Switching Protocols

 

2xx - Successful (200 ~ 206)

  • 200 OK
  • 201 Created
  • 202 Accepted : 처리가 오래 걸리는 request의 경우, 우선 OK로 응답하고 후처리(background job)로 처리한 결과를 페이지에 띄우거나 결과 상태를 보여줄 때 사용
  • 204 No Content : Delete 시(본문이 필요없는 경우), 특별히 요청자에게 보여줄 본문이 필요없을 때

 

3xx - Redirection (300 ~ 307)

  • 301 Moved Permanently
  • 302 Moved Temporary
  • 303 See Other : 무조건 redirect, "이유는 필요없고 다른 곳을 봐"
  • 304 Not Modified
  • 307 Temporary Redirect
  • 308 Permanently Redirect

※ 301, 302와 307, 308의 차이 : 301, 302는 Redirect 시 Method를 유지시키는 것을 보장하지 않는다. 307, 308은 Method를 유지시켜서 바뀐 URL에 request UA의 Method를 전달한다. (307, 308을 표준으로 사용하는 것으로 권장)

 

4xx - Client Error (400 ~ 417)

  • 400 Bad Request
  • 403 Forbidden
  • 404 Not Fount

 

5xx - Server Error (500 ~ 505)

  • 500 Internal Server Error
  • 502 Bad Gateway
  • 503 Service Unavailable

 

http status code 참고 : https://en.wikipedia.org/wiki/List_of_HTTP_status_codes