Http Status Code

1XX (Informational: 조건부 응답)

100번대 코드는 프로토콜을 교체해도 된다거나 계속 요청을 보내도 된다거나 하는 식의 정보성을 띄고 있는 상태를 의미

응답코드 설명
101 (Continue) 요청자는 요청을 계속해야 함, 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타냄
101 (Switching Protocols) 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중
102 (Processing) 사용자가 수신 요청을 해 처리하고 있지만, 아직은 제대로 된 응답을 할 수 없는 상태
103 (Early Hints) Link해더와 함께 사용되며 주로 서버가 응답을 준비하는 동안 사용자가 사전로딩(PreLoading)을 할수 있도록 하는 응답코드

2XX (Success: 성공)

이 클래스의 상태 코드는 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킴

응답코드 설명
200 (Success) 성공적으로 처리된 경우
201 (Created) 요청이 성공적으로 처리되어 리소스가 만들어진 경우
202 (Accepted) 요청이 받아들여졌지만 처리가 되지 않았음
203 (Non-Authoritative Information) 응답받은 메타정보가 서버에 저장된 원본과 동일하지 않지만, 로컬이나 다른 복사본에서 수집됨
204 (No Content) 성공적으로 처리했지만 컨텐츠를 제공하지 않음
205 (Reset Content) 204와 동일하지만, 해당 응답 코드는 요청자가 문서 보기를 재설정할 것을 요구함
206 (Partial Content) 컨텐츠의 일부분만 제공, 보통 클라이언트에서 시작 범위나 다운로드할 범위를 지정한 경우 자동으로 해당 부분만 제공할 때 사용하는 코드
207 (Multi-Status) 여러 소스에서 여러 응답인 상태에서 적절한 정보를 사용자에게 제공할 수 있도록 하는 코드
208 (Already Reported) DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거 되어있으며 다시 포함되지 않는다는 의미로 응답하는 코드
226 (IM Used) 서버가 사용자의 GET 요청에 대한 리소스의 의무는 다했고, 현재 인스턴스에서 적용된 하나 이상의 인스턴스 조작 결과를 보낼 때 사용되는 코드

3XX (Redirection: 리다이렉션 완료)

이 요청을 완료하기 위해서는 리다이렉션이 이루어져야 한다는 의미이다. 짧은 주소(단축 URL) 서비스의 경우 접속 시 301이나 302 코드를 보내고, 헤더의 location에 리다이렉션할 실제 URL을 적어 보낸다.

응답코드 설명
300 (Muliple Choices) 서버에서 여러개의 응답이 있음을 알릴 때 사용할 의도로 만들어 졌으나, 정작 응답을 선택하는 방법은 표준화되지 않아 잘 사용되지 않음.
301 (Moved Permanentely) 영구적으로 컨텐츠가 이동했을 때 사용
302 (Found) 일시적으로 컨텐츠가 이동했을 때 사용
303 (See Other) 서버가 사용자의 GET요청을 처리하여 다른URL에서 요청된 정보를 가져올수 있도로 응답하는 코드
304 (Not Modified) 200 다음으로 자주보는 상태, 이 경우 브라우저에 캐시되어 있는 버전을 사용
305 (Use Proxy) 프록시를 사용하지 않으면 접근할수 없는 컨텐츠에 사용할 목적으로 만들어졌다. 이 응답 코드에는 요청자가 사용해야 하는 프록시 서버의 정보를 포함할수 있다. 다만 보안상 이유로 이 응답코드를 인식하는 브라우저는 없고 현재 사용 중지(Deprecated)된 비권장 응답코드
306 (Unused) 305 Use Proxy 응답이 사용 중지(Deprecated)되어 문서에서 삭제, 예약코드로 남아있음
307 (Temporary Redirect) 302와 동일하게 일시적인 컨텐츠 이동을 나타낼때 사용되나, HTTP 메소드의 변경을 허용하지 않음
308 (Permanent Redirect) 301와 동일하게 영구적인 컨텐츠 이동을 나타낼때 사용되나, HTTP 메소드의 변경을 허용하지 않음

4XX (Client error: 클라이언트 에러)

400번대의 코드들은 클라이언트가 서버에게 보낸 요청이 잘못된 경우를 의미한다.

