그림으로 배우는 Http & Network Basic : 결과를 전달하는 HTTP 상태 코드

해버니·2022년 12월 28일
0

TIL

목록 보기
8/9
post-thumbnail

서버가 정상적으로 처리되었는지 아니면 에러가 발생했는지를 알려주는게 HTTP 상태 코드이다.
상태 코드에 대해서 살펴볼 것이다!




상태 코드는 서버로부터 리퀘스트 결과를 전달한다.

클라이언트가 서버에게 리퀘스트를 보낼 때 서버에서 그 결과가 어떻게 되었는지 알려주는 것이 상태 코드의 역할이다.


상태 코드 클래스

클래스설명
1xxInformational리퀘스트를 받아들여 처리중
2xxSuccess리퀘스트를 정상적으로 처리했음
3xxRedirection리퀘스트를 완료하기 위해서 추가 동작이 필요
4xxClient Error서버는 리퀘스트 이해 불가능
5xxServer Error서버는 리퀘스트 처리 실패






2xx 성공 (Success)

2xx 리스폰스는 리퀘스트가 정상적으로 처리되었음을 나타낸다.


성공의 의미는 메소드에 따라 다르다.

GET : 리소스를 불러와서 메시지 바디에 전송됐다.
HEAD : 개체 헤더가 메시지 바디에 있다.
PUT 또는 POST : 수행 결과에 대한 리소스가 메시지 바디에 전송됐다.
DELETE : 삭제를 수행했고 응답 메시지가 이후의 상태를 설명한다.
TRACE : 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있다.
(TRACE : 추적하다, 찾아내다)



204 No Content

서버 : 리퀘스트 성공함! 근데 돌려줄 리소스가 없어욥!

이 리스폰스는 리퀘스트에는 성공했지만 리스폰스에 엔티티 바디를 포함하지 않는다.
또한 어떠한 엔티티 바디를 되돌려 보내서도 안된다.
HTTP Response body가 아예 존재하지 않는 경우다.

사용하는 경우
클라이언트에서 서버에 정보를 보내는 것으로 족하고, 클라이언트에 대해서 새로운 정보를 보낼 필요가 없는 경우


206 Partial Content

Range에 의해서 범위가 지정된 리퀘스트에 의해서 서버가 부분적 GET 리퀘스트를 받았음을 나타내고 있다.
리스폰스에는 Content-Range로 지정된 범위의 엔티티가 포함되게 된다.






3xx 리다이렉트 (Redirection)

리퀘스트가 정상적으로 처리를 종료하기 위해 브라우저 측에서 특별한 처리를 수행해야 한다.

리다이렉션은 사용자가 특정 페이지를 접근했을 때, 의도적으로 다른 페이지로 이동시기는 방법이다.
간단하게는 프론트단인 html과 스크립트 등으로 이동시키는 방법과 서버단에서 이동시키는 방법으로 나눌 수 있다.
서버단 이동이 301 리다이렉트, 프론트단 이동이 302 리다이렉트로 표시된다.

301, 302, 303 리스폰스 코드가 되돌아 오면, 대부분의 브라우저에서는 POST를 GET으로 바꾸어서 리퀘스트의 엔티티 바디를 삭제하고 리퀘스트를 자동적으로 재송신하도록 되어 있다.
301, 302의 사양은 POST 메소드를 GET 메소드에 바꾸는 것을 금지하고 있지만 구현해 놓은 것을 보면 이렇게 되어 있는 것이 대부분이다.



301 Moved Permanently (영구적)

서버 : 그 URI 새것이 아닌데.. 북마크라든가 변경하지 않을래?

리다이렉트시 요청 메서드가 GET으로 변하고 본문이 제거될 수도 있다.

이 리스폰스는 리퀘스트된 리소스에는 새로운 URI가 부여되어 있기 때문에, 이후로는 그 리소스를 참조하는 URI를 사용해야 한다는 것을 나타내고 있다.
결국 북마크하고 있는 경우에는 Location 헤더 필드에서 가리키고 있는 URI에 북마크를 다시 하는게 좋다는 것을 나타내고 있다.

301이 발생하는 상황으로는 아래의 리퀘스트와 같이 디렉토리를 지정했을 때, 마지막 부분에 슬래시(/)를 붙이는 것을 잊은 경우 등이 있다.

http://example.com/sample




302 Found (일시적)

이 리스폰스는 리퀘스트된 리소스에는 새로운 URI가 할당되어 있기 때문에 그 URI를 참조해 주길 바란다는 의미를 나타내고 있다.




301 VS 302

301 리다이렉트는 새로운 URL 혹은 사용하지 않는 페이지를 이동시키는데 적합하다.
302 리다이렉트는 기존 URL에 컨텐츠 URL를 추가하려고 할 때 사용하면 유용하다.
-무의미하게 사용할 경우, 검색엔진이 302 리다이렉트를 악용하는 광고 컨텐츠들로 판단해 사이트랭크 점수에 패널티를 부여한다.



303 See Other

