HTTP 완벽 가이드 1-3. HTTP 메시지 ②
📘 HTTP 완벽 가이드 읽고 정리하기 🐿︎
HTTP 메서드
- Safe Method : GET과 HEAD 메서드를 사용하는 HTTP 요청의 결과로 인해 서버에서 일어나는 일은 아무것도 없기 때문에 두 메서드는 안전하다고 할 수 있음
GET
- 주로 서버에 리소스를 달라고 요청하기 위해 사용됨
HEAD
-
GET처럼 행동 but 서버는 응답으로 헤더만을 돌려줌 (엔터티 본문은 반환되지 않음)
-
리소스를 가져오지 않고도 그에 대한 무엇인가(ex) 타입)를 알아낼 수 있다.
-
응답의 상태 코드를 통해 개체가 존재하는지 확인 가능
-
헤더를 확인 해 리소스가 변경되었는지 검사할 수 있음
-
GET으로 얻는 것과 헤더가 정확히 일치함을 보장해야 함
HEAD
-
GET 메서드가 서버로부터 문서를 읽어 들인다면, PUT 메서드는 서버에 문서를 쓰는 것
-
서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 이미 URL이 존재한다면 본문을 사용해서 교체
-
PUT은 콘텐츠를 변경할 수 있게 해주기 때문에 많은 웹 서버가 PUT을 수행하기 전 사용자에게 비밀번호를 입력해서 로그인하도록 요구
POST
-
서버에 입력 데이터를 전송하기 위해 설계됨
-
HTML 폼을 지원하기 위해 많이 사용됨
-
폼에 담긴 데이터는 서버로 전송되고, 서버는 이를 모아 필요로 하는 곳(ex) 데이터를 처리할 서버 게이트웨이 프로그램)에 보냄
TRACE
-
클라이언트에게 자신의 요청이 서버에 도달했을 때 어떻게 보이게 되는지 알려줌
-
요청 전송의 마지막 단계에 있는 서버는 자신이 받은 요청 메시지를 본문에 넣어 TRACE 응답을 되돌려줌 -> 클라이언트는 자신과 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답 연쇄를 따라가면서 자신이 보낸 메시지가 망가졌거나 수정됐는지, 그렇다면 어떻게 변경되었는지 확인 가능
-
TRACE 요청은 어떠한 엔터티 본문도 보낼 수 없음 > 엔터티 본문에 서버가 받은 요청이 그대로 들어있음
OPTIONS
- 서버가 특정 리소스에 대해 지원하는 메서드의 목록을 반환하게 함
DELETE
- 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청
상태 코드
- 상태 코드는 클라이언트에게 그들의 트랜잭션을 이해할 수 있는 쉬운 방법을 제공
100-199
-
정보성 상태 코드
-
HTTP/1.1에서 도입됨
-
-
100 Continue
: 요청의 시작 부분 일부가 받아들여졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함 / 100을 보낸 후 서버는 반드시 요청을 받아 응답해야 함 -
101 Switching Protocols
: 클라이언트가 Upgrade 헤더에 나열한 것 중 하나로 서버가 프로토콜을 바꾸었음을 의미
-
200-299
-
성공 상태 코드
-
-
200 OK
: 요청은 정상, 엔터티 본문은 요청된 리소스 포함 -
201 Created
: 서버 개체 생성(ex) PUT) 요청을 위한 것 / 응답은 생성된 리소스에 대한 최대한 구체적인 정보가 담긴 Location 헤더와 함꼐, 그 리소스를 참조할 수 있는 여러 URL을 엔터티 본문에 포함해야 함 -
203 Non-Authoritative Information
: 중개자가 리소스의 사본을 갖고 있었지만 리소스에 대한 메타 정보(헤더)를 검증하지 못한 경우 발생 -
204 No Content
: 응답 메시지는 헤더와 상태줄 포함 but 엔터티 본문 포함하지 않음 / 웹브라우저를 새 문서로 이동시키지 않고 갱신하고자 할 때 사용 -
205 Reset Content
: 주로 브라우저를 위해 사용되는 코드 / 브라우저에게 현재 페이지에 있는 HTML 폼에 채워진 모든 값을 비우라고 말함 -
206 Partial Content
: 부분(범위) 요청 성공 / Content-Rage와 Date 헤더를 반드시 포함해야 하며, Etag와 Content-Location 중 하나의 헤더를 포함해야 함
-
300-399
-
리다이렉션 상태 코드
-
-
300 Multiple Choices
: 클라이언트가 동시에 여러 리소스를 가리키는 URL을 요청한 경우, 그 리소스의 목록과 함께 반환 / 사용자는 목록에서 원하는 하나를 선택할 수 있음 (ex) 어떤 서버가 하나의 HTML 문서를 두 언어로 제공하는 경우) -
301 Moved Permanently
: 요청한 URL이 옮겨졌을 경우 / 응답은 Location 헤더에 현재 리소스가 존재하고 있는 URL을 포함해야 함 -
302 Found
: ==301 / 클라이언트는 Location 헤더로 주어진 URL을 리소스를 임시로 가리키기 위한 목적으로 사용해아 함 / 이후의 요청에서는 원래 URL을 사용해야 함 -
303 See Other
: 클라이언트에게 리소스를 다른 URL에서 가져와야 한다고 말해주고자 할 때 사용 / 새 URL은 응답 메시지의 Location 헤더에 들어있음 / 주 목적은 POST 요청에 대한 응답으로 클라이언트에게 리소스의 위치를 알려주기 위함 -
302 Not Modified
: 클라이언트가 GET과 같은 조건부 요청을 보냈고, 그 요청한 리소스가 최근에 수정된 일이 없다면, 이 코드는 리소스가 수정되지 않았음을 의미하게 됨 / 응답은 엔터티 본문을 가져서는 안됨 -
305 Use Proxy
: 리소스가 반드시 프락시를 통해 접근되어야 함을 나타내기 위해 사용 / 프락시의 위치는 Location 헤더를 통해 주어짐 -
307 Temporary Redirect
: ==301 / 클라이언트는 Location 헤더로 주어진 URL을 리소스를 임시로 가리키기 위한 목적으로 사용해아 함 / 이후의 요청에서는 원래 URL을 사용해야 함
-
400-499
-
클라이언트 에러 상태 코드
-
-
400 Bad Request
: 클라이언트가 잘못된 요청을 보냄 -
401 Unauthorized
: 리소스를 얻기 전 클라이언트에게 스스로를 인증하라고 요구하는 내용의 응답을 적절한 헤더와 함께 반환 -
403 Forbidden
: 요청이 서버에 의해 거부되었음 / 보통 서버가 거절의 이유를 숨기고 싶을 때 사용 -
404 Not Found
: 서버가 요청한 URL을 찾을 수 없음 / 종종 클라이언트 애플리케이션이 사용자에게 보여주기 위한 엔터티가 포함됨 -
405 Method Not Allowed
: 요청한 URL에 대해 지원하지 않는 메서드로 요청받았을 때 사용 / 요청한 리소스에 대해 어떤 메서드가 사용 가능한지 클라이언트에게 알려주기 위해, 요청에 Allow 헤더가 포함되어야 함 -
406 Not Acceptable
: 주어진 URL에 대한 리소스 중 클라이언트가 받아들일 수 있는 것이 없는 경우 사용 / 종종 서버는 클라이언틍게 왜 요청이 만족될 수 없었는지 알려주는 헤더를 포함 -
407 Proxy Authentication Required
: ==401 / but 리소스에 대해 인증을 요구하는 프락시 서버를 위해 사용 -
408 Request Timeout
: 클라이언트의 요청을 완수하기에 시간이 너무 많이 걸리는 경우, 서버는 이 상태코드로 응답 후 연결을 끊을 수 있음 -
409 Conflict
: 서버는 요청이 충돌을 일으킬 염려가 있다고 생각될 때 이 요청을 보낼 수 있음 / 응답은 충돌에 대해 설명하는 본문을 포함해야 함 -
410 Gone
: 주로 웹 사이트를 유지보수 하면서, 서버 관리자가 클라이언트에게 리소스가 제거된 경우 이를 알려주기 위해 사용 -
411 Length Required
: 서버가 요청 메시지에 Content-Length 헤더가 있을 것을 요구할 때 사용 -
412 Precondition Failed
: 클라이언트가 조건부 요청을 했는데 그 중 하나가 실페 -
413 Request Entity TOo Large
: 클라이언트가 서버가 처리할 수 있는 or 처리하고자 하는 한계를 넘은 크기의 요청을 보냄 -
414 Request URI Too Long
: 클라이언트가 서버가 처리할 수 있는 or 처리하고자 하는 한계를 넘은 길이의 요청 URL이 포함된 요청을 보냄 -
415 Unsupported Media Type
: 클라이언트가 서버가 이해하거나 지원하지 못하는 내용 유형의 엔터티를 보냄 -
416 Request Range Not Satisfiable
: 요청 메시지가 리소스의 특정 범위를 요청했는데, 그 범위가 잘못되었거나 맞지 않음 -
417 Expectation Failed
: 요청에 포함된 Expect 요청 헤더에 서버가 만족시킬 수 없는 기대가 담겨있음
-
500-599
-
서버 에러 상태 코드
-
-
500 Internal Server Error
: 서버가 요청을 처리할 수 없게 만드는 에러를 만났을 때 사용 -
501 Not Implemented
: 서버가 지원하지 않는 메서드를 사용하는 등 클라이언트가 서버의 능력을 넘은 요청을 했을 때 사용 -
502 Bad Gateway
: 프락시나 게이트웨이처럼 행동하는 서버가 그 요청 응답 연쇄에 있는 다음 링크로부터 가짜 응답에 마주쳤을 때 사용 (ex) 자신의 부모 게이트웨이에 접속하는 것이 불가능할 때) -
503 Service Unavailable
: 현재는 서버가 요청을 처리해 줄 수 없지만 나중에는 가능함을 의미 -
504 Gateway Timeout
: 408과 비슷 but 다른 서버에게 요청을 보내고 응답을 기다리다 타임아웃이 발생한 게이트웨이나 프락시에서 온 응답 -
505 HTTP Version Not Supported
: 서버가 지원할 수 없거나 지원하지 않으려고 하는 버전의 프로토콜로 된 요청을 받았을 때
-