본문 바로가기

공부중/개념알기

HTTP(Hyper Text Transfer Protocol)

[정의]

- 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