서버 : 그 URI, 새것으로 바뀌었어. 잠시 그쪽으로 갈래?

기능은 302와 같다.
하지만 리다이렉트 장소를 GET 메소드로 얻어야 한다고 명확하게 되어 있는 점이 302와 다르다.
예를 들면, POST 메소드로 액세스한 CGI 프로그램을 실행한 후에 처리 결과를 변도의 URI에 GET 메소드로 리다이렉트 시키고 싶은 경우 등에 303이 사용되고 있다.
302 Found라도 같은 일이 가능하지만 303을 사용하는 것이 바람직하다.




304 Not Modified

서버 : 리소스는 있는데 조건이 안맞아..

3xx에 있지만 리다이렉트와는 관련이 없는 리스폰스이다.

클라이언트가 조건부 리퀘스트를 했을 때 리소스에 대한 액세스는 허락하지만, 조건이 충족되지 않음을 표시하고 있다.
304를 되돌려 줄 경우에는 리스폰스 바디에 어떤 것도 포함되어 있어서는 안 된다.




307 Temporary Redirect

302랑 비슷한 리스폰스이다.
307에서는 브라우저 사양에 따라 POST에서 GET으로 치환을 하지 않는다.






4xx 클라이언트 에러 (Client Error)

클라이언트의 원인으로 에러가 발생했음을 나타낸다.



400 Bad Request

서버 : 이 리퀘스트 뭐야? 잘못된거 아냐?

이 리스폰스는 리퀘스트 구문이 잘못되었음을 나타내고 있다.
이 에러가 발생한 경우, 리퀘스트 내용을 재검토하고 나서 재송신할 필요가 있다.
또한 브라우저는 이것을 200 OK와 같이 취급한다.



401 Unauthorized

이 리스폰스는 송신한 리퀘스트에 HTTP 인증 (BASIC 인증, DIGEST(요약) 인증) 정보가 필요하다는 것을 나타내고 있다.


인증
공용으로 데이터를 사용하여 받는 서비스 이외에 웹에서는 허가된 사용자만 데이터에 접근하여 개인적인 서비스를 받기도 한다.
예를 들어 메일을 주고 받거나 요즘에 자주 사용하는 간편결제시스템을 이용하는 등 이러한 서비스는 개인적인 데이터에 접근하여 받는 서비스이다.
이러한 개인적인 서비스를 받거나 데이터에 접근하기 위해서 서버는 사용자가 누구인지 식별할 수 있어야한다.
하지만 서버가 단순히 접근한 사용자를 식별만해서 private한 데이터를 접근하게 하는 것이 아닌 사용자가 누구인지 증명을 해야하는 단계가 필요하다.
여기서 사용자가 누구인지 증명하는 작업인증이다.



403 Forbidden

서버 : 그 리소스에 액세스 시켜줄 수는 없지

이 리스폰스는 리퀘스트된 리소스의 액세스가 거부되었음을 나타내고 있다.
서버 측은 거부의 이유를 분명히 할 필요가 있다.

403이 발생한 원인으로는 파일 시스템의 퍼미션이 부여되지 않은 경우와 액세스 권한에 문제(허가되지 않은 송신 IP 주소의 액세스 등)가 있는 것을 예로 들 수 있다.



404 Not Found

The requested URL /a was not found on this server.
서버 : 리퀘스트한 리소스는 서버에 없어욥

이 리스폰스는 리퀘스트한 리소스가 서버상에 없다는 것을 나타내고 있다.
그 외에도 서버 측에 해당 리퀘스트를 거부하고 싶은 이유를 분명히 하고 싶지 않은 경우에도 이용할 수 있다.





5xx 서버 에러 (Server Error)

서버의 원인으로 에러가 발생했음을 나타낸다.



500 Internal Server Error

서버 : 우리 리소스에 에러가 발생한 것 같아..

서버에서 리퀘스트를 처리하는 도중에 에러가 발생하였음을 나타내고 있다.
웹 애플리케이션에 에러가 발생한 경우나 일시적인 경우도 있다.



503 Service Unavaliable

서버 : 미안 나 바쁨

일시적으로 서버가 과부하 상태이거나 점검중이기 때문에 현재 리퀘스트를 처리할 수 없음을 나타내고 있다.
이 상태가 해소되기까지 시간이 걸리는 경우에는 Retry-After 헤더 필드에 따라 클라이언트에 전달하는 것이 바람직하다.



상태 코드가 현재 상황과 불일치할 수도 있다.
리스폰스로 되돌아오는 상태 코드의 대부분은 유저가 다른 내용을 알기 어렵게 되어 있다. 흔히 있는 상황으로 웹 애플리케이션에서 애플리케이션 에러가 발생한 경우에도 상태 코드로는 [200 OK]가 되돌아오는 경우가 있다.






: 참조 :
HTTP 상태(응답) 코드 정리하기
상태 코드 300, 301, 302, 303, 304, 307, 308
301, 302 리다이렉션의 차이
HTTP 인증이란 무엇인가

0개의 댓글