HTTP 응답 코드와 Request Method
Web에서 사용되는 HTTP의 응답 코드와 Request Method에 대해서 알아보겠습니다.
1. HTTP 응답 코드 (Response Code)
클라이언트가 서버에 요청(request)을 하면 서버는 응답(response)을 보내주는데 이 때 함께 보내주는 코드를 응답 코드라고 합니다. 각 코드는 100번대 단위로 구분되어 있으며 첫번째 자리를 Response Class Code라고 합니다. 이것은 응답의 종류를 구분하기위해 사용됩니다.
1.1 Response Class Code
응답 코드의 첫번째 자리인 Response Class Code의 종류는 다음과 같습니다.
Response Class Code |
구분 |
설명 |
1 |
정보 |
요청을 받고 처리중인 상태 |
2 |
성공 |
요청을 정상적으로 처리 |
3 |
리다이렉션 |
요청 완료를 위해 추가 조치가 필요 |
4 |
클아이언트 오류 |
클라이언트 요청을 처리할 수 없음 |
5 |
서버 오류 |
서버에서 요청을 처리할 수 없음 |
1.2 1xx 응답 코드
1xx 응답 코드는 정보 응답 코드입니다. 요청을 받은 상태이며 작업 진행중인 상태입니다. 서버가 클라이언트에게 보내지 않는 응답 코드이지만 101 코드의 경우 web socket 등에서 쓰이는 특징이 있습니다.
Code |
상태 |
설명 |
100 |
continue |
서버가 요청의 첫 부분을 받고 나머지를 기다리는 상태. 서버가 요청자의 나머지 요청을 기다리는 상태. |
101 |
switching protocol |
요청자가 서버에 프로토콜 전환을 요청한 상태 |
102 |
processing |
서버가 요청을 모두 수신한 상태 |
1.3 2xx 응답 코드
2xx 응답 코드는 성공 응답 코드입니다. 서버는 클라이언트가 요청한 작업을 성공적으로 받아들인 상태입니다.
Code |
상태 |
설명 |
200 |
ok |
서버가 요청을 정상적으로 처리한 상태. 가장 일반적으로 볼 수 있는 http 상태 |
201 |
created |
서버가 요청을 정상적으로 처리 했으며, 새로운 리소스를 생성한 상태 |
202 |
accepted |
서버가 요청을 받아들였지만 처리되지 않은 상태 |
203 |
non-authritative information |
서버가 요청을 정상적으로 처리했지만, 다른 소스에서 수신된 정보를 제공하는 상태 |
204 |
no content |
서버가 요청을 정상적으로 처리했지만, 콘텐츠를 제공하지 않음 body가 포함되지 않으며 클라이언트에게 정보를 보내지 않을 때 사용 |
205 |
reset content |
서버가 요청을 정상적으로 처리했지만, 콘텐츠를 표시하지 않음 서버가 클라이언트에게 요청된 페이지를 리셋할 것을 알려줌 |
206 |
partial content |
서버가 요청을 정상적으로 처리했지만, 콘텐츠의 일부분만을 제공 |
207 |
multi-status |
여러 리소스가 여러 응답 코드에 해당할 경우 적절한 상황에 맞는 정보를 전달 |
208 |
already reported |
동일한 컬렉션으로 바인딩된 내부 멤버의 중복 제거를 위해 사용 |
226 |
IM used |
서버가 요청에 대한 처리를 모두 완료하였고, 응답에 대한 인스턴스가 현재 인스턴스에 적용된 상태 |
1.4 3xx 응답 코드
3xx 응답 코드는 리다이렉션 응답 코드입니다. 서버가 요청을 완료하기 위해서는 리다이렉션이 이루어져야하는 상태입니다. 헤더의 location에 실제 이동할 URL이 작성되어 반환됩니다.
Code |
상태 |
설명 |
300 | multiple choice |
서버의 요청에 따라 여러 조치를 선택 가능 서버가 클라이언트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 목록을 제공 |
301 |
moved permanently |
요청한 리소스의 URI가 영구적으로 변경된 상태 영구적으로 컨텐츠가 이동된 상태 |
302 |
found |
요청한 리소스의 URI가 일시적으로 변경된 상태 |
303 |
see other |
요청에 대한 리소스가 다른 URI에 있기 때문에, GET 메서드를 사용하여 얻어와야하는 상태 리다이렉션 위치를 GET 메서드를 사용하여 얻어와야함 |
304 |
not modified |
요청한 리소스가 마지막 요청 이후 변경된 것이 없는 상태 서버는 클라이언트에게 기존의 로컬 캐시 리소스를 사용할 것을 알려줌 |
305 |
use proxy |
프록시를 사용해야만 요청한 페이지에 접근 가능함을 알려줌 |
306 |
unused |
사용되지 않은 응답 코드이며 추후 사용을 위해 예약됨 |
307 |
temporary redirect |
임시로 페이지를 리다이렉트함 |
308 |
permanent redirect |
영구적으로 페이지를 리다이렉트함 |
1.5 4xx 응답 코드
4xx 응답 코드는 클라이언트 오류인 경우 사용되는 응답 코드입니다.
Code |
상태 |
설명 |
400 |
bad request |
클라이언트의 요청 구문이 잘못된 상태 |
401 |
unauthorized |
인증이 필요한 리소스에 인증 없이 접근한 경우 |
402 |
payment required |
결제가 필요한 리소스에 결제 없이 접근한 경우 향후 사용하기 위해 예약된 코드 |
403 |
forbidden |
서버가 요청을 거부한 경우 해당 클라이언트를 차단하거나 권한이 없는 경우 발생 |
404 |
not found |
클라이언트가 찾는 리소스가 없는 경우 |
405 |
method not allowed |
서버에서 허용되지 않은 메서드가 요청된 경우 |
406 |
not acceptable |
요청은 정상이지만 서버에서 받아들일 수 없는 경우 일반적으로 웹 방화벽에 걸리는 경우 이 코드를 반환함 |
407 |
proxy authentication required |
프록시 인증이 필요한 경우 |
408 |
request timeout |
요청 시간이 초과되었을 경우 |
409 |
conflict |
서버가 요청 수행중에 충돌이 발생한 경우 |
410 |
gone |
404 처럼 리소스가 없는 경우이지만, 410은 리소스가 완전히 사라진 경우 발생 |
411 |
length required |
서버가 요구하는 유효한 content-length 헤더 필드가 필요한 경우 |
412 |
precondition failed |
요청이 사전조건을 만족하지 않은 경우 |
413 |
requested entity too large |
요청의 본문 길이가 너무 긴 경우 |
414 |
requested url too long |
요청의 url이 너무 긴 경우 |
415 |
unsupported media type |
요청의 미디어 포맷을 서버에서 지원하지 않는 경우 |
416 |
requested range not satisfiable |
요청 헤더의 range 범위가 잘못 지정된 경우 |
417 |
expectation failed |
요청 헤더의 expect 필드가 적절하지 않은 경우 |
418 |
I'm a teapot |
HTCPCP |
429 |
too many requests |
일정 시간동안 너무 많은 요청이 발생했을 때 이를 거부하기 위해 사용 |
451 |
unavailable for legal reasons |
국가 검열등의 이유로 차단되었을 경우 |
1.6 5xx 응답 코드
5xx 응답 코드는 정상적인 요청에 대해 서버 오류가 발생한 경우 사용되는 응답 코드입니다.
Code |
상태 |
설명 |
500 |
internal server error |
서버에서 오류가 발생하여 작업을 수행할 수 없는 경우 |
501 |
not implemented |
요청 메서드가 서버에서 지원되지 않아 처리할 수 없는 경우 |
502 |
bad gateway |
게이트웨이가 잘못 되었을 경우 |
503 |
service temporarily unavailable |
서버를 일시적으로 사용할 수 없는 경우 일반적으로 유지보수중인 경우 |
504 |
gateway timeout |
게이트웨이 시간초과 상태 |
505 |
http version not supported |
http 버전을 서버에서 처리할 수 없는 경우 |
509 |
apache bw/limited extension |
대역폭 제한을 초과한 경우 |
520 |
unknown error |
알 수 없는 오류 |
2. HTTP 요청 메서드 (Request Method)
HTTP 요청 메서드는 주어진 리소스에 필요한 액션이 수행되게 하는 요청 메소드의 집합을 정의합니다. 클아이언트가 서버에게 전달한 요청에 포함되며 서버는 이에 따라 주어진 메서드에 해당하는 역할을 수행합니다.
HTTP 요청 메서드의 종류는 다음과 같습니다.
Request Method |
전송 형태 |
설명 |
GET |
GET [request-uri]?[query-string] HTTP/1.1 Host:[Hostname] 또는 [IP] |
요청받은 URI의 정보를 검색하여 응답 |
HEAD |
HEAD [request-uri] HTTP/1.1
Host:[Hostname] 또는 [IP] |
GET 메서드와 동일하지만 response에 body가 없고 응답코드와 head만 반환 |
POST |
POST [request-uri] HTTP/1.1
Host:[Hostname] 또는 [IP]
Content-Lenght:[Length in Bytes]
Content-Type:[Content Type] [Data] |
요청된 리소스를 생성(Create)함. |
PUT |
PUT [request-uri] HTTP/1.1 Host:[Hostname] 또는 [IP] Content-Lenght:[Length in Bytes] Content-Type:[Content Type]
[Data] |
요청된 리소스를 수정(Update)함. 리소스 전체를 수정함. |
PATCH |
PATCH [request-uri] HTTP/1.1 Host:[Hostname] 또는 [IP] Content-Lenght:[Length in Bytes] Content-Type:[Content Type]
[Data] |
PUT 메서드처럼 요청된 리소스를 수정하지만, PATCH 메서드는 해당 리소스의 일부만 수정함. |
DELETE |
DELETE [request-uri] HTTP/1.1
Host:[Hostname] 또는 [IP] |
요청된 리소스를 삭제(Delete)함. |
CONNECT |
CONNECT [request-uri] HTTP/1.1
Host:[Hostname] 또는 [IP] |
서버에 프록시 기능을 요청할 경우 사용. |
TRACE |
TRACE [request-uri] HTTP/ 1.1
Host: [Hostname] 또는 [IP] |
원격지 서버에 loopback 메시지를 요청하기 위해 사용 |
OPTIONS |
OPTIONS [request-uri] HTTP/ 1.1
Host: [Hostname] 또는 [IP] |
서버에서 지원되는 메서드 종류를 확인하기 위해 사용 |
이상으로 HTTP 응답 코드와 Method에 대해 알아봤습니다.
※ 참고 문헌
developer.mozilla.org, HTTP 상태 코드, https://developer.mozilla.org/ko/docs/Web/HTTP/Status
ko.wikipedia.org, HTTP 상태 코드, https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
ooz.co.kr, HTTP 서버 응답 코드 (Response Code) 정리, https://ooz.co.kr/260
namu.wiki, HTTP/응답 코드, https://namu.wiki/w/HTTP/%EC%9D%91%EB%8B%B5%20%EC%BD%94%EB%93%9C
javaplant.tistory.com, HTTP 응답코드 메소드 정리 GET, POST, PUT, PATCH, DELETE, TRACE, OPTIONS, https://javaplant.tistory.com/18
developer.mozilla.org, HTTP request methods, https://developer.mozilla.org/ko/docs/Web/HTTP/Methods