어 정보시스템에서 사용하는 응용 계층 규약으로서 요구 방법의 확장을 통해서 네임
서버와 분산 객체 관리 시스템과 같은 수많은 작업에 사용될 수 있는 보편적인 객체
지향형 규약이다. HTTP는 어떤 문서의 데이터 표현 형식을 규정하고 협상하여 전송
중인 데이터와 무관하게 시스템을 구축할 수 있게 한다.
HTTP는 1990년 이후 World-Wide Web 범 세계 정보 이니셔티브에 의하여 사용되고
있다. 이 규격은 "HTTP/1.1"로 언급되는 규약을 정의하고 있다.
목차
1 도입........................................................... 7
1.1 목적 ................................................... 7
1.2 필요 사항 ......................................... 7
1.3 용어 ................................................... 8
1.4 전반적인 운영 ........................... 11
2 기호 관례 및 일반적인 문법.............. 13
2.1 추가된 BNF ....................................... 13
2.2 기본적인 규칙 .................................. 15
3 규약 파라미터............................... 17
3.1 HTTP 버전 ........................................ 17
3.2 보편적 자원 식별자(Uniform Resource Identifiers) ........................ 18
3.2.1 일반적 형식 ............................. 18
3.2.2 http URL ......................................... 19
3.2.3 URI 비교 .................................. 20
3.3 날짜/시간 형식................................... 21
3.3.1 완전한 날짜 ................................. 21
3.3.2 Delta Seconds ................. 22
3.4 문자 집합 .......................................... 22
3.5 내용 코딩 (Content Coding)............. 23
3.6 전송 코딩 (Transfer Coding)............ 24
3.7 미디어 타입 ...................................... 25
3.7.1 정형화(Canonicalization) 및 텍스트 기본값 ............... 26
3.7.2 Multipart Type .................................... 27
3.8 제품 토큰 ...................................... 28
3.9 품질 등급 값.................................. 28
3.10 언어 태그...................................... 28
3.11 엔터티 태그....................................... 29
3.12 영역 단위 ..................................... 30
4 HTTP 메시지......................................... 30
4.1 메시지 유형 ................................... 30
4.2 메시지 헤더 ................................... 31
4.3 메시지 본문 ................................... 32
4.4 메시지 길이 ................................... 32
4.5 일반적인 헤더 필드 ..................... 34
5 요구........................................................ 34
5.1 Request-Line ........................................ 34
5.1.1 Method ......................................... 35
5.1.2 Request-URI ...................................... 35
5.2 요구에 의해 식별되는 자원 ......... 37
5.3 요구 헤더 필드 ............................... 37
6 응답.......................................................... 38
6.1 상태-라인 .......................................... 38
6.1.1 상태 코드 및 이유 문구 .......... 39
6.2 응답 헤더 필드 ............................... 41
[Page 1]
7 엔터티(Entity).......................................................... 41
7.1 엔터티 헤더 필드 ................................ 41
7.2 엔터티 본문 ......................................... 42
7.2.1 유형 .............................................. 42
7.2.2 길이 ............................................………………………………………………………... 43
8 접속.......................................................... 43
8.1 지속적인 접속 ................................. 43
8.1.1 목적 .............................................. 43
8.1.2 전반적인 운영.............................. 44
8.1.3 프락시 서버(Proxy Servers) ........ 45
8.1.4 실제적인 고려 사항 .................. 45
8.2 메시지 전송 필요 조건 ................. 46
9 Method 정의............................. 48
9.1 안전 및 멱등원(冪等元) method .. 48
9.1.1 안전 method..................................... 48
9.1.2 멱등원 method................................. 49
9.2 OPTIONS ............................................... 49
9.3 GET ........................................................ 50
9.4 HEAD .................................................... 50
9.5 POST ...................................................... 51
9.6 PUT ........................................................ 52
9.7 DELETE ................................................. 53
9.8 TRACE ................................................... 53
10 상태 코드 정의....................................... 53
10.1 Informational 1xx (정보를 알려 주는 1xx) .................................. 54
10.1.1 100 Continue (계속)..................................................................... 54
10.1.2 101 Switching Protocols (규약 전환).................................. 54
10.2 Successful 2xx (성공을 알려 주는 2xx) ....................................................... 54
10.2.1 200 OK ......................................................................................... 54
10.2.2 201 Created (생성 되었음) ......................................................... 55
10.2.3 202 Accepted (접수 되었음)....................................................... 55
10.2.4 203 Non-Authoritative Information (비 인증 정보) .................. 55
10.2.5 204 No Content (내용이 없음) ......................... ...... ...... ........... 55
10.2.6 205 Reset Content (내용을 지움)............................ ...... ............ 56
10.2.7 206 Partial Content (부분적 내용)....................... ...... ............... 56
10.3 Redirection 3xx (방향을 재설정하는 3xx)..................................... 56
10.3.1 300 Multiple Choices (복수 선택).......................... ...... .... ........ 57
10.3.2 301 Moved Permanently (영구 이동).............. ........................... 57
10.3.3 302 Moved Temporarily (임시 이동).......................................... 58
10.3.4 303 See Other (다른 것을 참조)................................................. 58
10.3.5 304 Not Modified (변경되지 않았음)......................................... 58
10.3.6 305 Use Proxy (프락시를 사용할 것)........................................ 59
10.4 Client Error 4xx (클라이언트 에러 4xx)......................................... 59
10.4.1 400 Bad Request (잘못된 요구)................................................... 60
10.4.2 401 Unauthorized (인증되지 않았음).......................................... 60
10.4.3 402 Payment Required (요금 지불 요청).................................... 60
10.4.4 403 Forbidden (금지되었음)........................................………………………….............. 60
[Page 2]
10.4.5 404 Not Found (찾을 수 없음)..................................................... 60
10.4.6 405 Method Not Allowed (Method를 사용할 수 없음).............. 61
10.4.7 406 Not Acceptable (접수할 수 없음)......................................... 61
10.4.8 407 Proxy Authentication Required (프락시 인증이 필요함).... 61
10.4.9 408 Request Timeout (요구 시간 초과)....................................... 62
10.4.10 409 Conflict (충돌)....................................................................... 62
10.4.11 410 Gone (내용물이 사라졌음).................................................. 62
10.4.12 411 Length Required (길이가 필요함)........................................ 63
10.4.13 412 Precondition Failed (사전 조건 충족 실패)........................ 63
10.4.14 413 Request Entity Too Large (요구 엔터티가 너무 큼)............. 63
10.4.15 414 Request-URI Too Long (Request-URI이 너무 김).................. 63
10.4.16 415 Unsupported Media Type (지원되지 않는 media type).. 63
10.5 Server Error 5xx (서버 에러 5xx)...................................................... 64
10.5.1 500 Internal Server Error (서버 내부 에러).................................. 64
10.5.2 501 Not Implemented (구현되지 않았음)..................................... 64
10.5.3 502 Bad Gateway (불량 게이트웨이) .................................................... 64
10.5.4 503 Service Unavailable (서비스를 사용할 수 없음) ......................... 64
10.5.5 504 Gateway Timeout (게이트웨이 시간 초과).................................... 64
10.5.6 505 HTTP Version Not Supported (지원되지 않는 HTTP 버전) ........ 65
11 접속 인증 .................................................................... 65
11.1 기본 인증 scheme ........................................ 66
11.2 요약 인증 scheme ....................................................... 67
12 내용 협상(Content Negotiation).................................... 67
12.1 서버가 주도하는 협상 ......................................... 68
12.2 에이전트가 주도하는 협상................................... 69
12.3 투명한 협상(Transparent Negotiation ) .................. 70
13 HTTP에서의 캐시........................................................ 70
13.1.1 캐시의 정확성 .................................................. 72
13.1.2 경고 .................................................................... 73
13.1.3 캐시-제어 메커니즘 ......................................... 74
13.1.4 명백한 사용자 에이전트 경고 ...................... 74
13.1.5 규칙 및 경고의 예외 사항 ............................ 75
13.1.6 클라이언트가 제어하는 행태 ........................ 75
13.2 유효일 모델 ........................................................... 75
13.2.1 서버가 명시한 만기일 .................................... 75
13.2.2 스스로 만기일을 찾음(Heuristic Expiration) .. 76
13.2.3 경과 시간 계산(Age Calculations) ................... 77
13.2.4 만기일 계산 ...................................................... 79
13.2.5 만기일 값을 명확하게 하기 ......................... 80
13.2.6 복수의 응답을 명확하게 하기 ...................... 80
13.3 검증 모델 ............................................................... 81
13.3.1 최종 갱신 날짜 ................................................ 82
13.3.2 엔터티 태그 캐시 검증자(Validators) ................ 82
13.3.3 약한/강한 검증자 ............................................. 82
13.3.4 엔터티 태그와 최종 갱신 날짜를 사용할 때를 결정하는 규칙....... 85
13.3.5 검증을 하지 않는 조건 법 ................................................................. 86
13.4 응답을 캐시할 수 있는 정도(Cachability) .....................……………................…..….... 86
[Page 3]
13.5 캐시에서 응답을 구축하기 .......................... 87
13.5.1 End-to-end 및 Hop-by-hop 헤더 ............... 88
13.5.2 변경할 수 없는 헤더 ............................... 88
13.5.3 헤더의 결합 ............................................... 89
13.5.4 바이트 영역(Byte Ranges)의 결합............ 90
13.6 협상을 통한 응답을 캐시하기 .................... 90
13.7 공유/비공유 캐시............................................. 91
13.8 에러 또는 불완전한 응답 캐시 행태 ....... 91
13.9 GET 및 HEAD의 부작용 ............................. 92
13.10 갱신 또는 삭제 후의 무효화 .................... 92
13.11 의무적으로 서버를 통하여 기입................ 93
13.12 캐시 대체 ...................................................... 93
13.13 History List ................................ 93
14 헤더 필드 정의..................................................... 94
14.1 Accept ..................................................... 95
14.2 Accept-Charset............................. 97
14.3 Accept-Encoding................................ 97
14.4 Accept-Language.................................... 98
14.5 Accept-Ranges ...................................... 99
14.6 Age........................................................... 99
14.7 Allow........................................... 100
14.8 Authorization......................................... 100
14.9 Cache-Control.................................... 101
14.9.1 무엇을 캐시할 수 있는가................................ 103
14.9.2 캐시에 의해 무엇을 저장할 수 있는가........ 103
14.9.3 기본적인 만기일 메커니즘의 변경 .............. 104
14.9.4 캐시의 재검증 및 Reload 제어 ................... 105
14.9.5 비 변경 지시어 ................................................ 107
14.9.6 캐시 제어 확장.................................................. 108
14.10 Connection............................................... 109
14.11 Content-Base................................ 109
14.12 Content-Encoding.................... 110
14.13 Content-Language........................ 110
14.14 Content-Length.............................. 111
14.15 Content-Location......................... 112
14.16 Content-MD5.............................. 113
14.17 Content-Range....................... 114
14.18 Content-Type.......................... 116
14.19 Date................................................ 116
14.20 ETag ......................................................................... 117
14.21 Expires....................................................... 117
14.22 From....................................................... 118
14.23 Host..................................................... 119
14.24 If-Modified-Since .................................................... 119
14.25 If-Match ................................................................... 121
14.26 If-None-Match ......................................................... 122
14.27 If-Range ................................................................... 123
14.28 If-Unmodified-Since ................................................ 124
14.29 Last-Modified ..................……………………………………………………………........... 124
[Page 4]
14.30 Location........................................... 125
14.31 Max-Forwards............................. 125
14.32 Pragma ...................................................................... 126
14.33 Proxy-Authenticate................. 127
14.34 Proxy-Authorization................ 127
14.35 Public ........................................................................ 127
14.36 Range........................................................ 128
14.36.1 Byte Ranges................ 128
14.36.2 Range Retrieval! Requests 130
14.37 Referer............................................ 131
14.38 Retry-After.............................. 131
14.39 Server....................................................... 132
14.40 Transfer-Encoding.............. 132
14.41 Upgrade....................................... 132
14.42 User-Agent........................ 134
14.43 Vary......................................................... 134
14.44 Via......................................................... 135
14.45 Warning............................................... 137
14.46 WWW-Authenticate...................... 139
15 보안에 대한 고려 사항............................................... 139
15.1 클라이언트의 인증 ............................................... 139
15.2 인증 scheme을 선택할 수 있도록 함 ................................... 140
15.3 서버 로그 정보의 남용 ....................................... 141
15.4 민감한 정보의 전송 ............................................. 141
15.5 파일 및 경로 이름에 기초한 공격 ................... 142
15.6 개인적인 정보 ........................................................... 143
15.7 Accept 헤더와 연결된 사생활 보호의 이슈 ........... 143
15.8 DNS Spoofing(속이기) ............................................ 144
15.9 Location 헤더와 Spoofing(속이기) ........................ 144
16 감사의 말...................................................................... 144
17 참고 문헌...................................................................... 146
18 저자의 주소.................................................................. 149
19 부록................................................................................ 150
19.1 Internet Media Type message/http...................... 150
19.2 Internet Media Type multipart/byteranges ............ 150
19.3 Tolerant Applications............................. 151
19.4 HTTP 엔터티와 MIME 엔터티의 차이점......................................................... 152
19.4.1 규범적인 폼으로 변환 .................................... 152
19.4.2 날짜 형식의 변환 ............................................ 153
19.4.3 Content-Encoding 소개............................................... 153
19.4.4 No Content-Transfer-Encoding ........................................ 153
19.4.5 Multipart Body-Part의 HTTP 헤더 필드 ....... 153
19.4.6 Transmit-Encoding 소개 ............................................. 154
19.4.7 MIME-Version ..................................................………………………………………...... 154
[Page 5]
19.5 HTTP/1.0 이후 변경 사항 .................................... 154
19.5.1 복수의 홈을 가진 웹 서버를 단순하게 하기 위한 변경 사항 및
IP 주소 보존 ..................................................... 155
19.6 추가 기능 ............................................................... 156
19.6.1 추가적인 요구 method ............................................ 156
19.6.2 추가 헤더 필드 정의 ...................................... 156
19.7 이전 버전과의 호환성 ......................................... 160
19.7.1 HTTP/1.0 지속적인 연결과의 호환성............. 161




