-
4일차 - 결과를 전달하는 HTTP 상태 코드CS지식/네트워크 2021. 4. 26. 23:27
오늘은 클라이언트가 요청한 리퀘스트에 대한 결과를 알려주는 HTTP 상태 코드에 대해 배웠다. 아마 인터넷이 연결되어있지 않은 환경에서 브라우저로 웹 페이지를 접속하려면 에러 코드를 본 경험이 있을 것이다.
그 때 본 에러 코드가 오늘 배운 상태 코드이고 그것의 의미를 알 수 있었다.
1. 상태 코드
상태 코드란 클라이언트가 리퀘스트를 서버 측에 보냈을 때 서버에서 어떻게 처리됐는지에 대한 결과를 알려주는 역할을 하는 것이다.
상태 코드를 통해 리퀘스트를 정상적으로 처리했는지 에러가 발생했는지를 알려줄 수 있다.
상태 코드를 3자리의 숫자와 설명으로 나타낸다.
숫자의 첫 번째 자리는 리스폰스의 클래스를 의미하고 나머지 2자리는 정해진 분류가 없다.
리스폰스의 클래스는 5개가 정의되어 있다.
클래스 설명 1xx Informational 리퀘스트를 받아들여 처리중 2xx Success 리퀘스트를 정상적으로 처리했음 3xx Redirection 리퀘스트를 완료하기 위해서 추가 동작이 필요 4xx Client Error 서버는 리퀘스트 이해 불가능 5xx Server Error 서버는 리퀘스트 처리 실패 지금부터 실제로 자주 사용하는 대표적인 상태 코드에 대해서 설명을 해보도록 하겠다.
2. 2xx 성공(Success)
상태 코드의 숫자부분에서 첫 번째 자리가 2인 것은 리퀘스트가 정상적으로 처리되었음을 의미한다.
여기서 자주 사용하는 2가지의 상태 코드를 살펴보겠다.
1) 204 No Content
이 상태 코드를 가진 리스폰스를 서버가 리퀘스트를 받아서 요구한 사항을 처리하는 것은 성공했지만 리스폰스에 엔티티 바디를 포함하지 않는 경우이다.
즉, 요구 사항에 맞게 일 처리를 하고 되돌려줄 정보(리소스)는 없다는 것이다.
만약에 204 상태 코드를 사용했다면 리스폰스에는 어떠한 엔티티 바디를 포함해서 되돌려주어서는 안된다.
2) 206 Partial Content
이 상태 코드는 리퀘스트가 일정한 범위만을 지정하여 요청한 경우의 리스폰스를 나타낸다.
이전 시간에 일부분만 리퀘스트를 할 수 있는 레인지 리퀘스트를 배웠다.
클라이언트가 레인지 리퀘스트를 했을 때 서버에서 부분적 GET 메소드를 받았다는 것을 나타내고자 206 Partial Content를 사용한다.
3. 3xx 리다이렉트(Redirection)
상태 코드의 숫자부분에서 첫 번째 자리가 3인 것은 리퀘스트가 정상적인 처리로 종료되기 위해 클라이언트 측에서 특별한 처리를 수행해야 한다는 것을 의미한다.
여기서 자주 사용하는 5가지의 상태 코드를 살펴보겠다.
1) 301 Moved Permanetly
이 상태 코드는 리퀘스트된 리소스에 새로운 URI가 부여되어 이후에는 그 리소스를 참조하는 URI를 새로운 것으로 사용해야 한다는 것을 나타낸다.
301 Moved Permanetly가 발생하는 상황으로
http://example.com/sample 이러한 디렉토리를 지정하여 리퀘스트를 했을 때 마지막 부분에 /을 붙이지 않아 발생하는 경우가 있다.
2) 302 Found
이 상태 코드는 리퀘스트된 리소스에는 새로운 URI가 할당되어 추후에 새로 지정된 URI를 참조하기를 권고하는 것이다.
이렇게 보면 301 Moved Permanetly와 다른 점이 무엇인지 의문이 들 것이다.
차이점은 302의 경우에는 URI가 영구적으로 이동한 것이 아니라 일시적인 것이다. 그러므로, 새로 지정된 URI가 추후에 이동될 가능성이 있는 것이다.
즉, 301 Moved Permanetly를 받은 경우에 새로 지정된 URI로 바꾸어 사용하면 된다.
3) 303 See Other
이 상태 코드는 리퀘스트에 대한 리소스는 다른 URI에 있기 때문에 GET 메소드를 통해 얻어여한다는 것을 알려준다.
302 Found의 기능과 같이 새로 URI가 지정되었다는 것을 알려주지만 303 See Other 경우에는 리다이렉드 장소를 GET 메소드로 얻어야한다고 명확하게 알려주는 것이 차이점이다.
4) 304 Not Modified
이 상태 코드는 클라이언트가 조건부 리퀘스트를 했을 때 리소스에 대한 접근은 허락하지만 조건이 충족되지 않았음을 알려준다.
리스폰스 시에는 바디에 아무 것도 포함되어 있지 않는다.
5) 307 Temporary Redirect
이 상태 코드는 302 Found와 같은 의미이지만 307 Temporary Redirect는 브라우저 사양에 따라 POST에서 GET치환을 하지 않는다.
이 부분에 대해서는 더 자세히 알아볼 필요가 있을 것같다. 개념적인 면보다 더 심층적으로 구현부분까지 살펴보면 차이점을 확실히 알 수 있을 것같다.
4. 4xx 클라이언트 에러
상태 코드의 숫자부분에서 첫 번째 자리가 4인 것은 클라이언트 측의 문제로 에러가 발생했다는 것을 알려주는 역할을 한다.
여기서 자주 사용하는 5가지의 상태 코드를 살펴보겠다.
1) 400 Bad Request
이 상태 코드는 리퀘스트 구문이 잘못되었음을 나타낸다. 400 Bad Requset를 받았다면, 리퀘스트 내용을 재검토하고 나서 재전송할 필요가 있다.
2) 401 Unauthorized
이 상태 코드는 리퀘스트에 HTTP 인증(basic 인증, digest 인증) 정보가 필요하다는 것을 나타낸다. 클라이언트에서 처음 401 리스폰스를 받은 경우에는 인증을 위한 다이얼로그가 표시되지만 두 번째 401 리스폰스부터는 인증을 실패했음을 표시한다.
3) 403 Forbidden
이 상태 코드는 리퀘스트한 리소스이 접근이 거부되었음을 나타낸다. 거부한 이유를 알려주는 경우에는 엔티티 바디에 기재해서 클라이언트 측에 보낸다.
4) 404 Not Found
이 상태 코드는 리퀘스트한 리소스가 서버 상에 없다는 것을 나타낸다. 이 외에 서버 측에서 리퀘스트를 거부하고 거부한 이유를 분명히 하고 싶지 않을 경우에도 사용한다.
5. 5xx 서버 에러
상태 코드의 숫자부분에서 첫 번째 자리가 5인 것은 서버측의 문제로 에러가 발생했음을 알려준다.
여기서 자주 사용하는 2가지의 상태 코드를 살펴보겠다.
1) 500 Internal Server Error
이 상태 코드는 서버에서 리퀘스트를 처리하는 과정에서 에러가 발생했음을 나타낸다.
2) 503 Service Unavaliable
이 상태 코드는 일시적으로 서버가 과부하 상태이거나 점검 중이여서 리퀘스트를 처리할 수 없다는 것을 알려준다.
'CS지식 > 네트워크' 카테고리의 다른 글
6일차 - 웹을 안전하게 지켜주는 HTTPS (0) 2021.05.02 5일차 - HTTP와 연계하는 웹 서버 (0) 2021.04.29 3일차 - HTTP 메시지 (0) 2021.04.22 2일차 - 간단한 프로토콜 HTTP (0) 2021.04.19 1일차 - 웹과 네트워크의 기본 (0) 2021.04.16