볼륨조절불가 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