HTTP Response (응답)
HTTP Response messages (응답 메시지)
서버는 요청이 들어오면 다음과 같은 응답 메시지를 반환한다.
HTTP/1.1 200 OK
Date: Sun, 11 Jan 2014 16:06:23 GMT
Server: Apache/1.3.22 (Unix) (Red-Hat/Linux)
Last-Modified: Sun, 07 Dec 2013 12:34:18 GMT
ETag: "1dba6-131b-3fd31e4a"
Accept-Ranges: bytes
Content-Length: 4891
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
<!DOCTYPE html>
<html>
:
</html>
응답 메시지는 다음 구문으로 구성된다.
응답 행(Response line) 또는 상태 행(Status line)
HTTP/1.1 200 OK
HTTP 응답 헤더 (HTTP Response Header)
Date: Sun, 11 Jan 2014 16:06:23 GMT
Server: Apache/1.3.22 (Unix) (Red-Hat/Linux)
Last-Modified: Sun, 07 Dec 2013 12:34:18 GMT
ETag: "1dba6-131b-3fd31e4a"
Accept-Ranges: bytes
Content-Length: 4891
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
빈 라인(blank line) : (헤더의 끝을 의미함)
CR LF
HTTP 본문 (HTTP Body)
<!DOCTYPE html>
<html>
:
</html>
줄 바꿈 코드는 Windows 형식의CR LF("\r\n")
이다. 첫 번째 라인에는 요청 행 또는 응답 행이 있고, 헤더는 여러 라인이 있고, 빈 라인은 한 라인이 있고, 메시지 바디는 여러 라인이다.
Start line (응답 시작 라인)
HTTP 응답의 시작 라인(상태 라인)에는 다음 세 가지 요소가 있다.
- HTTP 프로토콜 버전 (HTTP 요청 메시지와 동일)
- Response Status Code (응답 상태 코드)
- 상태 문자열
이후에는 특히 중요한 “HTTP 응답 상태 코드"와 “상태 문자열"에 대해 설명한다.
응답 시작 라인은 다음 형식으로 표시된다.
시작 라인:
[HTTP 프로토콜 버전] [응답 상태 코드] [상태 문자열]
상태 문자열는 OK 및 Not Found와 같은 상태 번호의 의미와 세부 정보를 보완하는 메시지를 반환한다.
실제 예제로 시작 라인을 확인해 보자.
시작 라인 확인:
% curl http://google.com/ --head
HTTP/1.1 301 Moved Permanently
- HTTP 프로토콜 버전 : HTTP/1.1
- 응답 상태 코드 : 301
- 상태 문자열 : Moved Permanently
HTTP 프로토콜 버전
HTTP 요청 메시지와 동일하게 HTTP 버전을 나타낸다. 일반적으로 HTTP/1.1 or 2.0 이다.
Response Status Code(응답 상태 코드)와 상태 문자열
HTTP/1.1 상태 코드 정의는 RFC 2616에 규정되어 있는데 간단히 정리하면 다음과 같다.
응답 코드 | 의미 | 설명 |
---|---|---|
1xx | Informational | 정보 제공 |
2xx | Successful | 성공 응답 |
3xx | Rediection | 추가작업(리디렉션) |
4xx | Client Error | 클라이언트측 오류 |
5xx | Server Error | 서버측 오류 |
1xx, 2xx, 3xx 코드는 서버와 User Agent간의 상태를 표시한 것이기 때문에 일반 사용자가 그 내용을 볼 수 없지만, 4xx, 5xx 코드는 일반 사용자도 흔히 볼 수 있는 내용이다.
어떤 이유로든 웹 페이지가 브라우저 상에 정상적으로 뜨지 않는다면 이는 3xx, 4xx 오류에 해당한다. 때문에 오류의 원인을 이해하고 이를 복구하기 위해서는 오류코드가 의미하는 바를 잘 대충이라도 알아야 한다.
응답 코드 | 의미 | 설명 |
---|---|---|
100 | Continue | 클라이언트로 부터 일부 요청을 받았으며 나머지 정보를 계속 요청한다. |
101 | Switching protocols | 프로토콜 전환. 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다. |
200 | OK | 요청이 성공적으로 수행되었다. |
201 | Created | 성공적으로 요청되었으며, 서버가 새 리소스를 작성하였다. |
202 | Accepted | 웹 서버가 요청을 접수했지만 아직 처리하지 않았다. |
203 | Non-authoritative information | 신뢰할 수 없는 정보, 서버가 요청을 성공적으로 처리되었지만 다른 소스에서 수신된 정보를 제공하고 있다. |
204 | No content | 콘텐츠 없음. 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않았다. |
205 | Reset Content | 콘텐츠 재설정. 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않았다. |
206 | Partial content | 일부 콘텐츠. 서버가 GET요청의 일부만 성공적으로 처리했다. |
300 | Multiple Choices | 컨텐츠를 얻는 방법에 대한 여러 가지 옵션이 있다. |
301 | Moved permanently | 요구한 데이터를 변경된 타 URL에 요청하였다. |
302 | Not temporarily | 요구한 데이터를 변경된 임시 URL에서 찾았음 |
304 | Not modified | 업데이트되지 않았고, 컴퓨터 로컬의 캐시 정보를 이용하였다. 보통 gif 등은 웹 서버에 요청하지 않았다. If-Modified-Since 헤더를 사용했을 경우에 반환된다. |
305 | Use Proxy | Location |
306 | (Unused) | 미사용. |
307 | Temporary Redirect | 다른 위치로 일시적으로 이동 중이다. |
400 | Bad request | 요청이 잘못되었다. 사용자의 잘못된 요청을 처리할 수 없다. |
401 | Unauthorized | 인증되지 않았다. 인증이 필요한 페이지를 요청한 경우에 발생한다. |
402 | Payment required | 예약됨. 지불이 필요하다. |
403 | Forbidden | 액세스가 허용되지 않는다. 접근 금지(디렉터리 리스팅 요청 및 관리자 페이지 접근 등을 차단). |
404 | Not found | 요청한 페이지가 없다. 찾을 수 없다. |
405 | Method not allowed | 허용되지 않는 HTTP Method 사용하였다. 지정한 메소드는 지원되지 않는다. |
407 | Proxy authentication required | 프록시 인증이 필요하다. |
408 | Request timeout | 요청이 시간 초과 되었다. |
410 | Gone | 영구적으로 사용 금지. 요청한 콘텐츠가 사라졌다. |
411 | Length Required | Content-Length 헤더를 추가하여 요청해라. |
412 | Precondition failed | 전체 조건 실패. If-… 헤더에 지정된 조건에 부합하지 않았다. |
414 | Request-URI too long | 요청 URL 길이가 긴 경우임 |
415 | Unsupported Media Type | 지원되지 않는 미디어 유형이다. |
416 | Requested Range Not Satisfiable | 요청한 범위가 잘못되었다. |
417 | Expectation Failed | Expect 헤더에 지정된 확장 요청이 실패했다. |
500 | Internal server error | 내부 서버 오류. 서버에서 예기치 않은 오류가 발생하였다. |
501 | Not implemented | 웹 서버가 처리할 수 없다. |
502 | Bad Gateway | 게이트웨이가 잘못되었다. |
503 | Service unnailable | 서비스 제공 불가. 서비스는 사용할 수 없다. |
504 | Gateway timeout | 게이트웨이가 시간 초과되었다. |
505 | HTTP version not supported | 해당 HTTP 버전 지원되지 않는다. |
HTTP Header (응답 헤더)
응답 헤더에는 다음 세 가지 유형이 있다
헤더 유형 | 설명 | 예 |
---|---|---|
응답 헤더 | 응답 본문의 데이터와 관련이 없는 헤더 | - Location |
일반 헤더 | 검색할 리소스 | - Date - Cache-Control |
엔티티 헤더 | 응답 본문에 적용 | - Content-Type - Content-Length - Expires |
HTTP Body (응답 본문)
리소스(파일)의 내용을 포함한다.
% curl http://www.devkuma.com
<!DOCTYPE html>
<html lang="ko">
<head>