응답코드 설명
400 (Bad Request) 요청 자체가 잘못되었을 때 사용됨
401 (Unauthorized) 인증이 필요한 리소스에 인증없이 접근한 경우 발생, 이 응답코드를 사용할 때에는 반드시 브라우저에 어떤 인증방식을 이용할 것인지를 보내야 함.
402 (Payment Required) 결제가 필요한 리소스에 결제없이 접근했을 경우 발생
403 (Forbidden) 서버가 요청을 거부할 때 발생한다. 관리자가 해당 사용자를 차단했거나 서버에 index.html 이 없는 경우에도 발생함
404 (Not Found) 찾는 리소스가 없다는 뜻
405 (Method Not Allowed) PUT이나 DELETE 등 서버에서 허용되지 않은 메소드로 요청시 사용하는 코드
406 (Not Acceptable) 요청은 정상이나 서버에서 받아들일 수 없는 요청일시 사용하는 코드, 보통 웹 방화벽에 걸리는 경우 이 코드가 반환됨
407 (Proxy Authentication Required) 프록시 인증이 필요할 경우 사용하는 코드
408 (Request Timeout) 요청 중 시간이 초과되었을때 사용하는 코드
409 (Conflict) 사용자의 요청이 서버의 상태와 충돌하여 응답하는 코드
410 (Gone) 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다. 404가 그런 게 없어서 못 찾는 경우라면, 410은 있었던 것이 없어져서 못 찾는 것
429 (Too Many Requests) 일정 시간 동안 너무 많은 요청을 보냈을 때 이를 거부하기 위해 사용
451 (Unavailable For Legal Reasons) 국가 검열 등, 법적인 이유로 차단되었을 경우 사용할 수 있도록 정의된 코드

5XX (Server error: 서버 에러)

올바른 요청에 대해 서버가 응답할 수 없다는 의미.

응답코드 설명
500 (Internal Server Error) 서버에 오류가 발생해 작업을 수행할 수 없을 때 사용된다. 보통 설정이나 퍼미션 문제. 아니면 HTTP 요청을 통해 호출한 문서가 실제 HTML 문서가 아니라 JSP, PHP, 서블릿 등의 프로그램일 경우 그 프로그램이 동작하다 세미콜론을 빼먹는 등의 각종 에러로 비정상 종료를 하는 경우 이 응답코드를 보낸다.
501 (Not Implemented) 서버가 요청을 수행하는데 필요한 기능을 지원하지 않는 경우 사용
502 (Bad Gateway) 게이트웨이가 연결된 서버로부터 잘못된 응답을 받았을 때 사용
503 (Service Temporarily Unavailable) 서비스를 일시적으로 사용할 수 없을 때 사용된다. 주로 웹서버 등이 과부하로 다운되었을 때 볼 수 있다.
504 (Gateway Timeout) 게이트웨이가 연결된 서버로부터 응답을 받을 수 없었을 때 사용
506 (Variant Also Negotiates) 서버 내부 구성(값)에 오류가 있어 반환되는 값에 컨텐츠 협상이 순환 참조로 이루어져 있다는걸 알려주는 코드
507 (Insufficient Storage) 서버 내부 구성(값)에 오류가 있어 선택된 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 과정에서 적절한 끝점이 아님을 알려주는 코드
508 (Loop Detected) 서버가 요청을 처리하는 동안 무한 루프를 발견하였을 때 뜨는 응답코드
510 (Not Extended) 서버가 요청을 처리할때 요청에 대한 추가 확장이 필요한경우 뜨는 응답코드
511 (Network Authentication Required) 사용자가 네트워크 엑세스 권한이 필요한 경우 뜨는 응답코드. 보통 네트워크에 엑세스할 때 로그인이 필요한 경우

301과 302 차이

301 redirect는 영구적(Permanent)으로 옮겼을때 사용하고 302 redirect는 일시적(Temporary)으로 옮겼을때 사용한다. 검색엔진 최적화에는 301 redirect가 바람직하다

301과 302는 사용자가 브라우저를 통해 웹서버에 요청했을때 돌려받는 웹서버의 상태코드인데, 301은 요청한 정보가 새로운 주소로 영구적으로 옮겨갔다는 신호이고, 302는 일시적으로 옮겨갔다는 신호이다.

