[정의]
- W3 상에서 정보를 주고받을 수 있는 프로토콜
- 주로 HTML 문서를 주고받는 데 쓰인다.
- 주로 TCP를 사용하고 HTTP/3부터는 UDP를 사용하며, 80번 포트를 사용한다.
- 클라이언트와 서버 사이에 이루어지는 요청/응답(Request/Response) 프로토콜
- HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.
[메시지 포맷]
- 클라이언트와 서버 사이의 소통은 평문(ASCII) 메시지로 이루어진다.
- 클라이언트는 서버로 요청 메시지를 전달하며 서버는 응답 메시지를 보낸다.
[요청 메시지]
- 클라이언트가 서버에게 보내는 메시지는 다음과 같다.
(1) 요청 내용
GET /image/logo.gif HTTP/1.1
(2) 헤더
Accept-Language: en
(3) 빈 줄(Empty Line)
(4) 기타 메시지
[응답 메시지]
- 응답 메시지는 다음으로 구성된다.
(1) 상태 표시행 : 상태 코드와 결과 메시지를 포함
HTTP/1.1 200 OK. 클라이언트의 요청이 성공적으로 전달되었음을 표시
(2) 응답 헤더 필드
Content-Type: text/html
(3) 빈 줄(Empty Line)
(4) 기타 메시지
[응답 코드]
- HTTP 응답 코드는 5개의 클래스로 구분된다.
- 상태 코드의 첫 번째 숫자는 응답의 클래스를 정의한다.
- 마지막 두 자리는 클래스나 분류 역할을 하지 않는다.
- 첫자리에 대한 5가지 값들은 다음과 같다.
(1) 1XX(정보) : 요청을 받았으며 프로세스를 계속한다.
(2) 2XX(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였다.
(3) 3XX(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
(4) 4XX(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
(5) 5XX(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.
[응답 코드 상세]
1. 1XX(조건부 응답) : 요청을 받았으며 작업을 계속한다.
| 응답 코드 | 설명 |
| 100(계속) | 요청자는 요청을 계속해야 한다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다. |
| 101(프로토콜 전환) | 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다. |
| 102(처리) |
2. 2XX(성공) : 클라이언트가 요청한 동작을 수신하여 이해하였고 승낙했으며 성공적으로 처리했음을 가리킨다.
| 응답 코드 | 설명 |
| 200(성공) | 서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다. |
| 201(작성됨) | 성공적으로 요청되었으며 서버가 새 리소스를 작성했다. |
| 202(허용됨) | 서버가 요청을 접수했지만 아직 처리하지 않았다. |
| 203(신뢰할 수 없는 정보) | 서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다. |
| 204(콘텐츠 없음) | 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다. |
| 205(콘텐츠 재설정) | 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 204 응답과 달리 이 응답은 요청자가 문서 보기를 재설정할 것을 요구한다. (Ex. 새 입력을 위한 양식 비우기) |
| 206(일부 콘텐츠) | 서버가 GET 요청의 일부만 성공적으로 처리했다. |
| 207(다중 상태) | |
| 208(이미 보고됨) | |
| 226 IM Used |
3. 3XX(리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
| 응답 코드 | 설명 |
| 300(여러 선택 항목) | 서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나 요청자가 선택할 수 있는 작업 목록을 제공한다. |
| 301(영구 이동) | 요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다. |
| 302(임시 이동) | 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청시 원래 위치를 계속 사용해야 한다. |
| 303(기타 위치 보기) | 요청자가 다른 위치에 별도의 GET 요청을 하여 응답을 검색할 경우 서버는 이 코드를 표시한다. HEAD 요청 이외의 모든 요청을 다른 위치로 자동으로 전달한다. |
| 304(수정되지 않음) | 마지막 요청 이후 요청한 페이지는 수정되지 않았다. 서버가 이 응답을 표시하면 페이지의 콘텐츠를 표시하지 않는다. 요청자가 마지막으로 페이지를 요청한 후 페이지가 변경되지 않으면 이 응답을 표시하도록 서버를 구성해야 한다. |
| 305(프록시 사용) | 요청자는 프록시를 사용하여 요청한 페이지만 엑세스 할 수 있다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 하다. |
| 307(임시 리다이렉션) | 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청시 원래 위치를 계속 사용해야 한다. |
| 308(영구 리다이렉션) |
4. 4XX(요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
| 응답 코드 | 설명 |
| 400(잘못된 요청) | 서버가 요청의 구문을 인식하지 못했다. |
| 401(권한 없음) | 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음으로 되어 있지만 실제 뜻은 인증 안 됨에 더 가깝다. |
| 401.1(접속 실패) | 서버에 로그 온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 때 맞지 않음 |
| 401.2(서버 설정으로 인한 접속 실패) | 서버에 로그 온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 때 맞지 않음 |
| 401.3(자원에 대한 ACL에 기인한 권한 없음) | 클라이언트가 특정 자료에 접근할 수 없음 |
| 401.4(필터에 의한 권한 부여 실패) | 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음 |
| 401.5(ISA PI/CGI 애플리케이션에 의한 권한 부여 실패) | 이용하려는 서버의 주소에 ISA PI나 CGI 프로그램이 설치되어 있고 권한을 부여할 수 없음 |
| 402(결제 필요) | 이 요청은 결제가 필요하다는 것을 나타낸다. |
| 403(금지됨) | 서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 가지고 있지 않다. (401은 인증 실패, 403은 인가 실패라고 볼 수 있음) |
| 403.1(수행 접근 금지) | 수행 시키지 못하도록 되어있는 디렉터리 내의 실행 파일을 수행하려고 하였음 |
| 403.2(읽기 접근 금지) | 접근한 디렉터리에 가용한 기본 페이지가 없음 |
| 403.4(SSL 필요함) | 접근하려는 페이지가 SSL로 보안 유지되고 있음 |
| 403.5(SSL 128 필요함) | 페이지가 128비트의 SSL로 보안 유지되고 있음 |
| 403.6(IP 주소 거부됨) | 사용자가 허용되지 않은 IP로부터 접근함 |
| 403.7(클아이너트 확인 필요) | 클라이언트가 자료에 접근할 수 있는지 확인을 요 함 |
| 403.8(사이트 접근 거부됨) | 서버가 요청 사항을 수행하고 있지 않거나 해당 사이트에 접근하는 것이 허락되지 않음 |
| 403.9(연결된 사용자 수 과다) | 서버가 BUSY 상태에 있어서 요청을 수행할 수 없음 |
| 403.10(설정이 확실하지 않음) | |
| 403.11(패스워드 변경됨) | 잘못된 암호를 입력했음 |
| 403.12(Mapper 접근 금지됨) | 클라이언트 인증용 맵이 해당 웹 사이트에 접근하는 것이 거부됨 |
| 404(찾을 수 없음) | 서버가 요청한 페이지를 찾을 수 없다. 예를 들어, 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다. |
| 405(허용되지 않은 방법) | 요청에 지정된 방법을 사용할 수 없다. 예를 들어, POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우에 이 코드를 제공한다. |
| 406(허용되지 않음) | 요청한 페이지가 요청한 콘텐츠 특정으로 응답할 수 없다. |
| 407(프록시 인증 필요) | 이 상태 코드는 401(권한 없음)과 비슷하지만 요청자가 프록시를 사용하여 인증해야 한다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 하다. |
| 408(요청 시간 초과) | 서버의 요청 대기가 시간을 초과하였다. |
| 409(충돌) | 서버가 요청을 수행하는 중에 충돌이 발생하였다. 서버는 응답할 때 충돌에 대한 정보를 포함해야 한다. 서버는 PUT 요청과 충돌하는 PUT 요청에 대한 응답으로 이 코드를 요청 간 차이점 목록과 함께 표시해야 한다. |
| 410(사라짐) | 서버는 요청한 리소스가 영구적으로 삭제 되었을 때 이 응답을 표시한다. 404 코드와 비슷하며 이전에 있었지만 더 이상 존재하지 않는 리소스에 대해 404 대신 사용하기도 한다. 리소스가 영구적으로 이동된 경우 301을 사용하여 리소스의 새 위치를 지정해야 한다. |
| 411(길이 필요) | 서버는 유효한 콘텐츠 길이 헤더 입력란 없이는 요청을 수락하지 않는다. |
| 412(사전 조건 실패) | 서버가 요청자의 요청시 부과한 사전 조건을 만족하지 않는다. |
| 413(요청 속성이 너무 큼) | 요청이 너무 커서 서버가 처리할 수 없다. |
| 414(요청 URI가 너무 김) | 요청 URI가 너무 길어서 서버가 처리할 수 없다. |
| 415(지원하지 않는 미디어 유형) | 요청이 요청한 페이지에서 지원하지 않는 형식으로 되어 있다. |
| 416(처리할 수 없는 요청 범위) | 요청이 페이지에서 처리할 수 없는 범위에 해당되는 경우 서버는 이 상태 코드를 표시한다. |
| 417(예상 실패) | 서버는 Expect 요청 헤더 입력란의 요구 사항을 만족할 수 없다. |
| 418 | |
| 420 | |
| 422(처리할 수 없는 엔티티) | |
| 423(잠김) | 접근하려는 리소스가 잠겨 있다. |
| 424(실패된 의존성, 메서드 실패) | |
| 425(정렬되지 않은 컬렉션, 인터넷 초안) | |
| 426(업그레이드 필요) | 클라이언트는 업그레이드 헤더 필드에 주어진 프로토콜로 요청을 보내야 한다. |
| 428(전제 조건 필요) | |
| 429(너무 많은 요청) | 사용자가 일정 시간 동안 너무 많은 요청을 보냈다. |
| 431(요청 헤더 필드가 너무 큼) | |
| 444(응답 없음) | |
| 449(다시 시도) | |
| 450(윈도우 자녀 보호에 의해 차단됨) | |
| 451(법적인 이유로 이용 불가, 리다이렉션) | |
| 494(요청 헤더가 너무 큼) | |
| 495(Cert 오류) | |
| 496(Cert 없음) | |
| 497(HTTP to HTTPS) | |
| 499(클라이언트가 요청을 닫음) |
5. 5XX(서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
| 응답 코드 | 설명 |
| 500(내부 서버 오류) | 서버에 오류가 발생하여 요청을 수행할 수 없다. |
| 501(구현 되지 않음) | 서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어, 서버가 요청 메서드를 인식하지 못할 때 이 코드를 표시한다. |
| 502(불량 게이트웨이) | 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업 스트림 서버에서 잘못된 응답을 받았다. |
| 503(서비스를 사용할 수 없음) | 서버가 오버로드 되었거나 유지 관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없다. 이는 대체 일시적인 상태이다. |
| 504(게이트웨이 시간 초과) | 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업 스트림 서버에서 제때 요청을 받지 못한다. |
| 505(HTTP 버전이 지원되지 않음) | 서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않는다. |
| 506(Variant Also Negotiates) | |
| 507(용량 부족) | |
| 508(루프 감지됨) | |
| 509(대역폭 제한 초과) | |
| 510(확장되지 않음) | |
| 511(네트워크 인증 필요) | |
| 520(알 수 없음) | |
| 598(네트워크 읽기 시간 초과 오류, 알 수 없음) | |
| 599(네트워크 읽기 시간 초과 오류, 알 수 없음) |
'공부중 > 개념알기' 카테고리의 다른 글
| [Java] 기본형 데이터 타입 (0) | 2022.08.29 |
|---|---|
| 전문통신 vs API (0) | 2022.08.03 |
| [C#] 싱글톤 패턴 (0) | 2022.07.29 |
| [JAVA] 싱글톤 패턴 (0) | 2022.07.29 |