백엔드 공부 메모/네트워크
HTTP 상태 코드
볼륨조절불가
2024. 2. 29. 20:18
728x90
* 해당 게시글은 <그림으로 배우는 Http&Network Basic>을 읽고 정리하면서 공부하기 위해 메모하듯 작성하는 글입니다.
HTTP 상태 코드
- 서버가 보내는 리스폰스의 상태 코드는 클라이언트가 보낸 리퀘스트 결과를 알려주는 역할
- 상태 코드는 3자리 숫자와 설명으로 이루어져 있고, 숫자의 첫 번째 자리는 리스폰스의 클래스를 의미
- 클래스의 정의만 지킨다면 RFC2616에서 정의된 상태 코드 변경, 사용자 정의 상태 코드 만들어도 상관 없음
- 상태 코드에는 RFC2616에 정의된 것만 40종류, 확장을 포함하면 60종류가 있지만 주로 사용하는 코드는 14종류 정도
2xx 성공(Success)
리퀘스트가 정상적으로 처리되었음을 나타내는 상태 코드 클래스
200 OK
- 서버가 리퀘스트를 정상 처리했음을 의미
- 상태 코드와 함께 되돌아오는 정보는 HTTP 요청 메소드에 따라 다름
- GET: 요청 리소스에 대응하는 엔티티
- HEAD: GET과 똑같으나 헤더만 옴
204 No Content
- 리퀘스트를 받아 정상적으로 처리했으나, 리스폰스에 엔티티 바디를 포함하지 않음
- 즉 어떠한 엔티티 바디를 되돌려 보내서는 안됨
- 브라우저에서 리퀘스트 보낸 후 204 리스폰스를 받아도 브라우저 화면이 변하는 일은 없음
- 클라이언트에서 서버에 정보를 보내는 것으로 족하고, 클라이언트에 대해 새로운 정보를 보낼 필요가 없는 경우에 사용
206 Partial Content
- Range 헤더로 범위가 지정된 리퀘스트에 의해 서버가 부분적 GET 리퀘스트를 받았음을 의미
- 리스폰스로는 (Range로 지정된) 일부 범위의 엔티티가 포함
3xx 리다이렉트(Redirection)
리퀘스트를 정상적으로 처리하기 위해 클라이언트(브라우저)에서 특별한 처리를 수행해야 함을 나타내는 상태 코드 클래스
- 304 빼고 Location 헤더에 리다이렉트 URI 명시 필요
301 Moved Permanently
- 리퀘스트된 리소스에는 새로운 URI가 부여→이후로는 그 리소스를 참조하는 URI를 사용해야 함을 의미
- 리소스가 영구 이동한 경우 리스폰스로 301 상태 코드 반환
302 Found
- 301 Moved Permanently와 비슷한 의미
- 301과 달리 영구적인 이동이 아닌 일시적인 URI 변경(이동)→리소스 위치 또 변경될 가능성
서버 측 작동 원리(서블릿 이용한 아파치 서버)
1. 서블릿에서 response.sendRedirect("리다이렉트할 주소") 메서드 실행시
2. 302 상태 코드와 함께(기본 설정) 리다이렉트 주소 브라우저로 전달
* 301 Moved Permanently를 상태 코드로 전하고 싶을 때, response.setStatus() 메서드에 관련 인자 넣어 수동 설정 가능
3. 브라우저 스스로 새 리소스 위치로 재요청
303 See Other
- 리퀘스트에 대한 리소스는 다른 URI에 있음→리다이렉트 장소를 GET 메소드를 통해 요청하라고 명시
304 Not Modified
304 Not Modified 상태 코드는 3xx 클래스에 분류되어 있지만, 리다이렉트와는 관계 없음
- 클라이언트가 조건부 리퀘스트를 했을 때, 리소스에 대한 액세스는 허락하지만 조건이 충족되지 않음을 의미
- 리스폰스 바디에 아무것도 없어야 함
307 Temporary Redirect
- 302 Found와 같은 의미-일시적 URI 변경
- 302와의 차이: 요청 메시지의 메서드와 바디를 변경하지 않고 리다이렉트 요청을 하도록 보장
4xx 클라이언트 에러(Client Error)
400 Bad Request
- 리퀘스트 구문이 잘못되었음을 의미
- 브라우저는 해당 상태 코드를 200 OK와 같이 취급
401 Unauthorized
- 최초 요청: 송신한 리퀘스트에 HTTP 인증 정보가 필요함을 의미
- 2회째 요청: 유저 인증에 실패함을 의미
- 해당 상태 코드를 포함한 응답시 WWW-Authenticate 헤더 필드 필요
- 브라우저에서 처음 401 리스폰스를 받은 경우→인증 위한 다이얼로그 표시
403 Forbidden
- 리퀘스트된 리소스의 액세스가 거부됨을 의미
- 거부 이유를 엔티티 바디에 명시
원인
- 파일 시스템의 권한(퍼미션)이 부여되지 않은 경우
- 액세스 권한에 문제(허가되지 않은 IP로부터 요청 등)가 있는 경우
404 Not Found
- 리퀘스트한 리소스가 서버상에 없음을 의미
- 또는 리퀘스트를 거부하고 싶으나 이유를 명시하고 싶지 않을 때에도 이용
5xx 서버 에러(Server Error)
서버 원인으로 에러가 발생함을 나타내는 상태 코드 클래스
500 Internal Server Error
- 리퀘스트 처리 도중 에러 발생함을 의미
- 웹 어플리케이션에 에러 발생 또는 일시적인 경우
503 Service Unavailable
- 일시적으로 서버가 과부하 상태이거나 점검 과정에 있는 등 서버의 문제로 현재 리퀘스트를 처리할 수 없음을 의미
- 문제가 언제 해결될지를 Retry-After 헤더 필드에 명시해주면 좋음
- Retry-After 헤더 필드는 HTTP/1.1에서 Warning 헤더 필드로 변경되었다고 기억함
이야깃거리
- 상태 코드와 현재 상황이 불일치할 수도 있음
- 웹 애플리케이션에서 에러가 발생해도 200 OK가 되돌아오는 경우 존재
728x90