표면상으로는 둘 다 자동으로 페이지를 이동하게 하므로 육안으로는 구별할수 없으나 검색엔진의 크롤러는 그 차이를 알수 있고, 이 두가지가 검색엔진 최적화에 미치는 영향은 꽤 크다.

301 리디렉션

예를 들어 aaa.com을 소유했던 사람이 bbb.com으로 사이트 주소를 옮겼을때 301 redirect를 해준다면 크롤러가 aaa.com에 접속했을때 aaa.com에서 인덱스한 내용의 주소가 bbb.com으로 바뀌었다는것을 감지하고 인덱스된 aaa.com의 주소를 자동으로 bbb.com으로 변경시켜 준다.

이럴경우 ‘aaa’라는 키워드로 aaa.com이 검색결과에 나오던것이 bbb.com으로 나오게 된다.

이렇게 되면 사이트 관리자는 손쉽게 검색엔진에 변경된 사항을 적용할수 있게되고 검색엔진을 통해 유입되는 트래픽을 잃지않게 된다.

그외에 www.aaa.com을 ‘www’가 빠진 aaa.com으로 지정하고 싶다던지 www.aaa.com/product.html?a=samsung&b=galaxy&c=tab 같은 url을 www.aaa.com/samsung/galaxy/tab 같이 읽기 쉬운 형식으로 바꾸고 싶을때 유용하게 쓰인다.

302 리디렉션

대부분 javascript를 이용한 redirect, 메타태그(< meta http-equiv=”refresh” content=”0;url=http://새로운주소.com” />)를 이용한 redirect 또는 각각의 프로그래밍 언어를 사용한 단순 redirect가 이에 포함된다.

aaa.com 소유자가 bbb.com으로 사이트를 옮겼는데 잘모르고 302 redirect를 해주게 되는경우 사용자는 자동으로 옮겨가게 되지만, 크롤러는 사이트가 옮겨갔다는것을 감지하더라도 일시적으로만 옮겨간것으로 간주하기 때문에 검색결과에 아무런 변화를 주지 않는다.

그래서 특정 키워드로 검색을 했을때 aaa.com이 나오던것이 bbb.com으로 업데이트되지 않게 된다. 간혹 이것을 악용하여 특정 키워드로 최적화된 페이지를 방문한 사용자를 자동으로 페이지와 전혀 상관없는 광고성 페이지로 옮겨가게 만드는 경우가 있다.

그래서 구글은 이를 doorway page로 여겨 페널티를 부과하기때문에 302 redirect를 사용할때에는 잘 생각해야한다.

401과 403 차이

HTTP 상태 401(Unauthorized) 이란?

HTTP 상태 중 401(Unauthorized)는 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부되었음을 의미하는 상태값이다. 즉, 클라이언트가 인증되지 않았기 때문에 요청을 정상적으로 처리할 수 없다고 알려주는 것이다.

401(Unauthorized) 응답을 받는 대표적인 경우는 로그인이 되어 있지 않은 상태에서 무언가 요청을 하는 경우이다. 예를 들어 어떤 쇼핑몰 사이트에 로그인을 하지 않았는데 나의 결제 내역과 같은 정보를 달라고 하면 401(Unauthorized)를 반환받게 될 것이다.

이와 많이 혼동되는 HTTP 상태로 403(Forbidden)이 있다.

HTTP 상태 403(Forbidden) 이란?

HTTP 상태 중 403(Forbidden)는 서버가 해당 요청을 이해했지만, 권한이 없어 요청이 거부되었음을 의미하는 상태값이다. 즉, 클라이언트가 해당 요청에 대한 권한이 없다고 알려주는 것이다.

403(Forbidden) 응답을 받는 대표적인 경우는 로그인하여 인증되었지만 접근 권한이 없는 무언가를 요청하는 경우이다. 예를 들어 어떤 쇼핑몰에 접속하여 로그인까지 하였지만, 다른 사용자의 결제 내역을 달라고 하면 403(Forbidden)을 반환받게 될 것이다.

HTTP상태 Unauthorized Forbidden
상태코드 401 403
상황 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부됨 사용자가 로그인되지 않은 경우
예시 서버가 해당 요청을 이해했지만, 권한이 없어 요청이 거부됨 사용자가 권한이 없는 요청을 하는 경우

참고링크1

참고링크2

참고링크3