일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스타트업
- 자바
- 스트림
- RFC
- thread
- C포인터
- 백엔드 강의
- 오류제어
- 자바자료구조
- java8
- 코딩입문
- 정규식
- CodeCommit
- Stream
- 자바8
- 개발자
- lamda
- 안드로이드
- 코딩독학방법
- CodeLatte
- 코드라떼
- 백엔드 개발 코딩 강의
- 데이터베이스강의
- 자료구조강의추천
- 데이터베이스기초
- 람다
- 문돌이
- Android
- java
- 백엔드 코딩
- Today
- Total
이병록의 개발 블로그
RFC 7231 - HTTP/1.1 : Semantics and Content 번역 본문
이 글 최종 수정일 : 2020-05-26
문서제목 : RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1) : Semantics and Content
번역: 이병록(roka88)
도움주신분들: 파파고, 구글번역
번역의 이유
HTTP/0.9, HTTP/1.0, HTTP/1.1을 넘어 2.0과 3.0까지 발전해왔습니다. 그럼에도 불구하고 HTTP 프로토콜과 관련된 번역된 문서를 찾기가 쉽지 않았습니다.
번역된 문서가 왜 필요하냐면, 영어로 직독직해로 이해한다고 하더라도 금방 머리에서 휘발이 되는 경우가 많습니다. 익숙하지 않은 언어로 머리에 이해하려고 하기 떄문이지요. 거기다가 익숙하지 않은 기술문서라면 더더욱 그렇습니다..
또한, 영어문서를 자유롭게 읽기 힘든 사람들은 누군가가 번역하거나 또는 리뷰한 문서나 또는 누군가가 작성한 책을 통해서만 지식을 습득할 수 밖에 없습니다. 그래서 지식을 습득하기가 쉽지 않습니다. 누군가가 해주기까지 기다릴 수 밖에 없습니다.
만약에 RFC문서가 모두 한글로 작성되어 있었다면, 우리나라 엔지니어들이 프로토콜에 대한 지식을 좀 더 쉽게 습득하고, 더 빠르게 기술발전을 했을 것 같습니다. 뿐만 아니라 좀 더 개념적으로 확실히 정립하기 쉬웠을 겁니다.
부족하긴 하지만, 해당 문서 말고도 이미 번역한 문서가 있고, 검토가 완료되면 천천히 올릴 예정입니다.
번역뿐만 아니라 해당 문서를 보며 실제로 HTTP/1.1을 TCP를 통해 클라이언트/서버 를 구현하는 문서 또한 준비중입니다.
완성되면 올리겠습니다.
전 우리나라 엔지니어들이 정말 똑똑하다고 생각합니다. 언어라는 한계를 넘어서도 대단한 일들을 하는 엔지니어들을 보면 굉장히 감명 깊습니다.
지금 이시간에도 고생하고 있는 우리나라 또는 전세계의 엔지니어들에게 응원을 바칩니다.
과정 및 남기는 말
최초에 번역 시도할 떄는 혼자만의 힘으로 하려고 했으나, 굉장히 시간이 오래걸리더군요..
(직독직해를 다시 한글문장구조방식으로 바꾸고..의역하고..)
그래서 머신의 힘을 빌렸어요!
파파고와 구글 번역의 힘으로 번역속도가 상당히 빨라지고 자연스러운 말투로 번역이 가능했습니다. (파파고짱!)
1차는 파파고의 힘을 빌리고 문장을 검토하고 다시 정리하는 방식으로 번역을 완료했어요!
그럼에도 번역전문가도 아니고 사람인지라 오역이 있을 수 있으니, 발견시 댓글로 남겨주시거나
roka88.dev@gmail.com 로 연락주시면 확인 후 수정하겠습니다.^^
정오표가 포함된 문서가 아니므로, 별도의 내용은 Errata Exist에서 확인할 수 있습니다.
응원은 힘이됩니다!
좀 더 보기 편하게 PDF로도 정리되어있습니다.
원문 복사 일 : 2020-04-27
PROPOSED STANDARD
Internet Engineering Task Force (IETF)
Request for Comments: 7231
Obsoletes: 2616
Updates: 2817
Category: Standards Track
ISSN: 2070-1721
R. Fielding, Ed.
Adobe
J. Reschke, Ed.
greenbytes
June 2014
Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
Abstract
The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.
하이퍼텍스트 전송 프로토콜 (HTTP)는 분산, 협업, 하이퍼텍스트 정보 시스템에 대한 상태 없는 애플리케이션-레벨의 프로토콜이다. 이 문서에서는 요청 메서드, 요청 헤더 필드, 응답 상태 코드, 응답 헤더 필드에 의해 표현되는 HTTP/1.1 메시지의 의미와 메시지(메타데이터 및 본문 내용)의 페이로드, 내용 협상 메커니즘을 정의한다.
Status of This Memo
This is an Internet Standards Track document.
이것은 인터넷 표준 추적 문서이다.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.
이 문서는 Internet Engineering Task Force(IETF)의 제품이다. 문서는 IETF 공동체의 합의를 나타낸다. 문서는 공개 검토를 받아왔으며 Internet Engineering Starting Group (IESG)에 의해 발행 승인를 받았다. 인터넷 표준의 추가 정보는 RFC 5741 Section 2에서 확인할 수 있다.
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc7231.
이 문서에 대한 현재 상태 정보는 정오표와 피드백을 어떻게 제공하는 방법은 http://www.rfc-editor.org/info/rfc7231 에서 얻을 수 있다.
Copyright Notice
Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved.
2014 IETF 트러스트 및 문서 작성자로 식별된 사람.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
무단 전재 금지 이 문서는 BCP78및 IETF문서와 관련된 IETF 트러스트의 법적 조항(http://trustee.ietf.org/license-info)는 본 문서의 발행일에 유효하다. 이 문서는 본 문서와 관련된 귀하의 권리와 제한 사항을 설명하므로 주의 깊게 검토해야 한다. 이 문서에서 추출된 코드 구성 요소는 신뢰 법률 조항의 섹션 4.e 에 설명된 대로 간소화된 BSD라이센스 텍스트를 포함해야 하며, SimplifiedBSD라이센스에 설명된 대로 보증 없이 제공된다.
This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.
이 문서는 2008년 11월 10일 이전에 공개되거나 공개된 IETF문서 또는 IETF계약에서 나온 자료를 포함할 수 있다. 이 자료의 일부에서 저작권을 관리하는 당사자는 IETF표준 프로세스 밖에서 이러한 자료의 변경을 허용할 권한을 IETF트러스트에 부여하지 않았을 수 있다. 이러한 자료의 저작권을 관리하는 개인으로부터 적절한 라이선스를 획득하지 않는 한, 이 문서는 IETF표준 프로세스 외부에서 수정될 수 없으며, 이 문서의 파생 저작물은 RFC로 발행하거나 이를 다른 언어로 변환하는 것을 제외하고는 IETF표준 프로세스 외부에서 만들어지지 않을 수 있다
Table of Contents
1. Introduction
1.1 Conformance and Error Handling
1.2 Syntax Notation
2. Resource
3. Representations
3.1 Representation Metadata
3.1.1 Processing Representation Data
3.1.2 Encoding for Compression or Integrity
3.1.3 Audience Language
3.1.4 Identification
3.2 Representation Data
3.3 Payload Semantics
3.4 Content Negotiation
3.4.1 Proactive Negotiation
3.4.2 Reactive Negotiation
4. Request Methods
4.1 Overview
4.2 Common Method Properties
4.2.1 Safe Methods
4.2.2 Idempotent Methods
4.2.3 Cacheable Methods
4.3 Method Definitions
4.3.1 GET
4.3.2 HEAD
4.3.3 POST
4.3.4 PUT
4.3.5 DELETE
4.3.6 CONNECT
4.3.7 OPTIONS
4.3.8 TRACE
5. Request Header Fields
5.1 Controls
5.1.1 Expect
5.1.2 Max-Forwards
5.2 Conditionals
5.3 Content Negotiation
5.3.1 Quality Values
5.3.2 Accept
5.3.3 Accept-Charset
5.3.4 Accept-Encoding
5.3.5 Accept-Language
5.4 Authentication Credentials
5.5 Request Context
5.5.1 From
5.5.2 Referer
5.5.3 User-Agent
6. Response Status Codes
6.1 Overview of Status Codes
6.2 Informational 1xx
6.2.1 100 Continue
6.2.2 101 Switching Protocols
6.3 Successful 2xx
6.3.1 200 OK
6.3.2 201 Created
6.3.3 202 Accepted
6.3.4 203 Non-Authoritative Information
6.3.5 204 No Content
6.3.6 205 Reset Content
6.4 Redirection 3xx
6.4.1 300 Multiple Choices
6.4.2 301 Moved Permanently
6.4.3 302 Found
6.4.4 303 See Other
6.4.5 305 Use Proxy
6.4.6 306 (Unused)
6.4.7 307 Temporary Redirect
6.5 Client Error 4xx
6.5.1 400 Bad Request
6.5.2 402 Payment Required
6.5.3 403 Forbidden
6.5.4 404 Not Found
6.5.5 405 Method Not Allowed
6.5.6 406 Not Acceptable
6.5.7 408 Request Timeout
6.5.8 409 Conflict
6.5.9 410 Gone
6.5.10 411 Length Required
6.5.11 413 Payload Too Large
6.5.12 414 URI Too Long
6.5.13 415 Unsupported Media Type
6.5.14 417 Expectation Failed
6.5.15 426 Upgrade Required
6.6 Server Error 5xx
6.6.1 500 Internal Server Error
6.6.2 501 Not Implemented
6.6.3 502 Bad Gateway
6.6.4 503 Service Unavailable
6.6.5 504 Gateway Timeout
6.6.6 505 HTTP Version Not Supported
7. Response Header Fields
7.1. Control data
7.1.1 Origination Date
7.1.2 Location
7.1.3 Retry-After
7.1.4 Vary
7.2 Validator Header Fields
7.3 Authentication Challenges
7.4 Response Context
7.4.1 Allow
7.4.2 Server
8. IANA Considerations
8.1 Method Registry
8.1.1 Procedure
8.1.2 Considerations for New Methods
8.1.3 Registrations
8.2 Status Code Registry
8.2.1 Procedure
8.2.2 Considerations for New Status Codes
8.2.3 Registrations
8.3 Header Field Registry
8.3.1 Considerations for New Header Fields
8.3.2 Registrations
8.4 Content Coding Registry
8.4.1 Procedure
8.4.2 Registrations
9. Security Considerations
9.1 Attacks Based on File and Path Names
9.2 Attacks Based on Command, Code, or Query Injection
9.3 Disclosure of Personal Information
9.4 Disclosure of Sensitive Information in URIs
9.5 Disclosure of Fragment after Redirects
9.6 Disclosure of Product Information
9.7 Browser Fingerprinting
10. Acknowledgments
11. References
11.1 Normative References
11.2 Informative References
Appendix A. Differences between HTTP and MIME
A.1 MIME-Version
A.2 Conversion to Canonical Form
A.3 Conversion of Date Formats
A.4 Conversion of Content-Encoding
A.5 Conversion of Content-Transfer-Encoding
A.6 MHTML and Line Length Limitations
Appendix B. Changes from RFC 2616
Appendix C. Imported ABNF
Appendix D. Collected ABNF
Index
1. Introduction
Each Hypertext Transfer Protocol (HTTP) message is either a request or a response. A server listens on a connection for a request, parses each message received, interprets the message semantics in relation to the identified request target, and responds to that request with one or more response messages. A client constructs request messages to communicate specific intentions, examines received responses to see if the intentions were carried out, and determines how to interpret the results. This document defines HTTP/1.1 request and response semantics in terms of the architecture defined in [RFC7230].
각 하이퍼텍스트 전송 프로토콜(HTTP) 메시지는 요청 또는 응답이다. 서버는 요청에 대한 커넥션을 청취하고, 수신된 각 메시지를 구문 분석하며, 확인된 요청 대상과 관련하여 메시지 의미를 해석하고, 하나 이상의 응답 메시지로 해당 요청에 응답한다. 클라이언트는 특정 의도를 전달하기 위한 요청 메시지를 구성하고, 수신된 응답을 검토하여 의도가 수행되었는지 확인하고, 결과를 해석하는 방법을 결정한다. 이 문서는 [RFC7230]에서 정의한 아키텍처의 관점에서 HTTP/1.1 요청 및 응답 의미론을 정의한다.
HTTP provides a uniform interface for interacting with a resource (Section 2), regardless of its type, nature, or implementation, via the manipulation and transfer of representations (Section 3).
HTTP는 유형, 특성 또는 구현, 표현의 조작과 전송을 고려하여(Section 3) 리소스와의 상호작용을 위한 통일된 인터페이스(Section 2)를 제공한다.
HTTP semantics include the intentions defined by each request method (Section 4), extensions to those semantics that might be described in request header fields (Section 5), the meaning of status codes to indicate a machine-readable response (Section 6), and the meaning of other control data and resource metadata that might be given in response header fields (Section 7).
HTTP 의미론은 각 요청 메서드에 의해 정의된 의도(Section 4), 요청 헤더 필드에 설명될 수 있는 의미론으로의 확장(Section 5), machine-readable한 응답을 나타내는 상태 코드의 의미(Section 6), 응답 헤더 필드에 제공될 수 있는 다른 제어 데이터와 리소스 메타데이터의 의미가 포함된다.(Section 7).
This document also defines representation metadata that describe how a payload is intended to be interpreted by a recipient, the request header fields that might influence content selection, and the various selection algorithms that are collectively referred to as “content negotiation" (Section 3.4).
이 문서는 또한 수신자가 페이로드를 해석하는 방법을 기술하는 표현 메타데이터, 콘텐츠 선택에 영향을 미칠 수 있는 요청 헤더 필드, 그리고 “content negotiation”이라고 총칭하는 다양한 선택 알고리즘을 규정한다(Section 3.4).
1.1 Conformance And Error Handling
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT”, "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
이 문서의 해당 키워드 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” 들은 RFC2119 에 설명되어 있다.
Conformance criteria and considerations regarding error handling are defined in Section 2.5 of [RFC7230].
불일치 기준 및 오류 처리와 관련된 고려 사항은 [RFC7230]의 Section 2.5에 정의되어 있다.
1.2 Syntax Notation
This specification uses the Augmented Backus-Naur Form (ABNF) notation of [RFC5234] with a list extension, defined in Section 7 of [RFC7230], that allows for compact definition of comma-separated lists using a '#' operator (similar to how the '*' operator indicates repetition). Appendix C describes rules imported from other documents. Appendix D shows the collected grammar with all list operators expanded to standard ABNF notation.
이 규격은 [RFC7230]의 Section 7에 정의된 '#' 연산자를 사용하여 쉼표로 구분된 리스트를 콤팩트하게 정의할 수 있는 ('*' 연산자가 반복을 나타내는 방식과 유사) 목록 확장자가 있는 [RFC5234] Augmented Backus_Naur Form (ABNF) 표기법을 사용한다. 부록 C는 다른 문서에서 가져온 규칙을 설명한다. 부록 D는 표준 ABNF 표기법으로 확장된 모든 목록 연산자와 함께 수집된 문법을 보여준다.
This specification uses the terms "character", "character encoding scheme", "charset", and "protocol element" as they are defined in [RFC6365].
이 규격은 [RFC6365]에서 정의한 대로 “character”, ”character encoding scheme”, “charset” 및 “protocol element”라는 용어를 사용한다.
2. Resources
The target of an HTTP request is called a "resource". HTTP does not limit the nature of a resource; it merely defines an interface that might be used to interact with resources. Each resource is identified by a Uniform Resource Identifier (URI), as described in Section 2.7 of [RFC7230].
HTTP 요청의 대상은 “resource(이하 리소스)” 라고 불린다. HTTP는 리소스의 특성을 제한하는 것이 아니라 단지 리소스와 상호작용하는데 사용될 수 있는 인터페이스를 정의한다. 각 리소스는 [RFC7230]의 Section 2.7에서 설명한 대로 Uniform Resource Identifier(URI)로 식별된다.
When a client constructs an HTTP/1.1 request message, it sends the target URI in one of various forms, as defined in (Section 5.3 of [RFC7230]). When a request is received, the server reconstructs an effective request URI for the target resource (Section 5.5 of [RFC7230]).
클라이언트가 HTTP/1.1 요청 메시지를 작성할 때, 클라이언트는 ([RFC7230]의 Section5.3)에 정의된 다양한 형태 중 하나로 대상 URI를 전송한다. 요청이 수신되면 서버는 대상 리소스에 대한 유효한 요청 URI를 재구성한다([RFC7230]의 Section 5.5).
One design goal of HTTP is to separate resource identification from request semantics, which is made possible by vesting the request semantics in the request method (Section 4) and a few request-modifying header fields (Section 5). If there is a conflict between the method semantics and any semantic implied by the URI itself, as described in Section 4.2.1, the method semantics take precedence.
HTTP의 설계 목표 중 하나는 요청 의미론에서 리소스 식별을 분리하는 것이며, 요청 메서드(Section 4)에서 요청 의미론과 몇 개의 request-modifying 헤더 필드(Section 5)를 확정함으로써 가능하다. Section 4.2.1에서 설명한 바와 같이 메서드 의미론과 URI 자체에서 암시하는 의미 사이에 충돌이 있는 경우 메서드 의미론이 우선한다.
3. Representations
Considering that a resource could be anything, and that the uniform interface provided by HTTP is similar to a window through which one can observe and act upon such a thing only through the communication of messages to some independent actor on the other side, an abstraction is needed to represent ("take the place of") the current or desired state of that thing in our communications. That abstraction is called a representation [REST].
리소스는 무엇이든 될 수 있고, HTTP에 의해 제공되는 통일된 인터페이스가 상대편의 일부 독립 행위자에게 메시지를 전달함으로써만 그러한 것을 관찰하고 행동할 수 있는 창과 유사하다는 점을 고려하면, 통신에서 현재 또는 원하는 상태를 표현하기 위한 추상화가 필요하다(“그 자리를 대신”). 그 추상화는 [REST]로 불린다.
For the purposes of HTTP, a "representation" is information that is intended to reflect a past, current, or desired state of a given resource, in a format that can be readily communicated via the protocol, and that consists of a set of representation metadata and a potentially unbounded stream of representation data.
HTTP의 목적상, “representation(이하 표현)”은 주어진 리소스의 과거, 현재 또는 원하는 상태를 프로토콜을 통해 쉽게 전달할 수 있는 형식으로 반영하기 위한 정보로서, 표현 메타데이터의 집합과 잠재적으로 한정되지 않은 표현 데이터 스트림으로 구성된다.
An origin server might be provided with, or be capable of generating, multiple representations that are each intended to reflect the current state of a target resource. In such cases, some algorithm is used by the origin server to select one of those representations as most applicable to a given request, usually based on content negotiation. This "selected representation" is used to provide the data and metadata for evaluating conditional requests [RFC7232] and constructing the payload for 200 (OK) and 304 (Not Modified) responses to GET (Section 4.3.1).
원서버는 각각 대상 리소스의 현재 상태를 반영하기 위한 여러 가지 표현을 제공하거나 생성할 수 있다. 이러한 경우, 일반적으로 콘텐츠 협상에 기초하여 특정 요청에 가장 적합한 표현 중 하나를 선택하기 위해 원서버가 일부 알고리즘을 사용한다. 이 “selected representation”은 조건부 요청[RFC7232]을 평가하고 GET(Section 4.3.1)에 대한 200(OK) 및 304(Not Modified) 응답에 대한 페이로드 구성을 위한 데이터와 메타데이터를 제공하는 데 사용된다.
3.1 Representation Metadata
Representation header fields provide metadata about the representation. When a message includes a payload body, the representation header fields describe how to interpret the representation data enclosed in the payload body. In a response to a HEAD request, the representation header fields describe the representation data that would have been enclosed in the payload body if the same request had been a GET.
Representation 헤더 필드는 표현에 대한 메타데이터를 제공한다. 메시지에 페이로드 본문이 포함된 경우, 표현 헤더 필드는 페이로드 본문에 포함된 표현 데이터를 해석하는 방법을 설명한다. HEAD 요청에 대한 응답으로, 표현 헤더 필드는 동일한 요청이 GET이였다면 페이로드 본체에 포함되었을 표현 데이터를 설명한다.
The following header fields convey representation metadata:
다음 헤더 필드는 표현 메타데이터를 전달한다.
+——————————+—————————+
| Header Field Name | Defined in… |
+——————————+—————————+
| Content-Type | Section 3.1.1.5 |
| Content-Encoding | Section 3.1.2.2 |
| Content-Language | Section 3.1.3.2 |
| Content-Location | Section 3.1.4.2 |
+——————————+—————————+
3.1.1 Processing Representation Data
3.1.1.1 Media Type
HTTP uses Internet media types [RFC2046] in the Content-Type (Section 3.1.1.5) and Accept (Section 5.3.2) header fields in order to provide open and extensible data typing and type negotiation. Media types define both a data format and various processing models: how to process that data in accordance with each context in which it is received.
HTTP는 개방적이고 확장 가능한 데이터 입력과 타입 협상을 제공하기 위해 Content-Type (Section 3.1.1.5)과 Accept (Section 5.3.2) 헤더 필드의 인터넷 미디어 타입 [RFC2046]을 사용한다. 미디어 타입은 데이터 형식과 다양한 처리 모델 모두를 정의한다: 데이터가 수신되는 각 상황에 따라 데이터를 처리하는 방법.
media-type = type "/" subtype *( OWS ";" OWS parameter )
type = token
subtype = token
The type/subtype MAY be followed by parameters in the form of name=value pairs.
type/subtype 뒤에 name=value 쌍 형태의 파라미터가 뒤 따를것이다.(MAY)
parameter = token "=" ( token / quoted-string )
The type, subtype, and parameter name tokens are case-insensitive. Parameter values might or might not be case-sensitive, depending on the semantics of the parameter name. The presence or absence of a parameter might be significant to the processing of a media-type, depending on its definition within the media type registry.
type, subtype 및 매개 변수 이름 토큰은 대소문자를 구분하지 않는다. 매개변수 값은 매개변수 이름의 의미에 따라 대소문자를 구분하거나 구분하지 않을 수 있다. 매개 변수의 존재 또는 부재는 미디어 타입 레지스트리 내의 정의에 따라 media-type 처리에 중요할 수 있다.
A parameter value that matches the token production can be transmitted either as a token or within a quoted-string. The quoted and unquoted values are equivalent. For example, the following examples are all equivalent, but the first is preferred for
consistency:
토큰 생산과 일치하는 파라미터 값은 토큰으로 전송하거나 quoted-string 내에서 전송될 수 있다. 인용된 값과 인용되지 않은 값은 동일하다. 예를 들어 다음 예는 모두 동일하지만 첫 번째 예는 일관성을 위해 선호된다:
text/html;charset=utf-8
text/html;charset=UTF-8
Text/HTML;Charset="utf-8"
text/html; charset="utf-8"
Internet media types ought to be registered with IANA according to the procedures defined in [BCP13].
인터넷 미디어 타입은 [BCP13]에서 정의한 절차에 따라 IANA에 등록되어야 한다.
Note: Unlike some similar constructs in other header fields, media type parameters do not allow whitespace (even "bad" whitespace) around the "=" character.
참고: 다른 헤더 필드의 일부 유사한 구성과 달리, 미디어 유형 매개변수는 "=" 문자 주위에 공백(“불량” 공백)을 허용하지 않는다.
3.1.1.2 Charset
HTTP uses charset names to indicate or negotiate the character encoding scheme of a textual representation [RFC6365]. A charset is identified by a case-insensitive token.
HTTP는 charset 표기의 문자 인코딩 scheme을 나타내거나 협상하기 위해 charset 표기를 사용한다[RFC6365]. charset은 대소문자를 구분하지 않는 토큰으로 식별된다.
charset = token
Charset names ought to be registered in the IANA "Character Sets” registry (<http://www.iana.org/assignments/character-sets>) according to the procedures defined in [RFC2978].
Charset 이름은 [RFC2978]에서 정의한 절차에 따라 IANA “Character Sets” 레지스트리(<http://www.iana.org/assignments/character-sets>)에 등록되어야 한다.
3.1.1.3 Canonicalization and Text Defaults
Internet media types are registered with a canonical form in order to be interoperable among systems with varying native encoding formats. Representations selected or transferred via HTTP ought to be in canonical form, for many of the same reasons described by the Multipurpose Internet Mail Extensions (MIME) [RFC2045]. However, the performance characteristics of email deployments (i.e., store and forward messages to peers) are significantly different from those common to HTTP and the Web (server-based information services). Furthermore, MIME's constraints for the sake of compatibility with older mail transfer protocols do not apply to HTTP (see Appendix A).
인터넷 미디어 타입은 다양한 기본 인코딩 형식을 가진 시스템 간에 상호운용성을 갖기 위해 표준 형태로 등록된다. HTTP를 통해 선택되거나 전송된 표현은 MIME(Multipurpose Internet Mail Extensions)에 의해 설명되는 많은 동일한 이유로 표준 형식이어야 한다 [RFC2045]. 그러나 전자 메일 배포(즉, 동료에게 메시지를 저장하고 전달)의 성능 특성은 HTTP 및 웹(서버 기반 정보 서비스)에 공통되는 것과 크게 다르다. 또한 이전 메일 전송 프로토콜과의 호환성을 위해 MIME의 제약조건은 HTTP에는 적용되지 않는다(Appendix A 참조).
MIME's canonical form requires that media subtypes of the "text" type use CRLF as the text line break. HTTP allows the transfer of text media with plain CR or LF alone representing a line break, when such line breaks are consistent for an entire representation. An HTTP sender MAY generate, and a recipient MUST be able to parse, line breaks in text media that consist of CRLF, bare CR, or bare LF. In addition, text media in HTTP is not limited to charsets that use octets 13 and 10 for CR and LF, respectively. This flexibility regarding line breaks applies only to text within a representation that has been assigned a "text" media type; it does not apply to "multipart" types or HTTP elements outside the payload body (e.g., header fields).
MIME의 표준 형식은 “text” 타입의 미디어 하위 타입이 텍스트 줄 바꿈으로 CRLF를 사용하도록 요구한다. HTTP는 이러한 줄 바꿈이 전체 표현에 일관될 때, 줄 바꿈을 나타내는 일반 CR 또는 LF만으로 텍스트 매체를 전송할 수 있다. HTTP 발신자는 생성할 수 있으며(MAY) 수신자는 CRLF, bare CR 또는 bare LF로 구성된 텍스트 매체의 줄 바꿈을 구문 분석할 수 있어야 한다.(MUST) 또한 HTTP의 텍스트 매체는 각각 CR와 LF에 대해 octets 13과 10을 사용하는 문자 집합에만 국한되지 않는다. 줄 바꿈과 관련된 이러한 유연성은 “text” 미디어 타입이 할당된 표현 내의 텍스트에만 적용되며, “multipart” 타입이나 페이로드 본체 외부의 HTTP 요소(e.g., 헤더 필드)에는 적용되지 않는다.
If a representation is encoded with a content-coding, the underlying data ought to be in a form defined above prior to being encoded.
표현이 content-coding으로 인코딩된 경우, 기본 데이터는 인코딩되기 전에 위에서 정의한 형태로 되어야 한다.
3.1.1.4 Mutipart Types
MIME provides for a number of "multipart" types -- encapsulations of one or more representations within a single message body. All multipart types share a common syntax, as defined in Section 5.1.1 of [RFC2046], and include a boundary parameter as part of the media type value. The message body is itself a protocol element; a sender MUST generate only CRLF to represent line breaks between body parts.
MIME은 단일 메시지 본문 내에서 하나 이상의 표현을 캡슐화한 여러 “multipart” 타입을 제공한다. 모든 멀티파트 타입은 [RFC2046]의 Section 5.1.1에서 정의한 공통 구문을 공유하며, 미디어 타입 값의 일부로 경계 매개변수를 포함한다. 메시지 본문은 그 자체로 프로토콜 요소다. 발신자는 본문 부분 사이의 줄 바꿈을 나타내기 위해 CRLF만 생성해야 한다.(MUST)
HTTP message framing does not use the multipart boundary as an indicator of message body length, though it might be used by implementations that generate or process the payload. For example, the "multipart/form-data" type is often used for carrying form data in a request, as described in [RFC2388], and the “multipart/ byteranges" type is defined by this specification for use in some 206 (Partial Content) responses [RFC7233].
HTTP 메시지 프레임은 페이로드를 생성하거나 처리하는 구현에 의해 사용될 수 있지만 메시지 본문 길이를 나타내는 지표로 멀티파트 경계를 사용하지 않는다. 예를 들어, [RFC2388]에 기술된 바와 같이 요청의 양식 데이터 전송에 "multipart/form-data" 타입을 사용하는 경우가 많으며, "multipart/byteranges" 타입은 이 명세에 의해 정의되어 일부 206 (Partial Content) 응답에 사용된다. [RFC7233]
3.1.1.5 Content-Type
The "Content-Type" header field indicates the media type of the associated representation: either the representation enclosed in the message payload or the selected representation, as determined by the message semantics. The indicated media type defines both the data format and how that data is intended to be processed by a recipient, within the scope of the received message semantics, after any content codings indicated by Content-Encoding are decoded.
"Content-Type" 헤더 필드는 메시지 의미에 의해 결정되는 메시지 페이로드에 포함된 표현 또는 선택된 표현 등 관련 표현의 미디어 타입을 나타낸다. 표시된 미디어 타입은 수신된 메시지 의미 범위 내에서 Content-Encoding으로 표시된 콘텐츠 코딩이 디코딩된 후 데이터 형식과 데이터가 수신자에 의해 처리되는 방식을 모두 정의한다.
Content-Type = media-type
Media types are defined in Section 3.1.1.1. An example of the field is
미디어 타입은 Section 3.1.1.1에 정의되어 있다. 필드의 예는 다음과 같다.
Content-Type: text/html; charset=ISO-8859-4
A sender that generates a message containing a payload body SHOULD generate a Content-Type header field in that message unless the intended media type of the enclosed representation is unknown to the sender. If a Content-Type header field is not present, the recipient MAY either assume a media type of “application/octet-stream" ([RFC2046], Section 4.5.1) or examine the data to determine its type.
페이로드 본문을 포함하는 메시지를 생성하는 발신자는 동봉된 표현의 의도된 미디어 타입을 그 발신자가 알 수 없는 경우가 아니라면 해당 메시지에 Content-Type 헤더 필드를 생성해야 한다.(SHOULD) Content-Type 헤더 필드가 없는 경우 수신자는 “application/optet-stream” ([RFC2046], Section 4.5.1)의 미디어 타입을 가정하거나 데이터를 검토하여 타입을 결정할 수 있다.(MAY)
In practice, resource owners do not always properly configure their origin server to provide the correct Content-Type for a given representation, with the result that some clients will examine a payload's content and override the specified type. Clients that do so risk drawing incorrect conclusions, which might expose additional security risks (e.g., "privilege escalation"). Furthermore, it is impossible to determine the sender's intent by examining the data format: many data formats match multiple media types that differ only in processing semantics. Implementers are encouraged to provide a means of disabling such "content sniffing" when it is used.
실제로, 리소스 소유자는 특정 표현을 위해 올바른 Content-Type 을 제공하도록 매번 원서버를 적절하게 구성하진 않으며, 일부 클라이언트가 페이로드의 콘텐츠를 검사하고 지정된 타입을 재정의한다. 잘못된 결론을 도출하는 위험을 감수하는 클라이언트, 이는 추가적인 보안 위험(e.g., “privilege escalation”)을 노출시킬 수 있다. 게다가 데이터 형식을 검토하여 발신자의 의도를 파악하는 것은 불가능하다: 많은 데이터 형식은 처리 의미에만 차이가 있는 여러 미디어 타입과 일치한다. 구현자는 콘텐츠 스니핑을 사용할 때 그러한 “content sniffing” 을 비활성화할 수 있는 수단을 제공하도록 권장된다.
3.1.2 Encoding for Compression or Integrity
3.1.2.1 Content Codings
Content coding values indicate an encoding transformation that has been or can be applied to a representation. Content codings are primarily used to allow a representation to be compressed or otherwise usefully transformed without losing the identity of its underlying media type and without loss of information. Frequently, the representation is stored in coded form, transmitted directly, and only decoded by the final recipient.
내용 코딩 값은 표현에 적용되었거나 적용될 수 있는 인코딩 변환을 나타낸다. 콘텐츠 코딩은 주로 표현을 압축하거나 다른 용도로 사용할 수 있도록 하기 위해 사용되며, 기본적인 미디어 타입의 정체성을 상실하지 않고 정보의 손실 없이 사용된다. 빈번히, 표현은 코드화된 형태로 저장되고, 직접 전송되며, 최종 수신자에 의해서만 해독된다.
content-coding = token
All content-coding values are case-insensitive and ought to be registered within the "HTTP Content Coding Registry", as defined in Section 8.4. They are used in the Accept-Encoding (Section 5.3.4) and Content-Encoding (Section 3.1.2.2) header fields.
모든 콘텐츠 코딩 값은 대소문자를 구분하지 않으며 Section 8.4에 정의된 “HTTP Content Coding Registry”에 등록해야 한다. Accept-Encoding(Section 5.3.4) 및 Content-Encoding(Section 3.1.2.2) 헤더 필드에 사용된다.
The following content-coding values are defined by this specification:
이 명세에 의해 정의되는 콘텐츠 코딩 값은 다음과 같다.
compress (and x-compress): See Section 4.2.1 of [RFC7230].
deflate: See Section 4.2.2 of [RFC7230].
gzip (and x-gzip): See Section 4.2.3 of [RFC7230].
3.1.2.2 Content-Encoding
The "Content-Encoding" header field indicates what content codings have been applied to the representation, beyond those inherent in the media type, and thus what decoding mechanisms have to be applied in order to obtain data in the media type referenced by the Content-Type header field. Content-Encoding is primarily used to allow a representation's data to be compressed without losing the identity of its underlying media type.
“Content-Encoding” 헤더 필드는 미디어 타입에 내재된 코딩을 넘어 표현에 어떤 콘텐츠 코딩이 적용되었는지, 따라서 Content-Type 헤더 필드에서 참조되는 미디어 타입의 데이터를 얻기 위해 어떤 디코딩 메커니즘을 적용해야 하는지를 나타낸다. Content-Encoding은 주로 표현의 기본 미디어 타입의 정체성을 잃지 않고 압축될 수 있도록 하기 위해 사용된다.
Content-Encoding = 1#content-coding
An example of its use is
Content-Encoding: gzip
If one or more encodings have been applied to a representation, the sender that applied the encodings MUST generate a Content-Encoding header field that lists the content codings in the order in which they were applied. Additional information about the encoding parameters can be provided by other header fields not defined by this specification.
하나 이상의 인코딩이 표현에 적용된 경우, 인코딩을 적용한 발신자는 해당 인코딩이 적용된 순서대로 내용 코딩을 나열하는 Content-Encoding 헤더 필드를 생성해야 한다.(MUST) 인코딩 매개변수에 대한 추가 정보는 이 명세에서 정의하지 않은 다른 헤더 필드에서 제공할 수 있다.
Unlike Transfer-Encoding (Section 3.3.1 of [RFC7230]), the codings listed in Content-Encoding are a characteristic of the representation; the representation is defined in terms of the coded form, and all other metadata about the representation is about the coded form unless otherwise noted in the metadata definition. Typically, the representation is only decoded just prior to rendering or analogous usage.
Transfer-Encoding ([RFC7230]의 Section 3.3.1)과는 달리, Content-Encoding에 열거된 코딩은 표현의 특징이며, 표현은 코드화된 형태로 정의되며, 표현에 관한 다른 모든 메타데이터는 메타데이터 정의에 달리 명시되지 않는 한 코드화된 형태에 관한 것이다. 일반적으로 표현은 렌더링 또는 유사 사용 전에 디코딩된다.
If the media type includes an inherent encoding, such as a data format that is always compressed, then that encoding would not be restated in Content-Encoding even if it happens to be the same algorithm as one of the content codings. Such a content coding would only be listed if, for some bizarre reason, it is applied a second time to form the representation. Likewise, an origin server might choose to publish the same data as multiple representations that differ only in whether the coding is defined as part of Content-Type or Content-Encoding, since some user agents will behave differently in their handling of each response (e.g., open a "Save as ..." dialog instead of automatic decompression and rendering of content).
미디어 타입이 항상 압축되는 데이터 형식과 같은 고유한 인코딩을 포함하는 경우, 해당 인코딩이 콘텐츠 코딩 중 하나와 동일한 알고리즘일지라도 Content-Encoding에서 다시 시작되지 않을 것이다. 그러한 콘텐츠 코딩은, 어떤 기괴한 이유로, 표현을 형성하기 위해 두 번째 적용되어야만 나열될 것이다. 마찬가지로, 원서버는 코딩이 Content-Type 또는 Content-Encoding의 일부로 정의되는지 여부에만 차이가 있는 다중 표현으로서 동일한 데이터를 출판하도록 선택할 수 있다. 일부 사용자 에이전트는 각 응답의 처리에서 서로 다르게 행동하기 때문이다 (e.g., 자동 압축 해제 및 내용 렌더링 대신 “Save as…”을 열면 보이는 다이얼로그).
An origin server MAY respond with a status code of 415 (Unsupported Media Type) if a representation in the request message has a content coding that is not acceptable.
원서버는 요청 메시지의 표현에 허용되지 않는 콘텐츠 코딩이 있는 경우 상태 코드 415(Unsupported Media Type)로 응답할 것 이다.(MAY)
3.1.3 Audience Language
3.1.3.1 Language Tags
A language tag, as defined in [RFC5646], identifies a natural language spoken, written, or otherwise conveyed by human beings for communication of information to other human beings. Computer languages are explicitly excluded.
[RFC5646]에서 정의한 언어 태그는 다른 사람에 대한 정보 전달을 위해 사람이 말하거나, 쓰거나, 또는 다른 방법으로 전달하는 자연 언어를 식별한다. 컴퓨터 언어는 명시적으로 제외된다.
HTTP uses language tags within the Accept-Language and Content-Language header fields. Accept-Language uses the broader language-range production defined in Section 5.3.5, whereas Content-Language uses the language-tag production defined below.
HTTP는 Accept-Language 및 Content-Language 헤더 필드 내에서 언어 태그를 사용한다. 수용언어는 Section 5.3.5에서 정의한 광범위한 language-range 문법을 사용하는 반면, Content-Language는 아래에 정의한 language-tag 문법을 사용한다.
language-tag = <Language-Tag, see [RFC5646], Section 2.1>
A language tag is a sequence of one or more case-insensitive subtags, each separated by a hyphen character ("-", %x2D). In most cases, a language tag consists of a primary language subtag that identifies a broad family of related languages (e.g., "en" = English), which is optionally followed by a series of subtags that refine or narrow that language's range (e.g., "en-CA" = the variety of English as communicated in Canada). Whitespace is not allowed within a language tag. Example tags include:
언어 태그는 하나 이상의 대소문자를 구분하지 않는 하위 태그의 시퀀스로, 각각 하이픈 문자(“-”, %x2D)로 구분된다. 대부분의 경우, 언어 태그는 광범위한 친숙한 언어(e.g., “en” = English)을 식별하는 주 언어 하위 태그로 구성되며, 선택적으로 그 언어의 범위를 세분화하거나 좁히는 일련의 하위 태그(e.g., “en-CA” = 캐나다에서 통신하는 영어의 다양성)가 뒤따른다. 언어 태그 내에서는 공백이 허용되지 않는다. 예를 들어 태그는 다음과 같다.
fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN
See [RFC5646] for further information.
더 많은 정보는 [RFC5646]을 참조한다.
3.1.3.2 Content-Language
The "Content-Language" header field describes the natural language(s) of the intended audience for the representation. Note that this might not be equivalent to all the languages used within the representation.
“Content-Language” 헤더 필드는 표현을 위해 의도된 청중의 자연어를 설명한다. 이는 표현 내에서 사용되는 모든 언어와 동일하지 않을 수 있다는 점에 유의한다.
Content-Language = 1#language-tag
Language tags are defined in Section 3.1.3.1. The primary purpose of Content-Language is to allow a user to identify and differentiate representations according to the users' own preferred language. Thus, if the content is intended only for a Danish-literate audience, the appropriate field is
언어 태그는 Section 3.1.3.1에 정의되어 있다. Content-Language는 사용자가 선호하는 언어에 따라 표현을 식별하고 구별할 수 있도록 하는 것이 주된 목적이다. 따라서 그 내용이 덴마크어 문맹인 청중만을 대상으로 한 것이라면 적절한 분야는 다음과 같다.
Content-Language: da
If no Content-Language is specified, the default is that the content is intended for all language audiences. This might mean that the sender does not consider it to be specific to any natural language, or that the sender does not know for which language it is intended.
Content-Language가 지정되지 않은 경우, 기본값은 콘텐츠가 모든 언어 대상이라는 것이다. 이것은 발신자가 그것을 어떤 자연 언어에 특정한 것으로 간주하지 않거나, 발신자가 어떤 언어를 의도하는지를 모른다는 것을 의미할 수 있다.
Multiple languages MAY be listed for content that is intended for multiple audiences. For example, a rendition of the "Treaty of Waitangi", presented simultaneously in the original Maori and English versions, would call for
다수의 시청자를 대상으로 하는 콘텐츠에 대해서는 다수의 언어가 기재될 수 있다.(MAY) 예를 들어, 마오리 원판과 영어판으로 동시에 제시된 “Treaty of Waitangi”의 번역이 요구될 것이다.
Content-Language: mi, en
However, just because multiple languages are present within a representation does not mean that it is intended for multiple linguistic audiences. An example would be a beginner's language primer, such as "A First Lesson in Latin", which is clearly intended to be used by an English-literate audience. In this case, the Content-Language would properly only include “en".
그러나, 표현 안에 다국어가 존재한다고 해서 그것이 다국어 사용자들을 위한 것이 아니라는 것을 의미하지는 않는다. 영어에 능통한 청중이 사용하고자 하는 “A First Lesson in Latin”과 같은 초보자의 언어 입문자가 그 예일 것이다. 이 경우, Content-Language에는 “en”만 적절히 포함할 수 있다.
Content-Language MAY be applied to any media type -- it is not limited to textual documents.
Content-Language는 모든 미디어 타입에 적용될 수 있으며, 텍스트 문서에만 국한되지 않는다.(MAY)
3.1.4 Identification
3.1.4.1 Identifying a Representation
When a complete or partial representation is transferred in a message payload, it is often desirable for the sender to supply, or the recipient to determine, an identifier for a resource corresponding to that representation.
완전한 또는 부분적인 표현을 메시지 페이로드로 전송할 때, 발신자는 종종 그 표현에 해당하는 리소스의 식별자를 제공하거나 또는 수신자가 결정하는 것이 바람직하다.
For a request message:
요청 메시지의 경우
o If the request has a Content-Location header field, then the sender asserts that the payload is a representation of the resource identified by the Content-Location field-value. However, such an assertion cannot be trusted unless it can be verified by other means (not defined by this specification). The information might still be useful for revision history links.
요청에 Content-Location 헤더 필드가 있는 경우, 발신자는 페이로드에 대해 Content-Location field-value로 식별된 리소스의 표현이라고 단언한다. 그러나 이러한 주장은 다른 방법으로 검증될 수 있는 경우가 아니면 신뢰할 수 없다.(이 명세에 의해 정의되지 않음) 이 정보는 개정 내역 링크에 여전히 유용할 수 있다.
o Otherwise, the payload is unidentified.
그렇지 않으면 페이로드는 확인되지 않는다.
For a response message, the following rules are applied in order until a match is found:
응답 메시지의 경우 일치 항목이 발견될 때까지 다음 규칙이 순서대로 적용된다.
1. If the request method is GET or HEAD and the response status code is 200 (OK), 204 (No Content), 206 (Partial Content), or 304 (Not Modified), the payload is a representation of the resourceidentified by the effective request URI (Section 5.5 of [RFC7230]).
요청 메서드가 GET 또는 HEAD이고 응답 상태 코드가 200(OK), 204(No Content), 206(Partial Content), 304(Not Modified)인 경우, 페이로드는 유효한 요청 URI에 의해 식별된 리소스를 나타낸다 ([RFC7230] Section 5.5).
2. If the request method is GET or HEAD and the response status code is 203 (Non-Authoritative Information), the payload is a potentially modified or enhanced representation of the target resource as provided by an intermediary.
요청 메서드가 GET 또는 HEAD이고 응답 상태 코드가 203(Non-Authoriative Information)인 경우, 페이로드란 중개자가 제공한 대상 리소스의 잠재적으로 수정되거나 강화된 표현이다.
3. If the response has a Content-Location header field and its field-value is a reference to the same URI as the effective request URI, the payload is a representation of the resource identified by the effective request URI.
응답에 내용 Content-Location 필드가 있고 해당 field-value이 유효한 요청 URI와 동일한 URI에 대한 참조인 경우 페이로드는 유효한 요청 URI에 의해 식별된 리소스의 표현이다.
4. If the response has a Content-Location header field and its field-value is a reference to a URI different from the effective request URI, then the sender asserts that the payload is a representation of the resource identified by the Content-Location field-value. However, such an assertion cannot be trusted unless it can be verified by other means (not defined by this specification).
응답에 내용 Content-Location 필드가 있고 해당 field-value가 유효한 요청 URI와 다른 URI에 대한 참조인 경우, 발신자는 페이로드가 Content-Location field-value로 식별된 리소스의 표현이라고 단언한다. 그러나 이러한 주장은 다른 방법으로 검증될 수 있는 경우가 아니면 신뢰할 수 없다.(이 명세에 의해 정의되지 않음)
5. Otherwise, the payload is unidentified.
그렇지 않으면 페이로드는 확인되지 않는다.
3.1.4.2 Content-Location
The "Content-Location" header field references a URI that can be used as an identifier for a specific resource corresponding to the representation in this message's payload. In other words, if one were to perform a GET request on this URI at the time of this message's generation, then a 200 (OK) response would contain the same representation that is enclosed as payload in this message.
“Content-Location” 헤더 필드는 이 메시지의 페이로드에 해당하는 특정 리소스의 식별자로 사용할 수 있는 URI를 참조한다. 즉, 이 메시지가 생성될 때 이 URI에 대해 GET 요청을 수행한다면 200 (OK) 응답은 이 메시지에 페이로드로 동봉된 동일한 표현을 포함할 것이다.
Content-Location = absolute-URI / partial-URI
The Content-Location value is not a replacement for the effective Request URI (Section 5.5 of [RFC7230]). It is representation metadata. It has the same syntax and semantics as the header field of the same name defined for MIME body parts in Section 4 of [RFC2557]. However, its appearance in an HTTP message has some special implications for HTTP recipients.
Content-Location 값은 유효한 Request URI의 대체 값이 아니다.([RFC7230]의 Section 5.5) 그것은 메타데이터를 표현한다. [RFC2557]의 Section 4에서 MIME 본문 부분에 대해 정의된 동일한 이름의 헤더 필드와 동일한 구문과 의미론을 가지고 있다. 그러나 HTTP 메시지에 나타나는 것은 HTTP 수신자에게 몇 가지 특별한 의미를 갖는다.
If Content-Location is included in a 2xx (Successful) response message and its value refers (after conversion to absolute form) to a URI that is the same as the effective request URI, then the recipient MAY consider the payload to be a current representation of that resource at the time indicated by the message origination date. For a GET (Section 4.3.1) or HEAD (Section 4.3.2) request, this is the same as the default semantics when no Content-Location is provided by the server. For a state-changing request like PUT (Section 4.3.4) or POST (Section 4.3.3), it implies that the server's response contains the new representation of that resource, thereby distinguishing it from representations that might only report about the action (e.g., "It worked!"). This allows authoring applications to update their local copies without the need for a subsequent GET request.
Content-Location이 2xx (Successful) 응답 메시지에 포함되고 그 값이 유효한 요청 URI와 동일한 URI에 대한(절대 형식으로 변환된 후)것을 가리키는 경우, 수신자는 페이로드를 메시지 작성 날짜로 표시된 시점의 해당 리소스의 현재 표시로 간주할 수 있다. GET (Section 4.3.1) 또는 HEAD (Section 4.3.2) 요청의 경우, 이것은 서버가 Content-Location을 제공하지 않을 때의 기본 의미와 동일하다. PUT (Section 4.3.4) 또는 POST (Section 4.3.3)와 같은 상태 변화 요청의 경우, 서버의 응답에 해당 리소스의 새로운 표현이 포함됨을 의미하며, 따라서 해당 동작에 대해 보고만 할 수 있는 표현(e.g., “It worked!”)과는 구별된다. 이를 통해 저작 애플리케이션은 후속 GET 요청 없이 로컬 사본을 업데이트할 수 있다.
If Content-Location is included in a 2xx (Successful) response message and its field-value refers to a URI that differs from the effective request URI, then the origin server claims that the URI is an identifier for a different resource corresponding to the enclosed representation. Such a claim can only be trusted if both identifiers share the same resource owner, which cannot be programmatically determined via HTTP.
Content-Location이 2xx (Successful) 응답 메시지에 포함되고 해당 field-value가 유효한 요청 URI와 다른 URI를 가리키는 경우, 원서버는 URI가 동봉된 표현에 해당하는 다른 리소스의 식별자라고 주장한다. 이러한 주장은 두 식별자가 동일한 리소스 소유자를 공유하는 경우에만 신뢰할 수 있으며, 이는 HTTP를 통해 프로그래밍 방식으로 결정할 수 없다.
o For a response to a GET or HEAD request, this is an indication that the effective request URI refers to a resource that is subject to content negotiation and the Content-Location field-value is a more specific identifier for the selected representation.
GET 또는 HEAD 요청에 대한 응답은 유효한 요청 URI가 콘텐츠 협상 대상인 리소스를 참조하고 Content-Location field-value는 선택된 표현에 대해 더 구체적인 식별자임을 나타낸다.
o For a 201 (Created) response to a state-changing method, a Content-Location field-value that is identical to the Location field-value indicates that this payload is a current representation of the newly created resource.
상태 변경 메서드에 대한 201(Created) 응답의 경우, Location field-value와 동일한 Content-Location field-value는 이 페이로드가 새로 생성된 리소스의 현재 표현임을 나타낸다.
o Otherwise, such a Content-Location indicates that this payload is a representation reporting on the requested action's status and that the same report is available (for future access with GET) at the given URI. For example, a purchase transaction made via a POST request might include a receipt document as the payload of the 200 (OK) response; the Content-Location field-value provides an identifier for retrieving a copy of that same receipt in the future.
그렇지 않은 경우, 이러한 Content-Location은 이 페이로드가 요청된 행동의 상태에 대한 표현을 보고하는 것을 나타내며, 주어진 URI에서 동일한 보고를 사용할 수 있음을 나타낸다.(GET을 사용한 향후 접근에) 예를 들어, POST 요청을 통해 이루어진 구매 거래는 200 (OK) 응답의 페이로드로서 영수증을 포함할 수 있다. Content-Location field-value는 미래에 동일한 영수증의 복사본을 검색하기 위한 식별자를 제공한다.
A user agent that sends Content-Location in a request message is stating that its value refers to where the user agent originally obtained the content of the enclosed representation (prior to any modifications made by that user agent). In other words, the user agent is providing a back link to the source of the original representation.
요청 메시지로 Content-Location을 전송하는 사용자 에이전트는 그 값이 원래 사용자 에이전트가 동봉된 표현의 내용을 획득한 곳을 의미한다고 말하고 있다(그 사용자 에이전트에 의해 수정된 것에 앞서). 즉, 사용자 에이전트는 원래 표현의 소스에 대한 백 링크를 제공하고 있다.
An origin server that receives a Content-Location field in a request message MUST treat the information as transitory request context rather than as metadata to be saved verbatim as part of the representation. An origin server MAY use that context to guide in processing the request or to save it for other uses, such as within source links or versioning metadata. However, an origin server MUST NOT use such context information to alter the request semantics.
요청 메시지에서 Content-Location 필드를 수신하는 원서버는 정보를 표현의 일부로 저장하기 위한 메타데이터가 아닌 임시 요청 컨텍스트로 취급해야 한다.(MUST) 원서버는 요청 처리를 안내하거나 소스 링크 또는 버전 메타데이터 내의 다른 용도로 저장하기 위해 이 컨텍스트를 사용할 수 있다.(MAY) 단, 원서버는 요청 의미를 변경하기 위해 이러한 컨텍스트 정보를 사용해서는 안 된다.(MUST NOT)
For example, if a client makes a PUT request on a negotiated resource and the origin server accepts that PUT (without redirection), then the new state of that resource is expected to be consistent with the one representation supplied in that PUT; the Content-Location cannot be used as a form of reverse content selection identifier to update only one of the negotiated representations. If the user agent had wanted the latter semantics, it would have applied the PUT directly to the Content-Location URI.
예를 들어, 클라이언트가 협상된 리소스에 대해 PUT (리디렉션 없이) 요청을 하고 원서버가 PUT 요청을 수락하는 경우, 해당 리소스의 새로운 상태는 해당 PUT에 제공된 하나의 표현과 일치할 것으로 예상된다. Content-Location은 협상된 표현 중 하나만 업데이트할 수 있는 역방향 콘텐츠 선택 식별자의 형태로 사용될 수 없다. 사용자 에이전트가 후자의 의미를 원했다면, PUT을 Content-Location URI에 직접 적용했을 것이다.
3.2 Representation Data
The representation data associated with an HTTP message is either provided as the payload body of the message or referred to by the message semantics and the effective request URI. The representation data is in a format and encoding defined by the representation metadata header fields.
HTTP 메시지와 관련된 표현 데이터는 메시지의 페이로드 본문으로 제공되거나 메시지 의미 및 유효한 요청 URI에 의해 참조된다. 표현 데이터는 표현 메타데이터 헤더 필드에서 정의한 형식과 인코딩이다.
The data type of the representation data is determined via the header fields Content-Type and Content-Encoding. These define a two-layer, ordered encoding model:
표현 데이터의 데이터 타입은 헤더 필드 Content-Type 및 Content-Encoding을 통해 결정된다. 순서가 지정된 2계층 인코딩 모델을 정의한다.
representation-data := Content-Encoding( Content-Type( bits ) )
3.3 Payload Semantics
Some HTTP messages transfer a complete or partial representation as the message "payload". In some cases, a payload might contain only the associated representation's header fields (e.g., responses to HEAD) or only some part(s) of the representation data (e.g., the 206 (Partial Content) status code).
일부 HTTP 메시지는 “payload(이하 페이로드)” 메시지로 전체 또는 부분 표현을 전송한다. 경우에 따라 페이로드에는 관련 표현의 헤더 필드(e.g., HEAD에 대한 응답) 또는 표현 데이터의 일부(e.g., 206 (Partial Content) 상태 코드)만 포함될 수 있다.
The purpose of a payload in a request is defined by the method semantics. For example, a representation in the payload of a PUT request (Section 4.3.4) represents the desired state of the target resource if the request is successfully applied, whereas a representation in the payload of a POST request (Section 4.3.3) represents information to be processed by the target resource.
요청에서 페이로드의 목적은 메서드 의미론에 의해 정의된다. 예를 들어, PUT 요청의 페이로드에 있는 표현(Section 4.3.4)은 요청이 성공적으로 적용될 경우 대상 리소스의 원하는 상태를 나타내는 반면, POST 요청의 페이로드에 있는 표현(Section 4.3.3)은 대상 리소스가 처리할 정보를 나타낸다.
In a response, the payload's purpose is defined by both the request method and the response status code. For example, the payload of a 200 (OK) response to GET (Section 4.3.1) represents the current state of the target resource, as observed at the time of the message origination date (Section 7.1.1.2), whereas the payload of the same status code in a response to POST might represent either the processing result or the new state of the target resource after applying the processing. Response messages with an error status code usually contain a payload that represents the error condition, such that it describes the error state and what next steps are suggested for resolving it.
이에 대해 페이로드의 목적은 요청 메서드와 응답 상태 코드에 의해 모두 정의된다. 예를 들어 GET(Section 4.3.1)에 대한 200(OK) 응답의 페이로드는 메시지 시작일(Section 7.1.1.2)에 관찰된 대상 리소스의 현재 상태를 나타내는 반면, POST에 대한 응답에서 동일한 상태 코드의 페이로드는 처리 결과 또는 처리 적용 후 대상 리소스의 새 상태를 나타낼 수 있다. 오류 상태 코드가 있는 응답 메시지에는 오류 상태와 오류 해결을 위해 제안되는 다음 단계를 설명하는 것과 같은 오류 조건을 나타내는 페이로드가 포함되어 있다.
Header fields that specifically describe the payload, rather than the associated representation, are referred to as "payload header fields". Payload header fields are defined in other parts of this specification, due to their impact on message parsing.
연관된 표현 보다 페이로드를 구체적으로 기술하는 헤더 필드를 “payload header fields”라고 한다. 페이로드 헤더 필드는 메시지 구문 분석에 대한 영향 때문에 이 명세의 다른 부분에 정의되어 있다.
+——————————+———————————————+
| Header Field Name | Defined in... |
+——————————+———————————————+
| Content-Length | Section 3.3.2 of [RFC7230] |
| Content-Range | Section 4.2 of [RFC7233] |
| Trailer | Section 4.4 of [RFC7230] |
| Transfer-Encoding | Section 3.3.1 of [RFC7230] |
+——————————+———————————————+
3.4 Content Negotiation
When responses convey payload information, whether indicating a success or an error, the origin server often has different ways of representing that information; for example, in different formats, languages, or encodings. Likewise, different users or user agents might have differing capabilities, characteristics, or preferences that could influence which representation, among those available, would be best to deliver. For this reason, HTTP provides mechanisms for content negotiation.
응답이 성공 여부를 나타내든 오류를 나타내든 페이로드 정보를 전달할 때, 원서버는 예를 들어 다른 형식, 언어 또는 인코딩과 같은 정보를 표시하는 다른 방법을 종종 가지고 있다. 마찬가지로, 다른 사용자나 사용자 에이전트는 사용 가능한 사람들 중에서 어떤 표현을 가장 잘 전달하는지에 영향을 미칠 수 있는 능력, 특성 또는 선호도가 다를 수 있다. 이러한 이유로, HTTP는 콘텐츠 협상의 메커니즘을 제공한다.
This specification defines two patterns of content negotiation that can be made visible within the protocol: "proactive", where the server selects the representation based upon the user agent's stated preferences, and "reactive" negotiation, where the server provides a list of representations for the user agent to choose from. Other patterns of content negotiation include "conditional content", where the representation consists of multiple parts that are selectively rendered based on user agent parameters, "active content", where the representation contains a script that makes additional (more specific) requests based on the user agent characteristics, and "Transparent Content Negotiation" ([RFC2295]), where content selection is performed by an intermediary. These patterns are not mutually exclusive, and each has trade-offs in applicability and practicality.
이 명세는 프로토콜 내에서 가시화할 수 있는 콘텐츠 협상의 2가지 패턴을 정의한다: 서버가 사용자 에이전트의 명시적 선호도에 따라 표현을 선택하는 “proactive(이하 사전)” 협상과, 서버가 사용자 에이전트가 선택할 수 있는 표현 목록을 제공하는 “reactive(이하 대응적)” 협상. 그 밖의 콘텐츠 협상 패턴으로는 사용자 에이전트 매개변수에 따라 선택적으로 렌더링되는 여러 부분으로 구성된 “conditional content”, 사용자 에이전트 특성에 따라 추가(더 구체적인) 요청을 하는 스크립트가 포함된 “active content”, “Transparent Content Negotiation” ([RFC2295]) 등이 있다. 여기서 콘텐츠 선택은 중개자가 수행한다. 이러한 패턴은 상호 배타적이지 않으며, 적용성과 실용성에서 각각 절충점을 가진다.
Note that, in all cases, HTTP is not aware of the resource semantics. The consistency with which an origin server responds to requests, over time and over the varying dimensions of content negotiation, and thus the "sameness" of a resource's observed representations over time, is determined entirely by whatever entity or algorithm selects or generates those responses. HTTP pays no attention to the man behind the curtain.
참고로, 모든 경우에서, HTTP는 리소스 의미론을 인식하지 못한다. 시간이 지남에 따라, 그리고 시간에 따라, 그리고 콘텐츠 협상의 다양한 차원에 걸쳐, 그리고 따라서 시간에 따른 리소스의 관찰된 표현의 “sameness”에 대해 원서버가 요청에 응답하는 일관성은 전적으로 어떤 항목이나 알고리즘이 그러한 응답을 선택하거나 생성하는가에 의해 결정된다. HTTP는 커튼 뒤에 있는 사람에게 관심을 두지 않는다.
3.4.1 Proactive Negotiation
When content negotiation preferences are sent by the user agent in a request to encourage an algorithm located at the server to select the preferred representation, it is called proactive negotiation (a.k.a., server-driven negotiation). Selection is based on the available representations for a response (the dimensions over which it might vary, such as language, content-coding, etc.) compared to various information supplied in the request, including both the explicit negotiation fields of Section 5.3 and implicit characteristics, such as the client's network address or parts of the User-Agent field.
서버에 위치한 알고리즘이 선호하는 표현을 선택하도록 권장하는 요청으로 사용자 에이전트에 의해 콘텐츠 협상 선호도가 전송될 때, 이를 사전 협상(예: 서버 중심 협상)이라고 한다. 선정은 Section 5.3의 명시적 협상 및 클라이언트의 네트워크 주소나 User-Agent 필드의 일부와 같은 암묵적 특성을 포함하여 요청에서 제공된 다양한 정보에 비해, 이용 가능한 표현(언어, content-coding 등 같이 달라질 수 있는 범위)에 기초한다.
Proactive negotiation is advantageous when the algorithm for selecting from among the available representations is difficult to describe to a user agent, or when the server desires to send its "best guess" to the user agent along with the first response (hoping to avoid the round trip delay of a subsequent request if the “best guess" is good enough for the user). In order to improve the server's guess, a user agent MAY send request header fields that describe its preferences.
사용 가능한 표현 중 하나를 선택하는 알고리즘이 사용자 에이전트에 설명하기 어렵거나 서버가 첫 번째 응답과 함께 사용자 에이전트에 “최상의 추측” 을 전송하고자 할 때(사용자를 위한 “최상의 추측”이 충분할 경우, 후속 요청의 왕복 지연을 피하려고 할 때) 사전 협상이 유리하다. 서버의 추측을 개선하기 위해, 사용자 에이전트는 그것의 기본 설정을 설명하는 요청 헤더 필드를 보낼 수 있다.
Proactive negotiation has serious disadvantages:
사전 협상에는 심각한 단점이 있음:
o It is impossible for the server to accurately determine what might be "best" for any given user, since that would require complete knowledge of both the capabilities of the user agent and the intended use for the response (e.g., does the user want to view it on screen or print it on paper?);
서버가 특정 사용자에게 “최적”일 수 있는 것을 정확하게 결정하는 것은 불가능하며, 그렇게 되면 사용자 에이전트의 기능과 응답에 대한 의도된 사용에 대한 완전한 지식이 필요할 것이기 때문이다(e.g., 사용자가 화면에서 보거나 종이에 인쇄하기를 원하십니까?);
o Having the user agent describe its capabilities in every request can be both very inefficient (given that only a small percentage of responses have multiple representations) and a potential risk to the user's privacy;
사용자 에이전트가 모든 요청에서 자신의 기능을 설명하도록 하는 것은 매우 비효율적일 수 있으며(응답의 극히 일부만이 복수의 표현을 가지고 있다는 점을 고려할 때) 사용자의 사생활에 대한 잠재적 위험도 있다.
o It complicates the implementation of an origin server and the algorithms for generating responses to a request; and,
원서버의 구현과 요청에 대한 응답 생성 알고리즘을 복잡하게 만들고,
o It limits the reusability of responses for shared caching.
공유 캐싱에 대한 응답의 재사용 가능성을 제한한다.
A user agent cannot rely on proactive negotiation preferences being consistently honored, since the origin server might not implement proactive negotiation for the requested resource or might decide that sending a response that doesn't conform to the user agent’s preferences is better than sending a 406 (Not Acceptable) response.
원서버가 요청된 리소스에 대해 사전 협상을 구현하지 않거나 사용자 에이전트의 기본 설정에 맞지 않는 응답을 보내는 것이 406(Not Acceptable) 응답을 보내는 것보다 낫다고 결정할 수 있으므로, 사용자 에이전트는 일관되게 준수되는 사전 협상 선호에 의존할 수 없다.
A Vary header field (Section 7.1.4) is often sent in a response subject to proactive negotiation to indicate what parts of the request information were used in the selection algorithm.
Vary 헤더 필드(Section 7.1.4)는 종종 선택 알고리즘에서 요청 정보의 어떤 부분이 사용되었는지 나타내기 위해 사전 협상의 대상이 되는 응답으로 전송된다.
3.4.2 Reactive Negotiation
With reactive negotiation (a.k.a., agent-driven negotiation), selection of the best response representation (regardless of the status code) is performed by the user agent after receiving an initial response from the origin server that contains a list of resources for alternative representations. If the user agent is not satisfied by the initial response representation, it can perform a GET request on one or more of the alternative resources, selected based on metadata included in the list, to obtain a different form of representation for that response. Selection of alternatives might be performed automatically by the user agent or manually by the user selecting from a generated (possibly hypertext) menu.
대응적 협상(a.k.a., 사용자 중심 협상)으로, 대안적 표현을 위한 리소스 목록이 포함된 원서버로부터 초기 응답을 받은 후, 사용자 에이전트에 의해 최선의 응답 표현(상태 코드에 관계 없음)선택이 수행된다. 사용자 에이전트가 초기 응답 표현에 만족하지 않을 경우 목록에 포함된 메타데이터를 기반으로 선택한, 하나 이상의 대안 리소스에 대해 GET 요청을 수행하여 해당 응답에 대한 다른 형식의 표현을 얻을 수 있다. 대안 선택 항목은 사용자 에이전트에 의해 자동으로 수행되거나 사용자가 생성된 메뉴에서(가능성인 하이퍼텍스트) 선택하여 수동으로 수행될 수 있다.
Note that the above refers to representations of the response, in general, not representations of the resource. The alternative representations are only considered representations of the target resource if the response in which those alternatives are provided has the semantics of being a representation of the target resource (e.g., a 200 (OK) response to a GET request) or has the semantics of providing links to alternative representations for the target resource (e.g., a 300 (Multiple Choices) response to a GET request).
위의 내용은 일반적으로 리소스의 표현이 아닌 응답의 표현을 참조한다. 대안적 표현은 그러한 대안이 제공되는 반응이 대상 리소스의 표현(e.g., GET 요청에 대한 200 (OK) 응답)이 되는 의미 또는 대상 리소스에 대한 대안적 표현에 대한 링크를 제공하는 의미인 경우에만 대상 리소스의 표현으로 간주된다.(e.g., GET 요청에 대한 300(Multiple Choices) 응답)
A server might choose not to send an initial representation, other than the list of alternatives, and thereby indicate that reactive negotiation by the user agent is preferred. For example, the alternatives listed in responses with the 300 (Multiple Choices) and 406 (Not Acceptable) status codes include information about the available representations so that the user or user agent can react by making a selection.
서버는 대안 목록 이외의 초기 표현을 보내지 않기로 선택할 수 있으며, 따라서 사용자 에이전트의 대응적 협상이 선호된다는 것을 나타낼 수 있다. 예를 들어 300(Multiple Choices) 및 406(Not Acceptable) 상태 코드로 응답에 나열된 대안에는 사용자 또는 사용자 에이전트가 선택함으로써 반응할 수 있도록 사용 가능한 표현에 대한 정보가 포함되어 있다.
Reactive negotiation is advantageous when the response would vary over commonly used dimensions (such as type, language, or encoding), when the origin server is unable to determine a user agent’s capabilities from examining the request, and generally when public caches are used to distribute server load and reduce network usage.
대응적 협상은 일반적으로 사용되는 차원(타입, 언어 또는 인코딩 등)에 따라 응답이 다를 때, 원서버가 요청 검토로부터 사용자 에이전트의 능력을 결정할 수 없을 때, 그리고 일반적으로 서버 부하를 분산하고 네트워크 사용을 줄이기 위해 공용 캐시를 사용할 때 유리하다.
Reactive negotiation suffers from the disadvantages of transmitting a list of alternatives to the user agent, which degrades user-perceived latency if transmitted in the header section, and needing a second request to obtain an alternate representation. Furthermore, this specification does not define a mechanism for supporting automatic selection, though it does not prevent such a mechanism from being developed as an extension.
대응적 협상은 사용자 에이전트에 대안 목록을 전송하여 헤더 부문에서 전송될 경우 사용자가 인지한 대기 시간이 저하되고, 대안 표현을 얻기 위해 두 번째 요청이 필요한 단점이 있다. 더욱이 이 명세는 그러한 메커니즘이 확장으로 개발되는 것을 방지하지는 못하지만 자동 선택을 지원하는 메커니즘을 정의하지는 않는다.
4. Request Methods
4.1 Overview
The request method token is the primary source of request semantics; it indicates the purpose for which the client has made this request and what is expected by the client as a successful result.
요청 메서드 토큰은 요청 의미론의 주 소스로서, 클라이언트가 이러한 요청을 한 목적과 성공적인 결과로 클라이언트가 기대하는 바를 나타낸다.
The request method's semantics might be further specialized by the semantics of some header fields when present in a request (Section 5) if those additional semantics do not conflict with the method. For example, a client can send conditional request header fields (Section 5.2) to make the requested action conditional on the current state of the target resource ([RFC7232]).
요청 메서드의 의미론은 요청에 일부 헤더 필드가 있을 때 (Section 5), 추가된 의미론과 메서드가 충돌되지 않는 경우 더 적합할 수 있다. 예를 들어, 클라이언트는 조건부 요청 헤더 필드(Section 5.2)를 보내 대상 리소스의 현재 상태([RFC7232])를 조건으로 요청된 작업을 수행할 수 있다.
method = token
HTTP was originally designed to be usable as an interface to distributed object systems. The request method was envisioned as applying semantics to a target resource in much the same way as invoking a defined method on an identified object would apply semantics. The method token is case-sensitive because it might be used as a gateway to object-based systems with case-sensitive method names.
HTTP는 원래 분산 객체 시스템에 대한 인터페이스로 사용할 수 있도록 설계되었다. 요청 메서드는 식별된 객체에 대해 정의된 메서드를 호출하는 것과 거의 동일한 방법으로 의미론을 대상 리소스에 적용하는 것으로 구상되었다. 메서드 토큰은 대소문자를 구분하는 메서드 이름을 가진 객체 기반 시스템의 게이트웨이로 사용될 수 있기 때문에 대소문자를 구분한다.
Unlike distributed objects, the standardized request methods in HTTP are not resource-specific, since uniform interfaces provide for better visibility and reuse in network-based systems [REST]. Once defined, a standardized method ought to have the same semantics when applied to any resource, though each resource determines for itself whether those semantics are implemented or allowed.
분산된 객체와 달리, 획일화된 인터페이스는 네트워크 기반 시스템 [REST]에서 더 나은 가시성과 재사용을 제공하므로, HTTP의 표준화된 요청 메서드는 리소스에 국한된 것이 아니다. 일단 정의되면, 표준화된 메서드는 각 리소스의 그 의미론들이 구현되거나 허용되는지 스스로 결정함에도 불구하고, 어떤 리소스에 적용될 때는 동일한 의미론들을 가져야 한다.
This specification defines a number of standardized methods that are commonly used in HTTP, as outlined by the following table. By convention, standardized methods are defined in all-uppercase US-ASCII letters.
이 명세는 다음 표에 요약된 바와 같이 HTTP에서 일반적으로 사용되는 다수의 표준화된 메서드를 정의한다. 관례에 따라 표준화된 메서드는 대문자 US-ASCII 문자로 정의된다.
+——————+—————————————————————————+————+
| Method | Description | Sec. |
+——————+—————————————————————————+————+
| GET | Transfer a current representation of the target | 4.3.1 |
| | resource. | |
| HEAD | Same as GET, but only transfer the status line | 4.3.2 |
| | and header section. | |
| POST | Perform resource-specific processing on the | 4.3.3 |
| | request payload. | |
| PUT | Replace all current representations of the | 4.3.4 |
| | target resource with the request payload. | |
| DELETE | Remove all current representations of the | 4.3.5 |
| | target resource. | |
| CONNECT | Establish a tunnel to the server identified by | 4.3.6 |
| | the target resource. | |
| OPTIONS | Describe the communication options for the | 4.3.7 |
| | target resource. | |
| TRACE | Perform a message loop-back test along the | 4.3.8 |
| | path to the target resource. | |
+——————+—————————————————————————+————+
+——————+—————————————————————————+————+
| Method | Description | Sec. |
+——————+—————————————————————————+————+
| GET | 대상 리소스의 현재 표현 전송 | 4.3.1 |
| HEAD | GET과 동일하나, status-line과 header부문만 전송| 4.3.2 |
| POST | 요청 페이로드에서 리소스의 구체적인 처리 수행 | 4.3.3 |
| PUT | 대상 리소스의 모든 현재 표현을 요청 페이로드로 | 4.3.4 |
| | 대체 | |
| DELETE | 대상 리소스의 현재 표현을 모두 제거 | 4.3.5 |
| CONNECT | 대상 리소스로 식별된 서버에 대한 터널 설립 | 4.3.6 |
| OPTIONS | 대상 리소스에 대한 통신 옵션 설명 | 4.3.7 |
| TRACE | 대상 리소스의 경로를 따라 메시지 루프백 | 4.3.8 |
| | 테스트를 수행 | |
+——————+—————————————————————————+————+
All general-purpose servers MUST support the methods GET and HEAD. All other methods are OPTIONAL.
모든 범용 서버는 GET 및 HEAD 메서드를 지원해야 한다. 다른 모든 메서드는 선택사항이다. (OPTIONAL)
Additional methods, outside the scope of this specification, have been standardized for use in HTTP. All such methods ought to be registered within the "Hypertext Transfer Protocol (HTTP) Method Registry" maintained by IANA, as defined in Section 8.1.
이 명세를 범위를 벗어난 추가 메서드는, HTTP에서 사용할 수 있도록 표준화되었다. 이러한 모든 메서드는 Section 8.1에 정의된 바와 같이 IANA에 의해 유지되는 “Hypertext Transfer Protocol (HTTP) Method Registry” 내에 등록되어야 한다.
The set of methods allowed by a target resource can be listed in an Allow header field (Section 7.4.1). However, the set of allowed methods can change dynamically. When a request method is received that is unrecognized or not implemented by an origin server, the origin server SHOULD respond with the 501 (Not Implemented) status code. When a request method is received that is known by an origin server but not allowed for the target resource, the origin server SHOULD respond with the 405 (Method Not Allowed) status code.
대상 리소스가 허용하는 메서드 집합은 Allow 헤더 필드(Section 7.4.1)에 나열할 수 있다. 그러나 허용된 메서드 집합은 동적으로 변할 수 있다. 원서버에서 인식되지 않거나 구현되지 않은 요청 메서드가 수신되면 원서버는 501(Not Implemented) 상태 코드로 응답해야 한다.(SHOULD) 원서버에서 알 수 있지만 대상 리소스에 대해 허용되지 않는 요청 메서드를 수신할 경우 원서버는 405(Method Not Allowed) 상태 코드로 응답해야 한다.(SHOULD)
4.2 Common Method Properties
4.2.1 Safe Methods
Request methods are considered "safe" if their defined semantics are essentially read-only; i.e., the client does not request, and does not expect, any state change on the origin server as a result of applying a safe method to a target resource. Likewise, reasonable use of a safe method is not expected to cause any harm, loss of property, or unusual burden on the origin server.
요청 메서드는 정의된 의미론이 본질적으로 읽기 전용인 경우, 즉 클라이언트가 대상 리소스에 안전한 메서드를 적용한 결과 원서버의 상태 변경을 요청하지 않고 예상하지 않는 경우 “safe”로 간주된다. 마찬가지로, 안전한 메서드의 합리적인 사용은 원서버에 어떠한 위해, 재산의 손실 또는 비정상적인 부담을 야기하지 않을 것으로 예상된다.
This definition of safe methods does not prevent an implementation from including behavior that is potentially harmful, that is not entirely read-only, or that causes side effects while invoking a safe method. What is important, however, is that the client did not request that additional behavior and cannot be held accountable for it. For example, most servers append request information to access log files at the completion of every response, regardless of the method, and that is considered safe even though the log storage might become full and crash the server. Likewise, a safe request initiated by selecting an advertisement on the Web will often have the side effect of charging an advertising account.
이러한 안전한 메서드의 정의는 잠재적으로 유해하거나, 완전히 읽기 전용이 아니거나, 안전한 메서드를 호출하는 동안 부작용을 일으키는 행동을 구현에 포함시키는 것을 막지 않는다. 그러나 중요한 것은 클라이언트가 추가 행동을 요구하지 않았고 이에 대한 책임을 물을 수 없다는 것이다. 예를 들어, 대부분의 서버는 메서드에 관계없이 모든 응답이 완료될 때 로그 파일에 액세스하기 위해 요청 정보를 추가하며, 로그 저장소가 가득 차서 서버가 다운될 수 있더라도 안전하다고 간주된다. 마찬가지로, 웹에서 광고를 선택하여 시작된 안전한 요청은 종종 광고 계정에 요금을 청구하는 부작용을 낳을 것이다.
Of the request methods defined by this specification, the GET, HEAD, OPTIONS, and TRACE methods are defined to be safe.
이 명세에 의해 정의된 요청 메서드 중 GET, HEAD, OPTION 및 TRACE 메서드는 안전하다고 정의된다.
The purpose of distinguishing between safe and unsafe methods is to allow automated retrieval processes (spiders) and cache performance optimization (pre-fetching) to work without fear of causing harm. In addition, it allows a user agent to apply appropriate constraints on the automated use of unsafe methods when processing potentially untrusted content.
안전한 메서드와 안전하지 않은 메서드를 구분하는 목적은 자동 검색 프로세스(spider)와 캐시 성능 최적화(pre-fetching)가 위해를 일으킬 염려 없이 작동할 수 있도록 하기 위함이다. 또한 잠재적으로 신뢰할 수 없는 콘텐츠를 처리할 때 안전하지 않은 메서드의 자동 사용에 대해 사용자 에이전트가 적절한 제약조건을 적용할 수 있도록 한다.
A user agent SHOULD distinguish between safe and unsafe methods when presenting potential actions to a user, such that the user can be made aware of an unsafe action before it is requested.
사용자 에이전트는 사용자에게 잠재적 조치를 제시할 때 사용자가 요청하기 전에 안전하지 않은 메서드를 인지할 수 있도록 안전한 메서드와 안전하지 않은 메서드를 구분해야 한다.(SHOULD)
When a resource is constructed such that parameters within the effective request URI have the effect of selecting an action, it is the resource owner's responsibility to ensure that the action is consistent with the request method semantics. For example, it is common for Web-based content editing software to use actions within query parameters, such as "page?do=delete". If the purpose of such a resource is to perform an unsafe action, then the resource owner MUST disable or disallow that action when it is accessed using a safe request method. Failure to do so will result in unfortunate side effects when automated processes perform a GET on every URI reference for the sake of link maintenance, pre-fetching, building a search index, etc.
유효한 요청 URI 내의 매개변수가 조치 선택의 영향을 미치도록 리소스를 구성할 때, 조치가 요청 메서드의 의미와 일치하는지 확인하는 것은 리소스 소유자의 책임이다. 예를 들어 웹 기반 콘텐츠 편집 소프트웨어는 “page?do=delete”와 같은 쿼리 매개변수 내의 작업을 사용하는 것이 일반적이다. 이러한 리소스의 목적이 안전하지 않은 작업을 수행하는 것이라면, 리소스 소유자는 안전한 요청 메서드를 사용하여 액세스할 때 해당 작업을 비활성화하거나 허용하지 않아야 한다.(MUST) 그렇게 하지 않으면 자동화된 프로세스가 링크 유지보수, pre-fetching, 검색 인덱스 작성 등을 위해 모든 URI 참조에 대해 GET을 수행할 때 적절하지 못한 부작용을 초래할 수 있다.
4.2.2 Idempotent Methods
A request method is considered "idempotent" if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request. Of the request methods defined by this specification, PUT, DELETE, and safe request methods are idempotent.
요청 메서드는 해당 메서드와의 복수의 동일한 요청의 서버에 대한 의도된 효과가 단일 요청의 효과와 동일한 경우, “idempotent”으로 간주된다. 이 명세에 의해 정의된 요청 메서드 중 PUT, DELETE 및 안전 요청 메서드는 멱등하다.
Like the definition of safe, the idempotent property only applies to what has been requested by the user; a server is free to log each request separately, retain a revision control history, or implement other non-idempotent side effects for each idempotent request.
안전함의 정의와 마찬가지로, 멱등의 속성은 사용자가 요청한 것에만 적용된다. 서버는 각 요청을 별도로 기록하거나, 개정된 통제 기록을 보유하거나, 각각 멱등 요청을 위해 다른 비-멱등 부작용을 구현하는 것에 자유롭다.
Idempotent methods are distinguished because the request can be repeated automatically if a communication failure occurs before the client is able to read the server's response. For example, if a client sends a PUT request and the underlying connection is closed before any response is received, then the client can establish a new connection and retry the idempotent request. It knows that repeating the request will have the same intended effect, even if the original request succeeded, though the response might differ.
멱등 메서드는 클라이언트가 서버의 응답을 읽기 전에 통신 장애가 발생하면 요청이 자동으로 반복될 수 있기 때문에 구별된다. 예를 들어 클라이언트가 PUT 요청을 보내고 응답이 수신되기 전에 기본 커넥션이 닫히면 클라이언트는 새로운 커넥션을 설정하고 멱등한 요청을 재시도할 수 있다. 응답은 다를 수 있지만, 당초의 요청이 성공했더라도, 요청을 반복하는 것은 의도된 것과 같은 효과를 낼 것이라는 것을 알고 있다.
4.2.3 Cacheable Methods
Request methods can be defined as "cacheable" to indicate that responses to them are allowed to be stored for future reuse; for specific requirements see [RFC7234]. In general, safe methods that do not depend on a current or authoritative response are defined as cacheable; this specification defines GET, HEAD, and POST as cacheable, although the overwhelming majority of cache implementations only support GET and HEAD.
요청 메서드는 “cacheable”으로 정의하여 향후 재사용에 대한 응답을 저장할 수 있음을 나타낼 수 있다. 구체적인 요건은 [RFC7234]를 참조한다. 일반적으로 현재 또는 권한 있는 응답에 의존하지 않는 안전한 메서드는 캐시 가능으로 정의된다. 이 규격은 GET, HEAD 및 POST를 캐시 가능으로 정의하지만, 압도적으로 과반수의 캐시 구현은 GET와 HEAD만 지원한다.
4.3 Method Definitions
4.3.1 GET
The GET method requests transfer of a current selected representation for the target resource. GET is the primary mechanism of information retrieval and the focus of almost all performance optimizations. Hence, when people speak of retrieving some identifiable information via HTTP, they are generally referring to making a GET request.
GET 메서드는 대상 리소스에 대해 현재 선택된 표현의 전송을 요청한다. GET는 정보 검색의 주요 메커니즘이자 거의 모든 성능 최적화의 초점이다. 따라서, 사람들이 HTTP를 통해 식별 가능한 정보를 검색하는 것에 대해 말할 때, 그들은 일반적으로 GET 요청을 하는 것을 말한다.
It is tempting to think of resource identifiers as remote file system pathnames and of representations as being a copy of the contents of such files. In fact, that is how many resources are implemented (see Section 9.1 for related security considerations). However, there are no such limitations in practice. The HTTP interface for a resource is just as likely to be implemented as a tree of content objects, a programmatic view on various database records, or a gateway to other information systems. Even when the URI mapping mechanism is tied to a file system, an origin server might be configured to execute the files with the request as input and send the output as the representation rather than transfer the files directly. Regardless, only the origin server needs to know how each of its resource identifiers corresponds to an implementation and how each implementation manages to select and send a current representation of the target resource in a response to GET.
리소스 식별자를 원격 파일 시스템 경로 이름으로, 그리고 그러한 파일의 내용을 복사한 것으로 생각하는 것이 매력적이다. 실제, 얼마나 많이 구현되는 리소스의 수(관련 보안 고려사항은 Section 9.1 참조). 하지만 실제론 그런 한계가 없다. 리소스를 위한 HTTP 인터페이스는, 콘텐츠 객체의 트리, 다양한 데이터베이스 레코드에 대한 프로그램 뷰 또는 다른 정보 시스템으로의 게이트웨이처럼 구현될 가능성이 높다. URI 매핑 메커니즘이 파일 시스템에 연결되어 있는 경우에도 원서버는 요청으로 파일을 입력으로 실행하고 파일을 직접 전송하지 않고 출력물을 표현으로 전송하도록 구성할 수 있다. 그럼에도 불구하고, 원서버만이 각각의 리소스 식별자가 구현에 어떻게 대응하는지, 그리고 GET에 대한 응답으로 대상 리소스의 현재 표현을 어떻게 선택하고 전송하는지를 알 필요가 있다.
A client can alter the semantics of GET to be a "range request”, requesting transfer of only some part(s) of the selected representation, by sending a Range header field in the request ([RFC7233]).
클라이언트는 요청 ([RFC7233]) 에서 Range 헤더 필드를 전송하여 선택된 표현의 일부만 전송을 요청하는 GET의 의미를 “range request”로 변경할 수 있다.
A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.
GET 요청 메시지 내의 페이로드는 의미론을 정의하지 않는다; GET 요청으로 페이로드 본체를 전송하면 일부 기존 구현이 요청을 거부할 수 있다.
The response to a GET request is cacheable; a cache MAY use it to satisfy subsequent GET and HEAD requests unless otherwise indicated by the Cache-Control header field (Section 5.2 of [RFC7234]).
GET 요청에 대한 응답은 캐시가 가능하며, 캐시는 Cache-Control 헤더 필드에 달리 표시되지 않는 한 후속 GET 및 HEAD 요청을 충족하기 위해 캐시를 사용할 수 있다.(MAY) ([RFC7234]의 Section 5.2).
4.3.2 HEAD
The HEAD method is identical to GET except that the server MUST NOT send a message body in the response (i.e., the response terminates at the end of the header section). The server SHOULD send the same header fields in response to a HEAD request as it would have sent if the request had been a GET, except that the payload header fields (Section 3.3) MAY be omitted. This method can be used for obtaining metadata about the selected representation without transferring the representation data and is often used for testing hypertext links for validity, accessibility, and recent modification.
HEAD 메서드는 GET과 동일하지만, 서버가 응답에서 메시지 본문을 전송하지 않아야 한다. (MUST NOT) (즉, 헤더 부문의 끝에서 응답이 종료됨) 페이로드 헤더 필드(Section 3.3)를 생략할 수 있다는 점을 제외하고(MAY), 서버는 HEAD 요청에 응답하여 GET 요청과 동일한 헤더 필드를 전송해야 한다.(SHOULD) 이 메서드는 표현 데이터를 전송하지 않고 선택된 표현에 대한 메타데이터를 얻는 데 사용할 수 있으며 유효성, 접근성 및 최근 수정을 위한 하이퍼텍스트 링크 테스트에 종종 사용된다.
A payload within a HEAD request message has no defined semantics; sending a payload body on a HEAD request might cause some existing implementations to reject the request.
HEAD 요청 메시지 내의 페이로드는 의미론을 정의하지 않는다; HEAD 요청에 페이로드 본체를 전송하면 일부 기존 구현이 요청을 거부할 수 있다.
The response to a HEAD request is cacheable; a cache MAY use it to satisfy subsequent HEAD requests unless otherwise indicated by the Cache-Control header field (Section 5.2 of [RFC7234]). A HEAD response might also have an effect on previously cached responses to GET; see Section 4.3.5 of [RFC7234].
HEAD 요청에 대한 응답은 캐시가 가능하며, 캐시는 Cache-Control 헤더 필드에 달리 표시되지 않는 한 후속 HEAD 요청을 만족시키기 위해 캐시를 사용할 수 있다.(MAY) ([RFC7234]의 Section 5.2). HEAD 응답은 GET에 대한 이전에 캐시된 응답에도 영향을 미칠 수 있다. [RFC7234]의 Section 4.3.5를 참조한다.
4.3.3 POST
The POST method requests that the target resource process the representation enclosed in the request according to the resource’s own specific semantics. For example, POST is used for the following functions (among others):
POST 메서드는 대상 리소스 요청에 동봉된 표현을 리소스 자체의 특정 의미에 따라 처리하도록 요청한다. 예를 들어, POST는 다음 기능(다른 기능 중)에 사용된다.
o Providing a block of data, such as the fields entered into an HTML form, to a data-handling process;
HTML 양식에 입력된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공;
o Posting a message to a bulletin board, newsgroup, mailing list, blog, or similar group of articles;
게시판, 뉴스 그룹, 메일 목록, 블로그 또는 유사한 기사 그룹에 메시지 게시;
o Creating a new resource that has yet to be identified by the origin server; and
원서버에서 아직 식별되지 않은 새 리소스 생성; 및
o Appending data to a resource's existing representation(s).
리소스의 기존 표현에 데이터 추가
An origin server indicates response semantics by choosing an appropriate status code depending on the result of processing the POST request; almost all of the status codes defined by this specification might be received in a response to POST (the exceptions being 206 (Partial Content), 304 (Not Modified), and 416 (Range Not Satisfiable)).
원서버는 POST 요청 처리 결과에 따라 적절한 상태 코드를 선택하여 응답 의미론을 표시하며, 이 규격에 의해 정의된 상태 코드는 거의 모두 POST(206(Partial Content), 304(Not Modified), 416(Range Not Satisfiable)에 대한 응답으로 수신될 수 있다.
If one or more resources has been created on the origin server as a result of successfully processing a POST request, the origin server SHOULD send a 201 (Created) response containing a Location header field that provides an identifier for the primary resource created (Section 7.1.2) and a representation that describes the status of the request while referring to the new resource(s).
POST 요청을 성공적으로 처리한 결과로써 하나 이상의 리소스가 원서버에 생성된 경우, 원서버는 새로운 리소스를 참조하는 동안 생성된 기본 리소스의 식별자를 제공하는 Location 헤더 필드(Section 7.1.2)를 포함하는 201(Created)응답과 요청의 상태를 설명하는 표현을 전송해야 한다.(SHOULD)
Responses to POST requests are only cacheable when they include explicit freshness information (see Section 4.2.1 of [RFC7234]). However, POST caching is not widely implemented. For cases where an origin server wishes the client to be able to cache the result of a POST in a way that can be reused by a later GET, the origin server MAY send a 200 (OK) response containing the result and a Content-Location header field that has the same value as the POST’s effective request URI (Section 3.1.4.2).
POST 요청에 대한 응답은 명시적인 신선도 정보를 포함하는 경우에만 캐시할 수 있다([RFC7234]의 Section 4.2.1 참조). 그러나 POST 캐싱은 널리 구현되지 않는다. 원서버가 이후의 GET에 의해 재사용될 수 있는 방법으로 클라이언트가 POST의 결과를 캐시할 수 있기를 원하는 경우, 원서버는 결과를 포함하는 200 (OK) 응답과 POST의 유효한 요청 URI(Section 3.1.4.2)와 동일한 값을 갖는 Content-Location 헤더 필드를 전송할 것이다.(MAY)
If the result of processing a POST would be equivalent to a representation of an existing resource, an origin server MAY redirect the user agent to that resource by sending a 303 (See Other) response with the existing resource's identifier in the Location field. This has the benefits of providing the user agent a resource identifier and transferring the representation via a method more amenable to shared caching, though at the cost of an extra request if the user agent does not already have the representation cached.
POST 처리 결과가 기존 리소스의 표현과 같을 경우, 원서버는 Location 필드에 있는 기존 리소스 식별자와 함께 303 (See Other) 응답을 전송하여 사용자 에이전트를 해당 리소스로 리다이렉트 할 수 있다.(MAY) 이는 사용자 에이전트가 이미 캐시된 표현을 가지고 있지 않은 경우, 추가 요청의 비용으로 사용자 에이전트에 리소스 식별자를 제공하고, 공유 캐싱에 더 적합한 메서드를 통해 표현을 전송할 수 있는 이점이 있다.
4.3.4 PUT
The PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload. A successful PUT of a given representation would suggest that a subsequent GET on that same target resource will result in an equivalent representation being sent in a 200 (OK) response. However, there is no guarantee that such a state change will be observable, since the target resource might be acted upon by other user agents in parallel, or might be subject to dynamic processing by the origin server, before any subsequent GET is received. A successful response only implies that the user agent's intent was achieved at the time of its processing by the origin server.
PUT 메서드는 대상 리소스의 상태를 생성하거나 요청 메시지 페이로드에 동봉된 표현에 의해 정의된 상태로 대체할 것을 요청한다. 주어진 표현이 성공적인 PUT 이면 동일한 대상 리소스에 대한 후속 GET이 200 (OK) 응답으로 동등한 표현을 전송하게 된다는 것을 암시할 수 있다. 그러나 대상 리소스가 다른 사용자 에이전트에 의해 병렬로 작용하거나, 후속 GET이 수신되기 전에 원서버에 의해 동적 처리될 수 있기 때문에 이러한 상태 변화를 관찰할 수 있다는 보장은 없다. 성공적인 응답은 사용자 에이전트의 의도가 원서버에 의해 처리되는 시점에 달성되었음을 의미할 뿐이다.
If the target resource does not have a current representation and the PUT successfully creates one, then the origin server MUST inform the user agent by sending a 201 (Created) response. If the target resource does have a current representation and that representation is successfully modified in accordance with the state of the enclosed representation, then the origin server MUST send either a 200 (OK) or a 204 (No Content) response to indicate successful completion of the request.
대상 리소스가 현재 표현을 가지고 있지 않고 PUT이 성공적으로 생성한다면, 원서버는 201 (Created) 응답을 전송하여 사용자 에이전트에게 알려야 한다.(MUST) 대상 리소스가 현재 표현을 가지고 있고 그 표현이 동봉된 표현 상태에 따라서 성공적으로 수정되는 경우, 원서버는 요청의 성공적인 완료를 나타내기 위해 200 (OK) 또는 204 (No Content) 응답을 보내야 한다.(MUST)
An origin server SHOULD ignore unrecognized header fields received in a PUT request (i.e., do not save them as part of the resource state).
원서버는 PUT 요청으로 인식되지 않는 수신된 헤더 필드를 무시해야 한다.(SHOULD) (i.e., 그것들을 리소스 상태의 일부로 저장하지 마라).
An origin server SHOULD verify that the PUT representation is consistent with any constraints the server has for the target resource that cannot or will not be changed by the PUT. This is particularly important when the origin server uses internal configuration information related to the URI in order to set the values for representation metadata on GET responses. When a PUT representation is inconsistent with the target resource, the origin server SHOULD either make them consistent, by transforming the representation or changing the resource configuration, or respond with an appropriate error message containing sufficient information to explain why the representation is unsuitable. The 409 (Conflict) or 415 (Unsupported Media Type) status codes are suggested, with the latter being specific to constraints on Content-Type values.
원서버는 PUT 표현이 PUT에 의해 변경할 수 없거나 변경할 수 없는 대상 리소스를 위해 서버가 가지는 제약조건과 일치하는지 확인해야 한다.(SHOULD) 이는 GET 응답에 대한 표현 메타데이터 값을 설정하기 위해 원서버가 URI와 관련된 내부 구성 정보를 사용하는 경우에 특히 중요하다. PUT 표현이 대상 리소스와 일치하지 않을 경우, 원서버는 표현을 변환하거나 리소스 구성을 변경하여 일관성을 유지하거나, 표현이 적합하지 않은 이유를 설명하기 위해 충분한 정보를 포함하는 적절한 오류 메시지로 대응해야 한다. 409 (Conflict) 또는 415 (Unsupported Media Type) 상태 코드가 제안되며, 후자는 Content-Type 값에 대한 제약 조건에 한정된다.
For example, if the target resource is configured to always have a Content-Type of "text/html" and the representation being PUT has a Content-Type of "image/jpeg", the origin server ought to do one of:
예를 들어, 대상 리소스가 항상 “text/html”의 Content-Type을 가지도록 구성되고 PUT 표현이 “image/jpeg”의 Content-Type을 가지도록 구성된 경우, 원서버는 다음 중 하나를 수행해야 한다.
a. reconfigure the target resource to reflect the new media type;
a. 새로운 미디어 타입을 반영하도록 대상 리소스를 재구성한다.
b. transform the PUT representation to a format consistent with that of the resource before saving it as the new resource state; or,
b. PUT 표현을 새 리소스 상태로 저장하기 전에 리소스의 표현과 일치하는 형식으로 변환하거나,
c. reject the request with a 415 (Unsupported Media Type) response indicating that the target resource is limited to “text/html", perhaps including a link to a different resource that would be a suitable target for the new representation.
c. 대상 리소스가 “text/html”로 제한됨을 나타내는 415(Unsupported Media Type) 응답으로 요청을 거부하며, 새 표현에 적합한 대상이 될 수 있는 다른 리소스에 대한 링크를 포함할 수 있다.
HTTP does not define exactly how a PUT method affects the state of an origin server beyond what can be expressed by the intent of the user agent request and the semantics of the origin server response. It does not define what a resource might be, in any sense of that word, beyond the interface provided via HTTP. It does not define how resource state is "stored", nor how such storage might change as a result of a change in resource state, nor how the origin server translates resource state into representations. Generally speaking, all implementation details behind the resource interface are intentionally hidden by the server.
HTTP는 사용자 에이전트 요청의 의도와 원서버 응답의 의미에 의해 표현될 수 있는 것을 넘어 PUT 메서드가 원서버의 상태에 어떻게 영향을 미치는지 정확히 정의하지 않는다. 어떤 의미에서도 HTTP를 통해 제공되는 인터페이스를 넘어 리소스가 무엇인지 정의하지 않는다. 그것은 리소스 상태가 “저장된” 방식이나, 리소스 상태의 변경으로 인해 그러한 저장소가 어떻게 변경될 수 있는지, 또한 원서버가 리소스 상태를 표현으로 변환하는 방법을 정의하지 않는다. 일반적으로 리소스 인터페이스 뒤에 있는 모든 구현 세부사항은 서버에 의해 의도적으로 숨겨진다.
An origin server MUST NOT send a validator header field (Section 7.2), such as an ETag or Last-Modified field, in a successful response to PUT unless the request's representation data was saved without any transformation applied to the body (i.e., the resource's new representation data is identical to the representation data received in the PUT request) and the validator field value reflects the new representation. This requirement allows a user agent to know when the representation body it has in memory remains current as a result of the PUT, thus not in need of being retrieved again from the origin server, and that the new validator(s) received in the response can be used for future conditional requests in order to prevent accidental overwrites (Section 5.2).
원서버는 요청의 표현 데이터가 본문에 적용된 변환 없이 저장되고(i.e., 리소스의 새로운 표현 데이터가 PUT 요청에서 수신된 표현 데이터와 동일한 경우) 검증자 필드 값이 새로운 표현을 반영하지 않는 한, PUT에 대한 성공적인 응답으로 ETag 또는 Last-Modified 필드 같은 검증자 헤더 필드(Section 7.2)를 전송해서는 안 된다.(MUST NOT) 이 요구사항은 사용자 에이전트가 PUT의 결과로 메모리에 있는 표현 본문이 최신 상태로 유지되는 시기를 알 수 있도록 허용하며, 따라서 원서버에서 다시 검색할 필요가 없으며, 응답에 수신된 새 검증자를 우발적인 덮어쓰기를 방지하기 위해 향후 조건부 요청에 사용될 수 있다(Section 5.2).
The fundamental difference between the POST and PUT methods is highlighted by the different intent for the enclosed representation. The target resource in a POST request is intended to handle the enclosed representation according to the resource's own semantics, whereas the enclosed representation in a PUT request is defined as replacing the state of the target resource. Hence, the intent of PUT is idempotent and visible to intermediaries, even though the exact effect is only known by the origin server.
POST 메서드와 PUT 메서드의 근본적인 차이는 동봉된 표현에 대한 다른 의도에 의해 강조된다. POST 요청의 대상 리소스는 리소스 자체의 의미에 따라 동봉된 표현을 처리하기 위한 것이며, PUT 요청의 동봉된 표현은 대상 리소스의 상태를 대체하는 것으로 정의된다. 따라서 PUT의 의도는 멱등하며, 정확한 효과는 원서버에 의해서만 알려져 있음에도 불구하고 중개자에게 보여진다.
Proper interpretation of a PUT request presumes that the user agent knows which target resource is desired. A service that selects a proper URI on behalf of the client, after receiving a state-changing request, SHOULD be implemented using the POST method rather than PUT. If the origin server will not make the requested PUT state change to the target resource and instead wishes to have it applied to a different resource, such as when the resource has been moved to a different URI, then the origin server MUST send an appropriate 3xx (Redirection) response; the user agent MAY then make its own decision regarding whether or not to redirect the request.
PUT 요청에 대한 적절한 해석은 사용자 에이전트가 원하는 대상 리소스를 알고 있다고 가정한다. 클라이언트 대신 적절한 URI를 선택하는 서비스는, 상태 변경 요청을 받은 후, PUT이 아닌 POST 메서드를 사용해 실시해야 한다.(SHOULD) 원서버는 요청된 PUT 상태를 대상 리소스로 변경하지 않고, 리소스를 다른 URI로 이동한 경우와 같이 다른 리소스에 적용하려면, 원서버가 적절한 3xx(Redirection) 응답을 보내야 한다.(MUST) 사용자 에이전트는 요청을 리다이렉트 할지 여부에 대해 자체 결정을 내릴 수 있다.(MAY)
A PUT request applied to the target resource can have side effects on other resources. For example, an article might have a URI for identifying "the current version" (a resource) that is separate from the URIs identifying each particular version (different resources that at one point shared the same state as the current version resource). A successful PUT request on "the current version" URI might therefore create a new version resource in addition to changing the state of the target resource, and might also cause links to be added between the related resources.
대상 리소스에 적용되는 PUT 요청은 다른 리소스에 부작용을 일으킬 수 있다. 예를 들어, 신문 기사에서 각 특정 버전(한 지점에서 현재 버전 리소스와 동일한 상태를 공유하는 서로 다른 리소스)을 식별하는 URI와는 별개의 “현재 버전”(리소스)을 식별하기 위한 URI가 있을 수 있다. 따라서 “현재 버전” URI의 PUT 요청이 성공하면 대상 리소스의 상태를 변경하는 것 외에 새 버전 리소스가 생성될 수 있으며 관련 리소스 간에 링크가 추가될 수도 있다.
An origin server that allows PUT on a given target resource MUST send a 400 (Bad Request) response to a PUT request that contains a Content-Range header field (Section 4.2 of [RFC7233]), since the payload is likely to be partial content that has been mistakenly PUT as a full representation. Partial content updates are possible by targeting a separately identified resource with state that overlaps a portion of the larger resource, or by using a different method that has been specifically defined for partial updates (for example, the PATCH method defined in [RFC5789]).
특정 대상 리소스에 PUT를 허용하는 원서버는, PUT이 전체 표현으로서 잘못 표현된 부분 콘텐츠일 가능성이 있으므로 Content-Range 헤더 필드([RFC7233] Section 4.2)를 포함하는 PUT 요청에 400 (Bad Request) 응답을 보내야 한다.(MUST) 부분 콘텐츠 업데이트는 큰 리소스의 일부와 겹치는 상태를 가진 별도로 식별된 리소스를 대상으로 하거나, 부분 업데이트에 대해 특별히 정의된 다른 메서드(예, [RFC5789]에서 정의한 PATCH 메서드)를 사용하여 가능하다.
Responses to the PUT method are not cacheable. If a successful PUT request passes through a cache that has one or more stored responses for the effective request URI, those stored responses will be invalidated (see Section 4.4 of [RFC7234]).
PUT 메서드에 대한 응답은 캐시할 수 없다. 성공적인 PUT 요청이 유효한 요청 URI에 대한 하나 이상의 저장된 응답이 있는 캐시를 통과하면 저장된 응답은 무효화된다([RFC7234]의 Section 4.4 참조).
4.3.5 DELETE
The DELETE method requests that the origin server remove the association between the target resource and its current functionality. In effect, this method is similar to the rm command in UNIX: it expresses a deletion operation on the URI mapping of the origin server rather than an expectation that the previously associated information be deleted.
DELETE 메서드는 원서버가 대상 리소스와 대상 리소스의 현재의 상관 관계를 제거하도록 요청한다. 사실상, 이 메서드는 UNIX의 rm 명령과 유사하다: 이것은 이전에 연관된 정보가 삭제될 것이라는 기대보다는 원서버의 URI 매핑에 대한 삭제 작업을 표현한다.
If the target resource has one or more current representations, they might or might not be destroyed by the origin server, and the associated storage might or might not be reclaimed, depending entirely on the nature of the resource and its implementation by the origin server (which are beyond the scope of this specification). Likewise, other implementation aspects of a resource might need to be deactivated or archived as a result of a DELETE, such as database or gateway connections. In general, it is assumed that the origin server will only allow DELETE on resources for which it has a prescribed mechanism for accomplishing the deletion.
대상 리소스가 하나 이상의 현재 표현을 가지고 있는 경우, 대상 리소스가 원서버에 의해 파괴되거나 파괴되지 않을 수 있으며, 관련 저장소는 리소스의 특성과 원서버에 의한 구현(이 명세의 범위를 벗어난)에 따라 회수되거나 회수되지 않을 수 있다. 마찬가지로, 리소스의 다른 구현 측면도 데이터베이스나 게이트웨이 커넥션과 같은 DELETE의 결과로 비활성화하거나 아카이빙해야 할 수 있다. 일반적으로, 원서버는 삭제를 완료하기 위해 규정된 메커니즘을 가지고 있는 리소스에 대해서만 DELETE를 허용할 것으로 가정한다.
Relatively few resources allow the DELETE method -- its primary use is for remote authoring environments, where the user has some direction regarding its effect. For example, a resource that was previously created using a PUT request, or identified via the Location header field after a 201 (Created) response to a POST request, might allow a corresponding DELETE request to undo those actions. Similarly, custom user agent implementations that implement an authoring function, such as revision control clients using HTTP for remote operations, might use DELETE based on an assumption that the server's URI space has been crafted to correspond to a version repository.
비교적 적은 리소스로 DELETE 메서드를 사용할 수 있다. 이 메서드는 주로 사용자가 삭제효과에 대한 방향을 가지고 있는 원격 저작 환경에 사용된다. 예를 들어 PUT 요청을 사용하여 이전에 생성했거나 POST 요청에 대한 201 (Created) 응답 후 Location 헤더 필드를 통해 식별된 리소스는 해당 DELETE 요청을 허용하여 해당 작업을 실행 취소할 수 있다. 유사하게, 원격 작업에 HTTP를 사용하는 개정 제어 클라이언트와 같은 저작 기능을 구현하는 사용자 정의 에이전트 구현에서는 서버의 URI 공간이 버전 저장소와 일치하도록 만들어진 가정에 기반하여 DELETE를 사용할 수 있다.
If a DELETE method is successfully applied, the origin server SHOULD send a 202 (Accepted) status code if the action will likely succeed but has not yet been enacted, a 204 (No Content) status code if the action has been enacted and no further information is to be supplied, or a 200 (OK) status code if the action has been enacted and the response message includes a representation describing the status.
DELETE 메서드가 성공적으로 적용된 경우, 원서버는 조치가 성공할 가능성이 있지만 아직 제정되지 않은 경우 202 (Accepted) 상태 코드를 전송하거나, 조치가 제정되어 추가 정보가 제공되지 않은 경우 204 (No Content) 상태 코드를 전송하거나, 조치가 제정된 경우 200 (OK) 상태 코드를 전송해야 하며. 상태를 설명하는 표현을 포함하는 응답 메세지를 전송해야 한다.(SHOULD)
A payload within a DELETE request message has no defined semantics; sending a payload body on a DELETE request might cause some existing implementations to reject the request.
DELETE 요청 메시지 내의 페이로드에는 정의된 의미가 없으며, DELETE 요청에 따라 페이로드 본문을 전송하면 일부 기존 구현이 요청을 거부할 수 있다.
Responses to the DELETE method are not cacheable. If a DELETE request passes through a cache that has one or more stored responses for the effective request URI, those stored responses will be invalidated (see Section 4.4 of [RFC7234]).
DELETE 메서드에 대한 응답은 캐시할 수 없다. DELETE 요청이 유효한 요청 URI에 대해 하나 이상의 저장된 응답이 있는 캐시를 통과하면 저장된 응답은 무효화된다([RFC7234]의 Section 4.4 참조).
4.3.6 CONNECT
The CONNECT method requests that the recipient establish a tunnel to the destination origin server identified by the request-target and, if successful, thereafter restrict its behavior to blind forwarding of packets, in both directions, until the tunnel is closed. Tunnels are commonly used to create an end-to-end virtual connection, through one or more proxies, which can then be secured using TLS (Transport Layer Security, [RFC5246]).
CONNECT 메서드는 수신자에게 요청 대상으로 식별된 대상 원서버에 터널을 설정하도록 요청하고, 그 후, 터널이 닫힐 때까지 패킷의 블라인드 포워딩으로 동작을 제한한다. 터널은 일반적으로 하나 이상의 프락시를 통해 end-to-end 가상 커넥션을 생성하는 데 사용되며, 이후 TLS(Transport Layer Security, [RFC5246])를 사용하여 보안을 유지할 수 있다.
CONNECT is intended only for use in requests to a proxy. An origin server that receives a CONNECT request for itself MAY respond with a 2xx (Successful) status code to indicate that a connection is established. However, most origin servers do not implement CONNECT.
CONNECT는 프락시에 대한 요청에서만 사용할 수 있다. 스스로 CONNECT 요청을 수신한 원서버는 2xx (Successful) 상태 코드로 응답하여 커넥션이 설정되었음을 표시한다. 그러나 대부분의 원서버는 CONNECT를 구현하지 않는다.
A client sending a CONNECT request MUST send the authority form of request-target (Section 5.3 of [RFC7230]); i.e., the request-target consists of only the host name and port number of the tunnel destination, separated by a colon. For example,
CONNECT 요청을 전송하는 클라이언트는 요청 대상의 권한 양식을 전송해야 한다([RFC7230]의 Section 5.3). 즉, 요청 대상은 콜론으로 구분된 터널 대상의 호스트 이름과 포트 번호로만 구성된다. 예를 들면
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
The recipient proxy can establish a tunnel either by directly connecting to the request-target or, if configured to use another proxy, by forwarding the CONNECT request to the next inbound proxy. Any 2xx (Successful) response indicates that the sender (and all inbound proxies) will switch to tunnel mode immediately after the blank line that concludes the successful response's header section; data received after that blank line is from the server identified by the request-target. Any response other than a successful response indicates that the tunnel has not yet been formed and that the connection remains governed by HTTP.
수신자 프락시는 request-target에 직접 연결하거나 다른 프락시를 사용하도록 구성된 경우 CONNECT 요청을 다음 인바운드 프락시로 전달하여 터널을 설정할 수 있다. 2xx (Successful) 응답은 발신자(및 모든 인바운드 프락시)가 성공적인 응답의 헤더 부문을 끝내는 빈 줄 바로 뒤에 터널 모드로 전환됨을 나타낸다. 빈 줄 이후에 수신된 데이터는 request-target으로 식별된 서버로부터 수신된다. 성공적인 응답 이외의 응답은 터널이 아직 형성되지 않았으며 커넥션은 HTTP에 의해 통제된 상태로 남아 있음을 나타낸다.
A tunnel is closed when a tunnel intermediary detects that either side has closed its connection: the intermediary MUST attempt to send any outstanding data that came from the closed side to the other side, close both connections, and then discard any remaining data left undelivered.
터널 중개자는 어느 한쪽이 커넥션을 닫았음을 감지할 때 터널이 닫힌다: 중개자는 닫힌 쪽에서 온 미결 데이터를 다른 쪽으로 보내고, 양쪽 커넥션을 모두 닫은 다음, 전달되지 않은 나머지 데이터는 모두 폐기해야 한다.(MUST)
Proxy authentication might be used to establish the authority to create a tunnel. For example,
프락시 인증을 사용하여 터널 생성 권한을 설정할 수 있다. 예를 들면
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
Proxy-Authorization: basic aGVsbG86d29ybGQ=
There are significant risks in establishing a tunnel to arbitrary servers, particularly when the destination is a well-known or reserved TCP port that is not intended for Web traffic. For example, a CONNECT to a request-target of "example.com:25" would suggest that the proxy connect to the reserved port for SMTP traffic; if allowed, that could trick the proxy into relaying spam email. Proxies that support CONNECT SHOULD restrict its use to a limited set of known ports or a configurable whitelist of safe request targets.
임의 서버에 대한 터널을 설정하는 경우, 특히 대상이 웹 트래픽을 대상으로 하지 않는 잘 알려져 있거나 예약된 TCP 포트인 경우 상당한 위험이 있다. 예를 들어 “example.com:25" 의 request-target에 대한 CONNECT는 프락시가 SMTP 트래픽을 위해 예약된 포트에 연결하도록 제안할 수 있으며, 허용된 경우 프락시를 속여 스팸 전자 메일을 전달할 수 있다. CONNECT를 지원하는 프락시는 제한된 알려진 포트 집합 또는 안전한 요청 대상의 구성 가능한 화이트리스트로 사용을 제한해야한다.(SHOULD)
A server MUST NOT send any Transfer-Encoding or Content-Length header fields in a 2xx (Successful) response to CONNECT. A client MUST ignore any Content-Length or Transfer-Encoding header fields received in a successful response to CONNECT.
서버는 2xx (Successful) 응답으로 CONNECT에 Transfer-Encoding 또는 Content-Length 헤더 필드를 전송해서는 안 된다.(MUST NOT) 클라이언트는 CONNECT에 대한 성공적인 응답으로 수신된 Content-Length 또는 Transfer-Encoding 헤더 필드를 무시해야 한다.(MUST)
A payload within a CONNECT request message has no defined semantics; sending a payload body on a CONNECT request might cause some existing implementations to reject the request.
CONNECT 요청 메시지 내의 페이로드는 의미론을 정의하지 않는다; CONNECT 요청에 페이로드 본체를 전송하면 일부 기존 구현이 요청을 거부할 수 있다.
Responses to the CONNECT method are not cacheable.
CONNECT 메서드에 대한 응답은 캐시할 수 없다.
4.3.7 OPTIONS
The OPTIONS method requests information about the communication options available for the target resource, at either the origin server or an intervening intermediary. This method allows a client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action.
OPTION 메서드는 대상 리소스에 사용할 수 있는 통신 옵션에 대한 정보를 오리진 서버 또는 중개자에게 요청한다. 이 메서드를 사용하면 클라이언트가 리소스 작업을 암시하지 않고 리소스 또는 서버의 기능과 관련된 옵션 또는 요구 사항을 결정할 수 있다.
An OPTIONS request with an asterisk ("*") as the request-target (Section 5.3 of [RFC7230]) applies to the server in general rather than to a specific resource. Since a server's communication options typically depend on the resource, the "*" request is only useful as a "ping" or "no-op" type of method; it does nothing beyond allowing the client to test the capabilities of the server. For example, this can be used to test a proxy for HTTP/1.1 conformance (or lack thereof).
별표("*")를 요청 대상으로 하는 OPTIONS 요청([RFC7230]의 Section 5.3)은 특정 리소스가 아닌 일반적으로 서버에 적용된다. 서버의 통신 옵션은 일반적으로 리소스에 따라 다르기 때문에, "*" 요청은 "ping" 또는 "no-op" 유형의 메소드만 유효하며, 클라이언트가 서버의 기능을 테스트할 수 있도록 허용하는 것 외에는 아무 것도 하지 않는다. 예를 들어, HTTP/1.1 적합성(또는 그것들의 결여)에 대한 프락시를 테스트하는 데 사용할 수 있다.
If the request-target is not an asterisk, the OPTIONS request applies to the options that are available when communicating with the target resource.
요청 대상이 별표가 아닌 경우 OPTION 요청은 대상 리소스와 통신할 때 사용할 수 있는 옵션에 적용된다.
A server generating a successful response to OPTIONS SHOULD send any header fields that might indicate optional features implemented by the server and applicable to the target resource (e.g., Allow), including potential extensions not defined by this specification. The response payload, if any, might also describe the communication options in a machine or human-readable representation. A standard format for such a representation is not defined by this specification, but might be defined by future extensions to HTTP. A server MUST generate a Content-Length field with a value of "0" if no payload body is to be sent in the response.
OPTION에 대한 성공적인 응답을 생성하는 서버는 이 명세에 정의되지 않은 잠재적 확장을 포함하여 서버가 구현하고 대상 리소스(e.g., Allow)에 적용할 수 있는 선택적 기능을 나타낼 수 있는 헤더 필드를 전송해야 한다.(SHOULD) 응답 페이로드는 기계의 통신 옵션이나 사람이 읽을 수 있는 표현을 설명할 수도 있다. 이러한 표현에 대한 표준 형식은 이 명세에 의해 정의되지 않지만 HTTP에 대한 향후 확장에 의해 정의될 수 있다. 응답에서 페이로드 본문을 전송하지 않으려면 서버는 “0”의 값을 가진 Content-Length 필드를 생성해야 한다.(MUST)
A client MAY send a Max-Forwards header field in an OPTIONS request to target a specific recipient in the request chain (see Section 5.1.2). A proxy MUST NOT generate a Max-Forwards header field while forwarding a request unless that request was received with a Max-Forwards field.
클라이언트 OPTIONS 요청의 Max-Forwards 헤더 필드를 요청 체인의 특정 수신자를 대상으로 보낼 수 있다.(MAY) (Section 5.1.2 참조) 요청이 Max-Forwards 필드와 수신되지 않은 경우 프락시는 요청을 전달하는 동안 Max-Forwards 헤더 필드를 생성해서는 안 된다.(MUST NOT)
A client that generates an OPTIONS request containing a payload body MUST send a valid Content-Type header field describing the representation media type. Although this specification does not define any use for such a payload, future extensions to HTTP might use the OPTIONS body to make more detailed queries about the target resource.
페이로드 본문을 포함하는 OPTIONS 요청을 생성하는 클라이언트는 미디어 타입 표현을 설명하는 유효한 Content-Type 헤더 필드를 전송해야 한다.(MUST) 이 명세는 그러한 페이로드에 대한 사용을 정의하지 않지만, HTTP에 대한 향후 확장은 OPTIONS 본문을 사용하여 대상 리소스에 대한 보다 상세한 질의를 할 수 있다.
Responses to the OPTIONS method are not cacheable.
OPTIONS 메서드에 대한 응답은 캐시할 수 없다.
4.3.8 TRACE
The TRACE method requests a remote, application-level loop-back of the request message. The final recipient of the request SHOULD reflect the message received, excluding some fields described below, back to the client as the message body of a 200 (OK) response with a Content-Type of "message/http" (Section 8.3.1 of [RFC7230]). The final recipient is either the origin server or the first server to receive a Max-Forwards value of zero (0) in the request (Section 5.1.2).
TRACE 메서드는 요청 메시지의 원격 애플리케이션-레벨 루프백을 요청한다. 요청의 최종 수신자는 아래에 설명된 일부 필드를 제외하고 수신된 메시지를 “message/http”의 내용 유형으로 200 (OK) 응답의 메시지 본문으로 클라이언트에 다시 반영해야 한다.(SHOULD) ([RFC7230] Section 8.3.1) 최종 수신자는 요청에서 Max-Forwards의 0 값을 수신한 첫 번째 서버 또는 원서버(Section 5.1.2)이다.
A client MUST NOT generate header fields in a TRACE request containing sensitive data that might be disclosed by the response. For example, it would be foolish for a user agent to send stored user credentials [RFC7235] or cookies [RFC6265] in a TRACE request. The final recipient of the request SHOULD exclude any request header fields that are likely to contain sensitive data when that recipient generates the response body.
클라이언트는 TRACE 요청에서 응답에 의해 공개될 수 있는 중요한 데이터를 포함하여 헤더 필드를 생성해서는 안 된다.(MUST NOT) 예를 들어 사용자 에이전트가 저장된 사용자 자격 증명 [RFC7235] 또는 쿠키 [RFC6265]를 TRACE 요청으로 전송하는 것은 어리석은 일이다. 요청의 최종 수신자는 응답 본문을 생성할 때 중요한 데이터를 포함할 가능성이 있는 요청 헤더 필드를 제외해야 한다.(SHOULD)
TRACE allows the client to see what is being received at the other end of the request chain and use that data for testing or diagnostic information. The value of the Via header field (Section 5.7.1 of [RFC7230]) is of particular interest, since it acts as a trace of the request chain. Use of the Max-Forwards header field allows the client to limit the length of the request chain, which is useful for testing a chain of proxies forwarding messages in an infinite loop.
TRACE는 클라이언트가 요청 체인의 다른 쪽 끝에서 수신되는 것을 확인하고 테스트 또는 진단 정보를 위해 해당 데이터를 사용할 수 있도록 한다. Via 헤더 필드의 값([RFC7230]의 Section 5.7.1)은 요청 체인의 추적 역할을 하므로 특히 관심이 높다. Max-Forwards 헤더 필드를 사용하면 클라이언트가 요청 체인의 길이를 제한할 수 있으며, 이는 무한 루프에서 메시지 전달 프락시 체인을 테스트하는 데 유용하다.
A client MUST NOT send a message body in a TRACE request.
클라이언트는 TRACE 요청으로 메시지 본문을 보내서는 안 된다.(MUST NOT)
Responses to the TRACE method are not cacheable.
TRACE 메서드에 대한 응답은 캐시할 수 없다.
5. Request Header Fields
A client sends request header fields to provide more information about the request context, make the request conditional based on the target resource state, suggest preferred formats for the response, supply authentication credentials, or modify the expected request processing. These fields act as request modifiers, similar to the parameters on a programming language method invocation.
클라이언트는 요청 헤더 필드를 보내 요청 컨텍스트에 대한 추가 정보를 제공하고, 대상 리소스 상태에 따라 요청을 조건부로 만들며, 응답에 대한 기본 형식을 제안하거나, 인증 자격 증명을 제공하거나, 예상 요청 처리를 수정한다. 이러한 필드는 프로그래밍 언어 메서드 호출의 파라미터와 유사하게 요청 수정자 역할을 한다.
5.1 Controls
Controls are request header fields that direct specific handling of the request.
Controls은 요청의 특정 처리를 지시하는 요청 헤더 필드다.
+——————————+——————————————+
| Header Field Name | Defined in... |
+——————————+——————————————+
| Cache-Control | Section 5.2 of [RFC7234] |
| Expect | Section 5.1.1 |
| Host | Section 5.4 of [RFC7230] |
| Max-Forwards | Section 5.1.2 |
| Pragma | Section 5.4 of [RFC7234] |
| Range | Section 3.1 of [RFC7233] |
| TE | Section 4.3 of [RFC7230] |
+——————————+——————————————+
5.1.1 Expect
The "Expect" header field in a request indicates a certain set of behaviors (expectations) that need to be supported by the server in order to properly handle this request. The only such expectation defined by this specification is 100-continue.
요청의 “Expect” 헤더 필드는 요청을 적절하게 처리하기 위해 서버가 지원해야 하는 특정 동작(기대치)을 나타낸다. 이 명세에 의해 정의된 유일한 기대치는 100-continue이다.
Expect = "100-continue"
The Expect field-value is case-insensitive.
Expect field-value는 대소문자를 구분하지 않는다.
A server that receives an Expect field-value other than 100-continu MAY respond with a 417 (Expectation Failed) status code to indicate that the unexpected expectation cannot be met.
100-continue 이외의 Expect field-value를 수신하는 서버는 417 (Expectation Failed) 상태 코드로 응답하여 예상하지 못한 기대치를 충족할 수 없음을 나타낼 수 있다.(MAY)
A 100-continue expectation informs recipients that the client is about to send a (presumably large) message body in this request and wishes to receive a 100 (Continue) interim response if the request-line and header fields are not sufficient to cause an immediate success, redirect, or error response. This allows the client to wait for an indication that it is worthwhile to send the message body before actually doing so, which can improve efficiency when the message body is huge or when the client anticipates that an error is likely (e.g., when sending a state-changing method, for the first time, without previously verified authentication credentials).
100-continue는 클라이언트가 이 요청에서 (상당히 큰) 메시지 본문을 보내려고 한다는 것을 수신자에게 알려주고, 요청 라인 및 헤더 필드가 즉각적인 성공, 리다이렉트 또는 오류 응답을 야기하기에 충분하지 않을 경우 100 (Continue) 중간 응답을 받기를 희망한다. 이를 통해 클라이언트는 실제로 메시지 본문을 전송하기 전에 메시지 본문을 전송할 가치가 있다는 표현를 기다릴 수 있으며, 이는 메시지 본문이 거대하거나 오류가 발생할 가능성이 있다고 예상할 때 효율성을 향상시킬 수 있다.(e.g., 상태 변경 메서드를 보낼 때, 처음으로, 이전에 확인된 인증 자격 없이)
For example, a request that begins with
예를들어, 다음으로 시작하는 요청에서
PUT /somewhere/fun HTTP/1.1
Host: origin.example.com
Content-Type: video/h264
Content-Length: 1234567890987
Expect: 100-continue
allows the origin server to immediately respond with an error message, such as 401 (Unauthorized) or 405 (Method Not Allowed), before the client starts filling the pipes with an unnecessary data transfer.
클라이언트가 불필요한 데이터 전송으로 파이프를 채우기 시작하기 전에 원서버가 401 (Unauthorized) 또는 405 (Method Not Allowed)와 같은 오류 메시지로 즉시 응답할 수 있도록 허용한다.
Requirements for clients:
클라이언트를 위한 요구사항으로:
o A client MUST NOT generate a 100-continue expectation in a request that does not include a message body.
클라이언트는 메시지 본문을 포함하지 않는 요청에서 100-continue 를 생성해서는 안 된다.(MUST NOT)
o A client that will wait for a 100 (Continue) response before sending the request message body MUST send an Expect header field containing a 100-continue expectation.
요청 메시지를 보내기 전에 100 (Continue) 응답을 기다리는 클라이언트는 100-continue 가 포함된 Expect 헤더 필드를 전송해야 한다.
o A client that sends a 100-continue expectation is not required to wait for any specific length of time; such a client MAY proceed to send the message body even if it has not yet received a response. Furthermore, since 100 (Continue) responses cannot be sent through an HTTP/1.0 intermediary, such a client SHOULD NOT wait for an indefinite period before sending the message body.
100-continue를 전송하는 클라이언트는 특정 시간 동안 기다릴 필요가 없다. 그러한 클라이언트는 아직 응답을 받지 못했더라도 메시지 본문을 전송하는 것을 계속할 수 있다.(MAY) 또한, 100 (Continue) 응답은 HTTP/1.0 중개자를 통해 전송할 수 없으므로, 해당 클라이언트는 메시지 본문을 보내기 전에 무기한으로 기다려서는 안 된다.(SHOULD NOT)
o A client that receives a 417 (Expectation Failed) status code in response to a request containing a 100-continue expectation SHOULD repeat that request without a 100-continue expectation, since the 417 response merely indicates that the response chain does not support expectations (e.g., it passes through an HTTP/1.0 server).
100-continue를 포함하는 요청에 응답하여 417 (Expectation Failed) 상태 코드를 수신하는 클라이언트는 응답 체인이 기대치를 지원하지 않음을 나타낼 뿐이므로(e.g., HTTP/1.0 서버를 경유함) 100-continue 없이 해당 요청을 반복해야 한다.(SHOULD)
Requirements for servers:
서버를 위한 요구사항으로:
o A server that receives a 100-continue expectation in an HTTP/1.0 request MUST ignore that expectation.
HTTP/1.0 요청에서 100-continue를 수신하는 서버는 해당 기대치를 무시해야 한다.(MUST)
o A server MAY omit sending a 100 (Continue) response if it has already received some or all of the message body for the corresponding request, or if the framing indicates that there is no message body.
서버는 해당 요청에 대한 메시지 본문의 일부 또는 전부를 이미 수신했거나 프레임에 메시지 본문이 없는 것으로 표시된 경우 100 (Continue) 응답 전송을 생략할 수 있다.(MAY)
o A server that sends a 100 (Continue) response MUST ultimately send a final status code, once the message body is received and processed, unless the connection is closed prematurely.
100 (Continue) 응답을 전송하는 서버는 커넥션이 조기에 종료되지 않는 한 메시지 본문이 수신되고 처리되면 최종 상태 코드를 전송해야 한다.(MUST)
o A server that responds with a final status code before reading the entire message body SHOULD indicate in that response whether it intends to close the connection or continue reading and discarding the request message (see Section 6.6 of [RFC7230]).
전체 메시지 본문을 읽기 전에 최종 상태 코드로 응답하는 서버는 커넥션을 종료할 것인지 또는 요청 메시지를 계속 읽고 폐기할 것인지를 해당 응답에 표시해야 한다.(SHOULD) ([RFC7230]의 Section 6.6 참조).
An origin server MUST, upon receiving an HTTP/1.1 (or later) request-line and a complete header section that contains a 100-continue expectation and indicates a request message body will follow, either send an immediate response with a final status code, if that status can be determined by examining just the request-line and header fields, or send an immediate 100 (Continue) response to encourage the client to send the request's message body. The origin server MUST NOT wait for the message body before sending the 100 (Continue) response.
원서버는 request-line 및 헤더 필드만 검사하여 상태를 확인할 수 있는 경우, HTTP/1.1(또는 그 이상) request-line 및 100-continue를 포함하고 요청 메시지 본문이 따를 것임을 나타내는 전체 헤더 부문을 수신한 후 최종 상태 코드를 사용하여 응답을 즉시 전송하거나, 클라이언트가 요청의 메시지 본문을 보내도록 장려하기 위해 100 (Continue) 응답을 즉시 전송해야 한다.(MUST) 원서버는 100(Continue) 응답을 보내기 전에 메시지 본문을 기다려서는 안 된다.(MUST NOT)
A proxy MUST, upon receiving an HTTP/1.1 (or later) request-line and a complete header section that contains a 100-continue expectation and indicates a request message body will follow, either send an immediate response with a final status code, if that status can be determined by examining just the request-line and header fields, or begin forwarding the request toward the origin server by sending a corresponding request-line and header section to the next inbound server. If the proxy believes (from configuration or past interaction) that the next inbound server only supports HTTP/1.0, the proxy MAY generate an immediate 100 (Continue) response to encourage the client to begin sending the message body.
프락시는 request-line 및 헤더 필드만 검사하여 상태를 확인할 수 있는 경우, HTTP/1.1(또는 그 이상) request-line 및 100-continue를 포함하고 요청 메시지 본문이 따를 것임을 나타내는 전체 헤더 부문을 수신한 후 최종 상태 코드를 사용하여 응답을 즉시 전송하거나, 해당 request-line 및 헤더 부문을 다음 인바운드 서버로 전달하며 원서버를 향해 요청을 전송해야 한다.(MUST) 프락시가 다음 인바운드 서버가 HTTP/1.0만 지원한다고 믿는 경우(구성 또는 과거 상호 작용에서) 프락시는 클라이언트가 메시지 본문을 보내도록 권장하기 위해 100 (Continue) 응답을 즉시 생성할 수 있다.(MAY)
Note: The Expect header field was added after the original publication of HTTP/1.1 [RFC2068] as both the means to request an interim 100 (Continue) response and the general mechanism for indicating must-understand extensions. However, the extension mechanism has not been used by clients and the must-understand requirements have not been implemented by many servers, rendering the extension mechanism useless. This specification has removed the extension mechanism in order to simplify the definition and processing of 100-continue.
참고: Expect 헤더 필드는 중간 100 (Continue) 응답을 요청하는 수단 및 반드시 이해해야 하는 확장을 표시하는 일반적인 메커니즘으로 HTTP/1.1 [RFC2068]의 최초 발행 후 추가되었다. 그러나, 확장 메커니즘은 클라이언트에 의해 사용되지 않았고, 반드시 이해되어야 하는 요구사항은 많은 서버에 의해 구현되지 않아 확장 메커니즘이 무용지물이 되었다. 이 명세는 100-continue 정의와 처리를 단순화하기 위해 확장 메커니즘을 제거하였다.
5.1.2 Max-Forwards
The "Max-Forwards" header field provides a mechanism with the TRACE (Section 4.3.8) and OPTIONS (Section 4.3.7) request methods to limit the number of times that the request is forwarded by proxies. This can be useful when the client is attempting to trace a request that appears to be failing or looping mid-chain.
“Max-Forwards” 헤더 필드는 요청이 프락시에 의해 전달되는 횟수를 제한하는 TRACE (Section 4.3.8) 및 OPTION (Section 4.3.7) 요청 메서드와 메커니즘을 제공한다. 이는 클라이언트가 실패한 것으로 보이거나 중간 체인의 루프로 보이는 요청을 추적하려고 할 때 유용할 수 있다.
Max-Forwards = 1*DIGIT
The Max-Forwards value is a decimal integer indicating the remaining number of times this request message can be forwarded.
Max-Forwards 값은 이 요청 메시지를 전달할 수 있는 남은 횟수를 나타내는 십진수 정수다.
Each intermediary that receives a TRACE or OPTIONS request containing a Max-Forwards header field MUST check and update its value prior to forwarding the request. If the received value is zero (0), the intermediary MUST NOT forward the request; instead, the intermediary MUST respond as the final recipient. If the received Max-Forwards value is greater than zero, the intermediary MUST generate an updated Max-Forwards field in the forwarded message with a field-value that is the lesser of a) the received value decremented by one (1) or b) the recipient's maximum supported value for Max-Forwards.
Max-Forwards 헤더 필드가 포함된 TRACE 또는 OPTIONS 요청을 수신한 각 중개자는 요청을 전달하기 전에 해당 값을 확인하고 갱신해야 한다.(MUST) 수신된 값이 0인 경우, 중개자는 요청을 전달하지 않아야 하며,(MUST NOT) 대신 중개자는 최종 수신자로 응답해야 한다.(MUST) 수신한 Max-Forwards 값이 0보다 클 경우, 중개자는 수신한 값이 Max-Forwards에 대해 수신자의 최대 지원 값 (1) 또는 b) 감소하는 필드 값보다 작은 필드 값을 사용하여 전달된 메시지에서 갱신된 Max-Forwards 필드를 생성해야 한다.(MUST)
A recipient MAY ignore a Max-Forwards header field received with any other request methods.
수신자는 다른 요청 메서드로 수신한 최대 포워즈 헤더 필드를 무시할 수 있다.(MAY)
5.2 Conditionals
The HTTP conditional request header fields [RFC7232] allow a client to place a precondition on the state of the target resource, so that the action corresponding to the method semantics will not be applied if the precondition evaluates to false. Each precondition defined by this specification consists of a comparison between a set of validators obtained from prior representations of the target resource to the current state of validators for the selected representation (Section 7.2). Hence, these preconditions evaluate whether the state of the target resource has changed since a given state known by the client. The effect of such an evaluation depends on the method semantics and choice of conditional, as defined in Section 5 of [RFC7232].
HTTP 조건부 요청 헤더 필드 [RFC7232]는 클라이언트가 대상 리소스의 상태에 전제조건을 둘 수 있도록 하여 전제조건이 거짓으로 평가하면 메서드 의미론에 해당하는 조치가 적용되지 않도록 한다. 이 명세에 의해 정의된 각 전제조건은 대상 리소스의 이전 표현에서 얻은 검증자 집합과 선택된 표현에 대한 현재 검증자 상태 간의 비교로 구성된다(Section 7.2). 따라서 이러한 전제조건은 대상 리소스의 상태가 클라이언트가 알고 있는 특정 상태 이후 변경되었는지 여부를 평가한다. 그러한 평가의 효과는 [RFC7232]의 Section 5에서 정의한 조건부 메서드 의미와 선택에 따라 달라진다.
+———————————+——————————————+
| Header Field Name | Defined in... |
+———————————+——————————————+
| If-Match | Section 3.1 of [RFC7232] |
| If-None-Match | Section 3.2 of [RFC7232] |
| If-Modified-Since | Section 3.3 of [RFC7232] |
| If-Unmodified-Since | Section 3.4 of [RFC7232] |
| If-Range | Section 3.2 of [RFC7233] |
+———————————+——————————————+
5.3 Content Negotitation
The following request header fields are sent by a user agent to engage in proactive negotiation of the response content, as defined in Section 3.4.1. The preferences sent in these fields apply to any content in the response, including representations of the target resource, representations of error or processing status, and potentially even the miscellaneous text strings that might appear within the protocol.
다음 요청 헤더 필드는 사용자 에이전트에 의해 Section 3.4.1에서 정의한 응답 내용의 사전 협상에 참여하기 위해 전송된다. 이러한 필드에서 전송되는 환경설정은 대상 리소스의 표현, 오류 또는 처리 상태의 표현, 프로토콜 내에 나타날 수 있는 기타 텍스트 문자열까지 포함하여 응답의 모든 내용에 적용된다.
+——————————+————————+
| Header Field Name | Defined in... |
+——————————+————————+
| Accept | Section 5.3.2 |
| Accept-Charset | Section 5.3.3 |
| Accept-Encoding | Section 5.3.4 |
| Accept-Language | Section 5.3.5 |
+——————————+————————+
5.3.1 Quality Values
Many of the request header fields for proactive negotiation use a common parameter, named "q" (case-insensitive), to assign a relative "weight" to the preference for that associated kind of content. This weight is referred to as a "quality value" (or "qvalue") because the same parameter name is often used within server configurations to assign a weight to the relative quality of the various representations that can be selected for a resource.
사전 협상을 위한 많은 요청 헤더 필드는 “q” (대소문자를 구분하지 않음)라는 공통 매개변수를 사용하여 관련 콘텐츠의 선호도에 상대적인 “weight”를 할당한다. 이 가중치를 “quality value"(또는 “qvalue”)이라고 하는데, 같은 매개변수 이름이 리소스를 위해 선택할 수 있는 다양한 표현의 상대적 품질에 가중치를 할당하기 위해 서버 구성 내에서 자주 사용되기 때문이다.
The weight is normalized to a real number in the range 0 through 1, where 0.001 is the least preferred and 1 is the most preferred; a value of 0 means "not acceptable". If no "q" parameter is present, the default weight is 1.
가중치는 0 에서 1 사이의 범위에서 실제 숫자로 정규화되며, 여기서 0.001은 가장 선호되지 않고 1은 가장 선호되며, 0의 값은 “not acceptable”을 의미한다. “q” 매개변수가 없는 경우 기본 가중치는 1이다.
weight = OWS ";" OWS "q=" qvalue
qvalue = ( "0" [ "." 0*3DIGIT ] )
/ ( "1" [ "." 0*3("0") ] )
A sender of qvalue MUST NOT generate more than three digits after the decimal point. User configuration of these values ought to be limited in the same fashion.
q값을 보낸 사람은 소수점 이후 세 자리 이상의 숫자를 생성해서는 안 된다.(MUST NOT) 이러한 값의 사용자 구성은 동일한 방식으로 제한되어야 한다.
5.3.1 Accept
The "Accept" header field can be used by user agents to specify response media types that are acceptable. Accept header fields can be used to indicate that the request is specifically limited to a small set of desired types, as in the case of a request for an in-line image.
“Accept” 헤더 필드는 사용자 에이전트에서 허용 가능한 응답 미디어 타입을 지정하는 데 사용할 수 있다. Accept 헤더 필드는 인라인 이미지 요청의 경우처럼 요청이 특별히 원하는 타입의 작은 집합으로 제한되었음을 나타내는 데 사용할 수 있다.
Accept = #( media-range [ accept-params ] )
media-range = ( "*/*"
/ ( type "/" "*" )
/ ( type "/" subtype )
) *( OWS ";" OWS parameter )
accept-params = weight *( accept-ext )
accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ]
The asterisk "*" character is used to group media types into ranges, with "*/*" indicating all media types and "type/*" indicating all subtypes of that type. The media-range can include media type parameters that are applicable to that range.
별표 "*" 문자는 모든 미디어 타입을 나타내며 "*/*"는 해당 유형의 모든 하위 타입을 나타내는 "type/*"와 함께 미디어 타입을 범위로 그룹화하는 데 사용된다. 미디어 범위는 해당 범위에 적용되는 미디어 타입 매개변수를 포함할 수 있다.
Each media-range might be followed by zero or more applicable media type parameters (e.g., charset), an optional "q" parameter for indicating a relative weight (Section 5.3.1), and then zero or more extension parameters. The "q" parameter is necessary if any extensions (accept-ext) are present, since it acts as a separator between the two parameter sets.
각 미디어 범위에는 0개 이상의 적용 가능한 미디어 타입 매개변수(e.g., charset), 상대 가중치를 나타내는 선택적 "q" 매개변수(Section 5.3.1) 및 그 이상의 확장 매개변수가 뒤따를 수 있다. "q" 매개변수는 두 매개변수 집합 사이에 구분자 역할을 하기 때문에 확장자(accept-ext)가 있는 경우 필요하다.
Note: Use of the "q" parameter name to separate media type parameters from Accept extension parameters is due to historical practice. Although this prevents any media type parameter named "q" from being used with a media range, such an event is believed to be unlikely given the lack of any "q" parameters in the IANA media type registry and the rare usage of any media type parameters in Accept. Future media types are discouraged from registering any parameter named “q".
참고: "q" 매개변수 이름을 사용하여 확장 매개변수 승인에서 미디어 타입 매개변수를 구분하는 것은 과거 관행 때문이다. 이렇게 하면 "q"라는 이름의 미디어 타입 매개변수가 미디어 범위에 사용될 수 없지만, IANA 미디어 타입 레지스트리에 "q" 매개변수가 없고 Accept에 있는 미디어 타입 매개변수가 드물게 사용된다는 점에서 이러한 문제는 어려울 것으로 생각된다. 미래의 미디어 타입은 "q"라는 매개 변수를 등록하는 것을 꺼린다.
The example
예를들어
Accept: audio/*; q=0.2, audio/basic
is interpreted as "I prefer audio/basic, but send me any audio type if it is the best available after an 80% markdown in quality”.
는 “나는 audio/basic을 선호하지만, 80%의 품질 저하 후 가장 적합한 오디오 타입을 보내달라”로 해석된다.
A request without any Accept header field implies that the user agent will accept any media type in response. If the header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable, the origin server can either honor the header field by sending a 406 (Not Acceptable) response or disregard the header field by treating the response as if it is not subject to content negotiation.
Accept 헤더 필드가 없는 요청은 사용자 에이전트가 응답에 대한 모든 미디어 타입을 수락함을 의미한다. 요청에 헤더 필드가 있고 응답에 사용할 수 있는 표현 중 허용 가능한 것으로 나열된 미디어 타입이 없는 경우, 원서버는 406 (Acceptable) 응답을 전송하여 헤더 필드를 존중하거나, 응답을 내용 협상 대상이 아닌 것처럼 처리하여 헤더 필드를 무시할 수 있다.
A more elaborate example is
더 정교한 예는
Accept: text/plain; q=0.5, text/html,
text/x-dvi; q=0.8, text/x-c
Verbally, this would be interpreted as "text/html and text/x-c are the equally preferred media types, but if they do not exist, then send the text/x-dvi representation, and if that does not exist, send the text/plain representation".
구두로, 이것은 “text/html과 text/x-c가 동일하게 선호되는 미디어 타입이지만, 만약 그것들이 존재하지 않는다면, text/x-dvi 표현을 보내고, 만약 그것이 존재하지 않는다면, text/plain 표현을 보내라"로 해석될 것이다.
Media ranges can be overridden by more specific media ranges or specific media types. If more than one media range applies to a given type, the most specific reference has precedence. For example,
미디어 범위는 더 구체적인 미디어 범위 또는 특정 미디어 타입에 의해 재정의될 수 있다. 두 개 이상의 미디어 범위가 특정 타입에 적용되는 경우 가장 구체적인 참조가 우선한다. 예를 들면
Accept: text/*, text/plain, text/plain;format=flowed, */*
have the following precedence:
1. text/plain;format=flowed
2. text/plain
3. text/*
4. */*
The media type quality factor associated with a given type is determined by finding the media range with the highest precedence that matches the type. For example,
주어진 형식과 관련된 미디어 타입 품질 가중치는 형식과 일치하는 가장 높은 우선순위의 미디어 범위를 찾아 결정된다. 예를 들면,
Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1,
text/html;level=2;q=0.4, */*;q=0.5
would cause the following values to be associated:
다음과 같은 값이 연관된다.
+——————————+————————+
| Media Type | Quality Value |
+——————————+————————+
| text/html;level=1 | 1 |
| text/html | 0.7 |
| text/plain | 0.3 |
| image/jpeg | 0.5 |
| text/html;level=2 | 0.4 |
| text/html;level=3 | 0.7 |
+——————————+————————+
Note: A user agent might be provided with a default set of quality values for certain media ranges. However, unless the user agent is a closed system that cannot interact with other rendering agents, this default set ought to be configurable by the user.
참고: 사용자 에이전트에 특정 미디어 범위에 대한 기본 품질 값 집합이 제공될 수 있다. 단, 사용자 에이전트가 다른 렌더링 에이전트와 상호 작용할 수 없는 폐쇄형 시스템이 아닌 한, 이 기본 설정은 사용자가 구성해야 한다.
5.3.3 Accept-Charset
The "Accept-Charset" header field can be sent by a user agent to indicate what charsets are acceptable in textual response content. This field allows user agents capable of understanding more comprehensive or special-purpose charsets to signal that capability to an origin server that is capable of representing information in those charsets.
“Accept-Charset” 헤더 필드는 사용자 에이전트가 텍스트 응답 내용에서 허용되는 charset(이하 문자 집합)을 표시하기 위해 전송할 수 있다. 이 필드는 보다 포괄적이거나 특수 목적의 문자 집합을 이해할 수 있는 사용자 에이전트가 해당 문자 집합 정보를 나타낼 수 있는 원서버에 해당 기능을 수용할 수 있도록 한다.
Accept-Charset = 1#( ( charset / "*" ) [ weight ] )
Charset names are defined in Section 3.1.1.2. A user agent MAY associate a quality value with each charset to indicate the user’s relative preference for that charset, as defined in Section 5.3.1. An example is
Charset 이름은 Section 3.1.1.2에 정의되어 있다. 사용자 에이전트는 Section 5.3.1에서 정의한 바와 같이 해당 문자 집합에 대한 사용자의 상대적 선호도를 나타내기 위해 품질 값을 각문자 집합과 연결할 수 있다.(MAY) 예시로는
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
The special value "*", if present in the Accept-Charset field, matches every charset that is not mentioned elsewhere in the Accept-Charset field. If no "*" is present in an Accept-Charset field, then any charsets not explicitly mentioned in the field are considered "not acceptable" to the client.
Accept-Charset 필드에 있는 경우 특수 값 “*”은 Accept-Charset 필드의 다른 곳에서 언급되지 않은 모든 문자 집합과 일치한다. Accept-Charet 필드에 “*”가 없는 경우, 필드에 명시적으로 언급되지 않은 모든 문자 집합은 클라이언트에 “not acceptable”것으로 간주된다.
A request without any Accept-Charset header field implies that the user agent will accept any charset in response. Most general-purpose user agents do not send Accept-Charset, unless specifically configured to do so, because a detailed list of supported charsets makes it easier for a server to identify an individual by virtue of the user agent's request characteristics (Section 9.7).
Accept-Charset 헤더 필드가 없는 요청은 사용자 에이전트가 응답에 대한 모든 문자 집합을 수용함을 의미한다. 대부분의 범용 사용자 에이전트는 특별히 구성되지 않은 한 Accept-Charset를 발송하지 않는데, 이는 지원되는 문자 집합의 상세 목록을 통해 서버가 사용자 에이전트의 요청 특성에 따라 개인을 쉽게 식별할 수 있기 때문이다(Section 9.7).
If an Accept-Charset header field is present in a request and none of the available representations for the response has a charset that is listed as acceptable, the origin server can either honor the header field, by sending a 406 (Not Acceptable) response, or disregard the header field by treating the resource as if it is not subject to content negotiation.
요청에 Accept-Charset 헤더 필드가 있고 응답에 대해 사용 가능한 표현 중 허용 가능한 것으로 나열된 문자 집합이 없는 경우, 원서버는 406(Not Acceptable) 응답을 전송하여 헤더 필드를 존중하거나 리소스를 콘텐츠 협상의 대상이 아닌 것처럼 처리하여 헤더 필드를 무시할 수 있다.
5.3.4 Accept-Encoding
The "Accept-Encoding" header field can be used by user agents to indicate what response content-codings (Section 3.1.2.1) are acceptable in the response. An "identity" token is used as a synonym for "no encoding" in order to communicate when no encoding is preferred.
사용자 에이전트는 “Accept-Encoding” 헤더 필드를 사용하여 응답에서 허용되는 content-coding 응답(Section 3.1.2.1)를 표시할 수 있다. “identity” 토큰은 인코딩이 선호되지 않을 때 통신하기 위해 “no encoding”의 동의어로 사용된다.
Accept-Encoding = #( codings [ weight ] )
codings = content-coding / "identity" / "*"
Each codings value MAY be given an associated quality value representing the preference for that encoding, as defined in Section 5.3.1. The asterisk "*" symbol in an Accept-Encoding field matches any available content-coding not explicitly listed in the header field.
각 codings 값에는 Section 5.3.1에 정의된 대로 해당 인코딩에 대한 선호를 나타내는 관련 품질 값이 제공될 수 있다.(MAY) Accept-Encoding 필드의 별표 “*” 기호는 헤더 필드에 명시적으로 나열되지 않은 사용 가능한 모든 content-coding과 일치한다.
For example,
예를들어,
Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: *
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0
A request without an Accept-Encoding header field implies that the user agent has no preferences regarding content-codings. Although this allows the server to use any content-coding in a response, it does not imply that the user agent will be able to correctly process all encodings.
Accept-Encoding 헤더 필드가 없는 요청은 사용자 에이전트에 content-coding에 대한 환경설정이 없음을 의미한다. 이것은 서버가 응답에 어떤 content-coding도 사용할 수 있도록 허용하지만, 사용자 에이전트가 모든 인코딩을 올바르게 처리할 수 있음을 의미하지는 않는다.
A server tests whether a content-coding for a given representation is acceptable using these rules:
서버는 다음 규칙을 사용하여 주어진 표현에 대한 content-coding이 허용되는지 여부를 테스트한다:
1. If no Accept-Encoding field is in the request, any content-coding is considered acceptable by the user agent.
1. 요청에 Accept-Encoding 필드가 없는 경우, 모든 content-coding은 사용자 에이전트에 의해 허용 가능한 것으로 간주된다.
2. If the representation has no content-coding, then it is acceptable by default unless specifically excluded by the Accept-Encoding field stating either "identity;q=0" or “*;q=0" without a more specific entry for “identity".
2. 표현에 content-coding이 없는 경우, “identity;q=0” 또는 “*;q=0” 중 하나를 명시하는 Accept-Encoding 필드에서 특별히 제외되지 않는 한 “identity”에 대한 보다 구체적인 항목 없이 기본적으로 허용된다.
3. If the representation's content-coding is one of the content-codings listed in the Accept-Encoding field, then it is acceptable unless it is accompanied by a qvalue of 0. (As defined in Section 5.3.1, a qvalue of 0 means "not acceptable”.)
표현의 content-coding이 Accept-Encoding 필드에 나열된 content-codings 중 하나인 경우, q=0을 동반하지 않는 한 허용된다. (Section 5.3.1에서 정의한 바와 같이, q=0은 “not acceptable”을 의미한다.)
4. If multiple content-codings are acceptable, then the acceptable content-coding with the highest non-zero qvalue is preferred.
4. 복수의 content-codings이 허용되는 경우, 0이 아닌 q값이 가장 높은 허용되는 content-coding이 선호된다.
An Accept-Encoding header field with a combined field-value that is empty implies that the user agent does not want any content-coding in response. If an Accept-Encoding header field is present in a request and none of the available representations for the response have a content-coding that is listed as acceptable, the origin server SHOULD send a response without any content-coding.
field-value이 비어 있는 Accept-Encoding 헤더 필드는 사용자 에이전트가 응답에 대한 content-coding을 원하지 않음을 의미한다. 요청에 Accept-Encoding 헤더 필드가 있고 응답에 대해 사용 가능한 표현 중 허용 가능한 것으로 나열된 content-coding이 없는 경우, 원서버는 content-coding 없이 응답을 보내야 한다.(SHOULD)
Note: Most HTTP/1.0 applications do not recognize or obey qvalues associated with content-codings. This means that qvalues might not work and are not permitted with x-gzip or x-compress.
참고: 대부분의 HTTP/1.0 응용프로그램은 content-codings과 관련된 q값을 인식하거나 준수하지 않는다. 이는 q값이 작동하지 않을 수 있고 x-gzip 또는 x-compress에서 허용되지 않을 수 있음을 의미한다.
5.3.5 Accept-Language
The "Accept-Language" header field can be used by user agents to indicate the set of natural languages that are preferred in the response. Language tags are defined in Section 3.1.3.1.
사용자 에이전트는 “Accept-Language” 헤더 필드를 사용하여 응답에서 선호하는 자연어 집합을 나타낼 수 있다. 언어 태그는 Section 3.1.3.1에 정의되어 있다.
Accept-Language = 1#( language-range [ weight ] )
language-range = <language-range, see [RFC4647], Section 2.1>
Each language-range can be given an associated quality value representing an estimate of the user's preference for the languages specified by that range, as defined in Section 5.3.1. For example,
각 language-range는 Section 5.3.1에 정의된 대로 해당 범위로 지정된 언어에 대한 사용자의 선호도 추정을 나타내는 관련 품질 값을 부여할 수 있다. 예를 들면,
Accept-Language: da, en-gb;q=0.8, en;q=0.7
would mean: "I prefer Danish, but will accept British English and other types of English”.
“나는 덴마크어를 선호하지만, 영국 영어와 다른 종류의 영어를 받아들일 것이다”라는 것을 의미할 것이다.
A request without any Accept-Language header field implies that the user agent will accept any language in response. If the header field is present in a request and none of the available representations for the response have a matching language tag, the origin server can either disregard the header field by treating the response as if it is not subject to content negotiation or honor the header field by sending a 406 (Not Acceptable) response. However, the latter is not encouraged, as doing so can prevent users from accessing content that they might be able to use (with translation software, for example).
Accept-Language 헤더 필드가 없는 요청은 사용자 에이전트가 응답에 대한 모든 언어를 수용하는 것을 의미한다. 요청에 헤더 필드가 있고 응답에 사용할 수 있는 표현 중 매칭하는 언어 태그가 없는 경우, 원서버는 응답을 내용 협상 대상이 아닌 것처럼 처리하여 헤더 필드를 무시하거나 406 (Not Acceptable) 응답을 보내 헤더 필드를 존중할 수 있다. 그러나, 후자는 권장되지 않는다. 그렇게 하는 것은 사용자가 사용할 수 있는 콘텐츠에 접근하는 것을 막을 수 있기 때문이다(예: 번역 소프트웨어 사용).
Note that some recipients treat the order in which language tags are listed as an indication of descending priority, particularly for tags that are assigned equal quality values (no value is the same as q=1). However, this behavior cannot be relied upon. For consistency and to maximize interoperability, many user agents assign each language tag a unique quality value while also listing them in order of decreasing quality. Additional discussion of language priority lists can be found in Section 2.3 of [RFC4647].
일부 수신자는 언어 태그가 내림차순 우선순위의 표시로 나열되는 순서를 취급하는데, 특히 동일한 품질 값이 할당된 태그의 경우(어떤 값도 q=1과 동일하지 않음)에 참고한다. 그러나 이런 행동은 믿을 수 없다. 일관성과 상호운용성을 극대화하기 위해, 많은 사용자 에이전트는 각 언어 태그에 고유한 품질 값을 할당하는 동시에 품질을 낮추는 순서로 나열한다. 언어 우선순위 리스트에 대한 추가 설명은 [RFC4647]의 Section 2.3에서 확인할 수 있다.
For matching, Section 3 of [RFC4647] defines several matching schemes. Implementations can offer the most appropriate matching scheme for their requirements. The "Basic Filtering" scheme ([RFC4647], Section 3.3.1) is identical to the matching scheme that was previously defined for HTTP in Section 14.4 of [RFC2616].
매칭을 위해 [RFC4647]의 Section 3은 몇 가지 매칭 scheme을 정의한다. 구현은 요구사항에 가장 적합한 매칭 scheme을 제공할 수 있다. “기본 필터링” scheme([RFC4647], Section 3.3.1)는 [RFC2616]의 Section 14.4에서 HTTP에 대해 이전에 정의된 매칭 scheme과 동일하다.
It might be contrary to the privacy expectations of the user to send an Accept-Language header field with the complete linguistic preferences of the user in every request (Section 9.7).
모든 요청에서 사용자의 언어 선호도가 완전한 Accept-Language 헤더 필드를 전송하는 것은 사용자의 개인 정보 보호 기대에 반대될 수 있다(Section 9.7).
Since intelligibility is highly dependent on the individual user, user agents need to allow user control over the linguistic preference (either through configuration of the user agent itself or by defaulting to a user controllable system setting). A user agent that does not provide such control to the user MUST NOT send an Accept-Language header field.
이해할 수 있는 사항은 개별 사용자에 따라 크게 좌우되므로 사용자 에이전트는 언어 선호도(사용자 에이전트 자체의 구성을 통해 또는 사용자 제어 가능한 시스템 설정을 기본값으로 설정하여)에 대한 사용자 제어를 허용해야 한다. 사용자에게 이러한 제어를 제공하지 않는 사용자 에이전트는 Accept-Language 헤더 필드를 보내서는 안 된다.(MUST NOT)
Note: User agents ought to provide guidance to users when setting a preference, since users are rarely familiar with the details of language matching as described above. For example, users might assume that on selecting "en-gb", they will be served any kind of English document if British English is not available. A user agent might suggest, in such a case, to add "en" to the list for better matching behavior.
참고: 사용자 에이전트는 사용자가 위에서 설명한 언어 매칭의 세부사항을 거의 알지 못하기 때문에 기본 설정을 설정할 때 사용자에게 지침을 제공해야 한다. 예를 들어, 사용자는 “en-gb”를 선택할 때 영국식 영어를 사용할 수 없는 경우 어떤 종류의 영어 문서도 제공된다고 가정할 수 있다. 이러한 경우 사용자 에이전트는 더 나은 일치 동작을 위해 목록에 “en”을 추가하도록 제안할 수 있다.
5.4 Authentication Credentials
Two header fields are used for carrying authentication credentials, as defined in [RFC7235]. Note that various custom mechanisms for user authentication use the Cookie header field for this purpose, as defined in [RFC6265].
[RFC7235]에서 정의한 인증 자격 증명을 전달하는 데 두 개의 헤더 필드가 사용된다. 사용자 인증을 위한 다양한 사용자 정의 메커니즘은 [RFC6265]에서 정의한 Cookie 헤더 필드를 이러한 목적으로 사용한다는 점에 참고한다.
+———————————+——————————————+
| Header Field Name | Defined in... |
+———————————+——————————————+
| Authorization | Section 4.2 of [RFC7235] |
| Proxy-Authorization | Section 4.4 of [RFC7235] |
+———————————+——————————————+
5.5 Request Context
The following request header fields provide additional information about the request context, including information about the user, user agent, and resource behind the request.
다음 요청 헤더 필드는 요청 뒤에 있는 사용자, 사용자 에이전트 및 리소스에 대한 정보를 포함하여 요청 컨텍스트에 대한 추가 정보를 제공한다.
+——————————+————————+
| Header Field Name | Defined in... |
+——————————+————————+
| From | Section 5.5.1 |
| Referer | Section 5.5.2 |
| User-Agent | Section 5.5.3 |
+——————————+————————+
5.5.1 From
The "From" header field contains an Internet email address for a human user who controls the requesting user agent. The address ought to be machine-usable, as defined by "mailbox" in Section 3.4 of [RFC5322]:
“From” 헤더 필드에는 요청된 사용자 에이전트를 제어하는 사용자의 인터넷 전자 메일 주소가 포함되어 있다. 주소는 [RFC5322]의 Section 3.4에서 “mailbox”에 의해 정의된 대로 기계적으로 사용할 수 있어야 한다.
From = mailbox
mailbox = <mailbox, see [RFC5322], Section 3.4>
An example is:
From: webmaster@example.org
The From header field is rarely sent by non-robotic user agents. A user agent SHOULD NOT send a From header field without explicit configuration by the user, since that might conflict with the user’s privacy interests or their site's security policy.
From 헤더 필드는 비-로보틱 사용자 에이전트에 의해 전송되는 경우가 거의 없다. 사용자 에이전트는 사용자의 개인 정보 보호 또는 사이트의 보안 정책과 충돌할 수 있으므로 사용자의 명시적 구성 없이 From 헤더 필드를 보내서는 안 된다.(SHOULD NOT)
A robotic user agent SHOULD send a valid From header field so that the person responsible for running the robot can be contacted if problems occur on servers, such as if the robot is sending excessive, unwanted, or invalid requests.
로봇 사용자 에이전트는 로봇이 과도한 요청, 원하지 않는 요청 또는 잘못된 요청을 보내는 경우와 같이 서버에서 문제가 발생할 경우 로봇을 실행할 담당자에게 연락할 수 있도록 유효한 From 헤더 필드를 전송해야 한다.(SHOULD)
A server SHOULD NOT use the From header field for access control or authentication, since most recipients will assume that the field value is public information.
대부분의 수신자는 From 헤더 필드 값을 공용 정보로 간주하므로 서버는 접근 제어 또는 인증에 From 헤더 필드를 사용해서는 안 된다.(SHOULD NOT)
5.5.3 User-Agent
The "User-Agent" header field contains information about the user agent originating the request, which is often used by servers to help identify the scope of reported interoperability problems, to work around or tailor responses to avoid particular user agent limitations, and for analytics regarding browser or operating system use. A user agent SHOULD send a User-Agent field in each request unless specifically configured not to do so.
“User-Agent” 헤더 필드에는 보고된 상호운용성 문제의 범위를 식별하고, 특정 사용자 에이전트 제한을 피하기 위한 응답을 조정하거나 피하기 위해 서버가 자주 사용하는 요청의 발생 사용자 에이전트에 대한 정보가 포함되어 있으며 브라우저 또는 운영 체제 사용에 대한 분석을 위해 사용된다. 사용자 에이전트는 특별히 구성되지 않은 한 각 요청에서 User-Agent 필드를 전송해야 한다.(SHOULD)
User-Agent = product *( RWS ( product / comment ) )
The User-Agent field-value consists of one or more product identifiers, each followed by zero or more comments (Section 3.2 of [RFC7230]), which together identify the user agent software and its significant subproducts. By convention, the product identifiers are listed in decreasing order of their significance for identifying the user agent software. Each product identifier consists of a name and optional version.
User-Agent 필드 값은 하나 이상의 product 식별자로 구성되며, 각각 0개 이상의 주석([RFC7230]의 Section 3.2)으로 구성되며, 사용자 에이전트 소프트웨어와 그 중요한 하위 제품을 함께 식별한다. 관용적으로, product 식별자는 사용자 에이전트 소프트웨어 식별에 대한 중요도의 감소 순서에 따라 나열된다. 각 product 식별자는 이름과 선택 버전으로 구성된다.
product = token ["/" product-version]
product-version = token
A sender SHOULD limit generated product identifiers to what is necessary to identify the product; a sender MUST NOT generate advertising or other nonessential information within the product identifier. A sender SHOULD NOT generate information in product-version that is not a version identifier (i.e., successive versions of the same product name ought to differ only in the product-version portion of the product identifier).
발신자는 생성된 product 식별자를 product 식별에 필요한 것으로 제한해야 하며, 발신자는 product 식별자 내에서 광고나 기타 비필수 정보를 생성해서는 안 된다.(MUST NOT) 발신자는 버전 식별자가 아닌 product-version에서 정보를 생성해서는 안 된다.(SHOULD NOT) (즉, 동일한 제품 이름의 연속 버전은 product 식별자의 product-version 부분에서만 달라야 한다).
Example:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
A user agent SHOULD NOT generate a User-Agent field containing needlessly fine-grained detail and SHOULD limit the addition of subproducts by third parties. Overly long and detailed User-Agent field values increase request latency and the risk of a user being identified against their wishes (“fingerprinting").
사용자 에이전트는 불필요한 세부 정보가 포함된 User-Agent 필드를 생성해서는 안 되며,(SHOULD NOT) 제 3자의 하위 제품 추가를 제한해야 한다.(SHOULD) 지나치게 길고 상세한 User-Agent 필드 값은 요청 대기 시간을 증가시키고 사용자가 자신의 뜻에 반하여 식별될 위험(“fingerprinting”)을 증가시킨다.
Likewise, implementations are encouraged not to use the product tokens of other implementations in order to declare compatibility with them, as this circumvents the purpose of the field. If a user agent masquerades as a different user agent, recipients can assume that the user intentionally desires to see responses tailored for that identified user agent, even if they might not work as well for the actual user agent being used.
마찬가지로, 구현은 필드의 목적을 회피하기 때문에 다른 구현의 product 토큰을 사용하여 호환성을 선언하지 않도록 권장된다. 사용자 에이전트가 다른 사용자 에이전트로 위장하는 경우, 수신자는 사용 중인 실제 사용자 에이전트에 대해 제대로 작동하지 않더라도 사용자가 의도적으로 식별된 사용자 에이전트에 적합한 응답을 보기를 원한다고 가정할 수 있다.
6. Response Status Codes
The status-code element is a three-digit integer code giving the result of the attempt to understand and satisfy the request.
status-code 요소는 요청을 이해하고 충족시키려는 시도의 결과를 제공하는 세 자리 정수 코드다.
HTTP status codes are extensible. HTTP clients are not required to understand the meaning of all registered status codes, though such understanding is obviously desirable. However, a client MUST understand the class of any status code, as indicated by the first digit, and treat an unrecognized status code as being equivalent to the x00 status code of that class, with the exception that a recipient MUST NOT cache a response with an unrecognized status code.
HTTP 상태 코드는 확장 가능하다. HTTP 클라이언트는 등록된 모든 상태 코드의 의미를 이해할 필요는 없지만, 그러한 이해는 분명히 바람직하다. 그러나 클라이언트는 첫 번째 숫자로 표시된 상태 코드의 클래스를 이해하고 인식되지 않는 상태 코드를 해당 클래스의 x00 상태 코드에 해당하는 것으로 취급해야 하며,(MUST) 단, 수신자는 인식되지 않는 상태 코드로 응답을 캐시하면 안 된다는 점을 제외한다.(MUST NOT)
For example, if an unrecognized status code of 471 is received by a client, the client can assume that there was something wrong with its request and treat the response as if it had received a 400 (Bad Request) status code. The response message will usually contain a representation that explains the status.
예를 들어, 인식되지 않는 상태 코드 471이 클라이언트에 의해 수신된 경우, 클라이언트는 자신의 요청에 이상이 있다고 가정하고, 응답은 400 (Bad Request) 상태 코드를 받은 것처럼 취급할 수 있다. 응답 메시지에는 일반적으로 상태를 설명하는 표현이 포함될 것이다.
The first digit of the status-code defines the class of response. The last two digits do not have any categorization role. There are five values for the first digit:
상태 코드의 첫 번째 자릿수는 응답 클래스를 정의한다. 마지막 두 자리에는 분류 역할이 없다. 첫 번째 자리에는 다섯 개의 값이 있다.
o 1xx (Informational): The request was received, continuing process
o 1xx (Informational): 요청이 수신되어 프로세스가 계속 진행됨
o 2xx (Successful): The request was successfully received, understood, and accepted
o 2xx (Successful): 요청이 성공적으로 수신, 이해 및 수락됨
o 3xx (Redirection): Further action needs to be taken in order to complete the request
o 3xx (Redirection): 요청을 완료하려면 추가 조치를 취해야 함
o 4xx (Client Error): The request contains bad syntax or cannot be fulfilled
o 4xx (Client Error): 요청에 잘못된 구문이 포함되어 있거나 충족할 수 없음
o 5xx (Server Error): The server failed to fulfill an apparently valid request
o 5xx (Server Error): 서버가 유효한 요청을 수행하지 못함
6.1 Overview of Status Codes
The status codes listed below are defined in this specification, Section 4 of [RFC7232], Section 4 of [RFC7233], and Section 3 of [RFC7235]. The reason phrases listed here are only recommendations -- they can be replaced by local equivalents without affecting the protocol.
아래에 나열된 상태 코드는 이 명세, [RFC7232]의 Section 4, [RFC7233]의 Section 4, [RFC7235]의 Section 3에 정의되어 있다. 여기에 나열된 이유 구문은 권장 사항일 뿐이며, 프로토콜에 영향을 주지 않고 로컬 등가물로 대체될 수 있다.
Responses with status codes that are defined as cacheable by default (e.g., 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501 in this specification) can be reused by a cache with heuristic expiration unless otherwise indicated by the method definition or explicit cache controls [RFC7234]; all other status codes are not cacheable by default.
기본적으로 캐시 가능으로 정의된 상태 코드(e.g., 이 명세의 200, 203, 206, 300, 301, 404, 405, 410, 414 및 501)의 응답은 메서드 정의나 명시적 캐시 제어 [RFC7234]에 달리 명시되지 않는 한 휴리스틱한 만료를 가진 캐시에 의해 재사용할 수 있으며, 다른 모든 상태 코드는 기본적으로 캐시 가능하지 않다.
+———+—————————————————+——————————————+
| Code | Reason-Phrase | Defined in... |
+———+—————————————————+——————————————+
| 100 | Continue | Section 6.2.1 |
| 101 | Switching Protocols | Section 6.2.2 |
| 200 | OK | Section 6.3.1 |
| 201 | Created | Section 6.3.2 |
| 202 | Accepted | Section 6.3.3 |
| 203 | Non-Authoritative Information | Section 6.3.4 |
| 204 | No Content | Section 6.3.5 |
| 205 | Reset Content | Section 6.3.6 |
| 206 | Partial Content | Section 4.1 of [RFC7233] |
| 300 | Multiple Choices | Section 6.4.1 |
| 301 | Moved Permanently | Section 6.4.2 |
| 302 | Found | Section 6.4.3 |
| 303 | See Other | Section 6.4.4 |
| 304 | Not Modified | Section 4.1 of [RFC7232] |
| 305 | Use Proxy | Section 6.4.5 |
| 307 | Temporary Redirect | Section 6.4.7 |
| 400 | Bad Request | Section 6.5.1 |
| 401 | Unauthorized | Section 3.1 of [RFC7235] |
| 402 | Payment Required | Section 6.5.2 |
| 403 | Forbidden | Section 6.5.3 |
| 404 | Not Found | Section 6.5.4 |
| 405 | Method Not Allowed | Section 6.5.5 |
| 406 | Not Acceptable | Section 6.5.6 |
| 407 | Proxy Authentication Required | Section 3.2 of [RFC7235] |
| 408 | Request Timeout | Section 6.5.7 |
| 409 | Conflict | Section 6.5.8 |
| 410 | Gone | Section 6.5.9 |
| 411 | Length Required | Section 6.5.10 |
| 412 | Precondition Failed | Section 4.2 of [RFC7232] |
| 413 | Payload Too Large | Section 6.5.11 |
| 414 | URI Too Long | Section 6.5.12 |
| 415 | Unsupported Media Type | Section 6.5.13 |
| 416 | Range Not Satisfiable | Section 4.4 of [RFC7233] |
| 417 | Expectation Failed | Section 6.5.14 |
| 426 | Upgrade Required | Section 6.5.15 |
| 500 | Internal Server Error | Section 6.6.1 |
| 501 | Not Implemented | Section 6.6.2 |
| 502 | Bad Gateway | Section 6.6.3 |
| 503 | Service Unavailable | Section 6.6.4 |
| 504 | Gateway Timeout | Section 6.6.5 |
| 505 | HTTP Version Not Supported | Section 6.6.6 |
+———+—————————————————+——————————————+
Note that this list is not exhaustive -- it does not include extension status codes defined in other specifications. The complete list of status codes is maintained by IANA. See Section 8.2 for details.
이 목록은 완전한 것은 아니며, 다른 사양에 정의된 확장 상태 코드를 포함하지 않는다는 점에 유의한다. 상태 코드의 전체 목록은 IANA에 의해 유지된다. 자세한 내용은 Section 8.2를 참조한다.
6.2 Informational 1xx
The 1xx (Informational) class of status code indicates an interim response for communicating connection status or request progress prior to completing the requested action and sending a final response. 1xx responses are terminated by the first empty line after the status-line (the empty line signaling the end of the header section). Since HTTP/1.0 did not define any 1xx status codes, a server MUST NOT send a 1xx response to an HTTP/1.0 client.
1xx (Informational) 등급의 상태 코드는 요청된 조치를 완료하고 최종 응답을 보내기 전에 커넥션 상태 또는 요청 진행 상황을 전달하기 위한 중간 응답을 나타낸다. 1xx 응답은 status-line(헤더 부문의 끝을 알리는 빈 라인) 후 첫 번째 빈 라인에 의해 종료된다. HTTP/1.0은 1xx 상태 코드를 정의하지 않았으므로 서버는 1xx 응답을 HTTP/1.0 클라이언트에 전송해서는 안 된다.(MUST NOT)
A client MUST be able to parse one or more 1xx responses received prior to a final response, even if the client does not expect one. A user agent MAY ignore unexpected 1xx responses.
클라이언트는 최종 응답 전에 받은 1xx 응답 중 하나 이상을 구문 분석할 수 있어야 한다.(MUST) 사용자 에이전트는 예기치 않은 1xx 응답을 무시할 수 있다.(MAY)
A proxy MUST forward 1xx responses unless the proxy itself requested the generation of the 1xx response. For example, if a proxy adds an "Expect: 100-continue" field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).
프락시 자체가 1xx 응답 생성을 요청하지 않는 한 프락시는 1xx 응답을 전달해야 한다. 예를 들어, 요청을 전달할 때 프락시가 “Expect: 100-continue” 필드를 추가하는 경우, 해당 100 (Continue) 응답을 전송할 필요가 없다.
6.2.1. 100 Continue
The 100 (Continue) status code indicates that the initial part of a request has been received and has not yet been rejected by the server. The server intends to send a final response after the request has been fully received and acted upon.
100 (Continue) 상태 코드는 요청의 초기 부분이 수신되어 아직 서버에서 거부되지 않았음을 나타낸다. 서버는 요청이 완전히 접수되고 조치된 후 최종 응답을 보내려고 한다.
When the request contains an Expect header field that includes a 100-continue expectation, the 100 response indicates that the server wishes to receive the request payload body, as described in Section 5.1.1. The client ought to continue sending the request and discard the 100 response.
요청이 100-continue를 포함하는 Expect 헤더 필드를 포함할 경우, 100 응답은 Section 5.1.1에 설명한 대로 서버가 요청 페이로드 본문을 수신하기를 원함을 나타낸다. 클라이언트는 요청을 계속 보내고 100 응답을 폐기해야 한다.
If the request did not contain an Expect header field containing the 100-continue expectation, the client can simply discard this interim response.
요청이 100-continue를 포함하는 Expect 헤더 필드를 포함하지 않은 경우, 클라이언트는 이 중간 응답을 간단히 폐기할 수 있다.
6.2.2. 101 Switching Protocols
The 101 (Switching Protocols) status code indicates that the server understands and is willing to comply with the client's request, via the Upgrade header field (Section 6.7 of [RFC7230]), for a change in the application protocol being used on this connection. The server MUST generate an Upgrade header field in the response that indicates which protocol(s) will be switched to immediately after the empty line that terminates the 101 response.
101 (Switching Protocols) 상태 코드는 서버가 이 커넥션에 사용되는 애플리케이션 프로토콜의 변경에 대해 Upgrade 헤더 필드([RFC7230]의 Section 6.7)를 통해 클라이언트의 요청을 이해하고 이를 준수할 의사가 있음을 나타낸다. 서버는 101개의 응답을 종료하는 빈 줄 직후로 전환할 프로토콜을 나타내는 응답에 Upgrade 헤더 필드를 생성해야 한다.(MUST)
It is assumed that the server will only agree to switch protocols when it is advantageous to do so. For example, switching to a newer version of HTTP might be advantageous over older versions, and switching to a real-time, synchronous protocol might be advantageous when delivering resources that use such features.
서버가 프로토콜 전환에 유리한 경우에만 동의할 것으로 가정한다. 예를 들어, 이전 버전보다 새로운 버전의 HTTP로 전환하는 것이 유리할 수 있으며, 이러한 기능을 사용하는 리소스를 제공할 때 실시간 동기식 프로토콜로 전환하는 것이 유리할 수 있다.
6.3. Successful 2xx
The 2xx (Successful) class of status code indicates that the client’s request was successfully received, understood, and accepted.
2xx (Successful) 등급의 상태 코드는 클라이언트의 요청이 성공적으로 수신, 이해 및 수용되었음을 나타낸다.
6.3.1. 200 OK
The 200 (OK) status code indicates that the request has succeeded. The payload sent in a 200 response depends on the request method. For the methods defined by this specification, the intended meaning of the payload can be summarized as:
200 (OK) 상태 코드는 요청이 성공했음을 나타낸다. 200개의 응답으로 전송되는 페이로드는 요청 메서드에 따라 달라진다. 이 명세에 의해 정의된 메서드에 대해, 페이로드의 의도된 의미는 다음과 같이 요약할 수 있다.
GET a representation of the target resource;
GET : 대상 리소스의 표현
HEAD the same representation as GET, but without the representation data;
HEAD : GET와 동일한 표현이지만 표현 데이터가 없는 경우.
POST a representation of the status of, or results obtained from, the action;
POST : 조치의 상태 또는 결과의 표시
PUT, DELETE a representation of the status of the action;
PUT, DELETE : 조치의 상태 표시
OPTIONS a representation of the communications options;
OPTIONS : 통신 옵션의 표시
TRACE a representation of the request message as received by the end server.
TRACE : 엔드 서버에서 수신한 요청 메시지의 표현
Aside from responses to CONNECT, a 200 response always has a payload, though an origin server MAY generate a payload body of zero length.
If no payload is desired, an origin server ought to send 204 (No Content) instead. For CONNECT, no payload is allowed because the successful result is a tunnel, which begins immediately after the 200 response header section.
CONNECT에 대한 응답 외에도, 200개의 응답은 항상 페이로드를 가지고 있지만, 원서버는 0의 페이로드 본문을 생성할 수 있다. 페이로드가 필요 없는 경우, 원서버는 대신 204(No Content)를 전송해야 한다. CONNECT의 경우, 성공적인 결과가 200 응답 헤더 부문 직후에 시작되는 터널이기 때문에 페이로드가 허용되지 않는다.
A 200 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
200개의 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.3.2. 201 Created
The 201 (Created) status code indicates that the request has been fulfilled and has resulted in one or more new resources being created. The primary resource created by the request is identified by either a Location header field in the response or, if no Location field is received, by the effective request URI.
201(Created) 상태 코드는 요청이 이행되어 하나 이상의 새로운 리소스가 생성되었음을 나타낸다. 요청에 의해 생성된 기본 리소스는 응답의 Location 헤더 필드 또는 수신된 Location 필드가 없는 경우 유효한 요청 URI를 통해 식별된다.
The 201 response payload typically describes and links to the resource(s) created. See Section 7.2 for a discussion of the meaning and purpose of validator header fields, such as ETag and Last-Modified, in a 201 response.
201 응답 페이로드에는 일반적으로 생성된 리소스가 설명되고 링크된다. 201 응답에서 ETag 및 Last-Modified와 같은 검증자 헤더 필드의 의미와 목적에 대한 설명은 Section 7.2를 참조한다.
6.3.3. 202 Accepted
The 202 (Accepted) status code indicates that the request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility in HTTP for re-sending a status code from an asynchronous operation.
202 (Accepted) 상태 코드는 요청이 접수되었으나 처리가 완료되지 않았음을 표시한다. 이 요청은 실제로 처리될 때 허용되지 않을 수 있기 때문에 결국 실행될 수도 있고 실행되지 않을 수도 있다. HTTP에는 비동기 작업에서 상태 코드를 재전송할 수 있는 기능이 없다.
The 202 response is intentionally noncommittal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The representation sent with this response ought to describe the request's current status and point to (or embed) a status monitor that can provide the user with an estimate of when the request will be fulfilled.
202 응답은 의도적으로 모호하다. 그 목적은 사용자 에이전트의 서버 커넥션이 완료될 때까지 지속되도록 요구하지 않고 서버가 일부 다른 프로세스(아마도 하루에 한 번만 실행되는 배치 지향 프로세스)에 대한 요청을 수락할 수 있도록 하는 것이다. 이 응답과 함께 전송되는 표현은 요청의 현재 상태를 기술해야 하며, 사용자에게 요청 이행 시기에 대한 추정치를 제공할 수 있는 상태 감시를 나타내거나 포함해야 한다.
6.3.4. 203 Non-Authoritative Information
The 203 (Non-Authoritative Information) status code indicates that the request was successful but the enclosed payload has been modified from that of the origin server's 200 (OK) response by a transforming proxy (Section 5.7.2 of [RFC7230]). This status code allows the proxy to notify recipients when a transformation has been applied, since that knowledge might impact later decisions regarding the content. For example, future cache validation requests for the content might only be applicable along the same request path (through the same proxies).
203 (Non-Authoritative Information) 상태 코드는 요청이 성공적이었으나, 변환 프락시에 의해 원서버의 200 (OK) 응답으로부터 동봉된 페이로드가 수정되었음을 나타낸다([RFC7230]의 Section 5.7.2). 이 상태 코드는 변환이 적용되면 해당 지식이 내용에 대한 이후 결정에 영향을 미칠 수 있으므로 프락시가 수신자에게 통지할 수 있다. 예를 들어 콘텐츠에 대한 향후 캐시 유효성 검사 요청은 동일한 요청 경로(동일한 프락시를 통해)를 통해서만 적용할 수 있다.
The 203 response is similar to the Warning code of 214 Transformation Applied (Section 5.5 of [RFC7234]), which has the advantage of being applicable to responses with any status code.
203 응답은 어떤 상태 코드로든 응답에 적용할 수 있다는 장점이 있는 214 Transformation Apply의 Warning 코드([RFC7234] Section 5.5)와 유사하다.
A 203 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
203 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2).
6.3.5. 204 No Content
The 204 (No Content) status code indicates that the server has successfully fulfilled the request and that there is no additional content to send in the response payload body. Metadata in the response header fields refer to the target resource and its selected representation after the requested action was applied.
204 (No Content) 상태 코드는 서버가 요청을 성공적으로 이행했으며 응답 페이로드 본문으로 보낼 추가 콘텐츠가 없음을 나타낸다. 응답 헤더 필드의 메타데이터는 요청된 작업이 적용된 후 대상 리소스와 선택된 표현을 가리킨다.
For example, if a 204 status code is received in response to a PUT request and the response contains an ETag header field, then the PUT was successful and the ETag field-value contains the entity-tag for the new representation of that target resource.
예를 들어, PUT 요청에 대한 응답으로 204 상태 코드가 수신되고 응답에 Etag 헤더 필드가 포함된 경우 PUT은 성공했으며 ETag field-value은 대상 리소스의 새로운 표현을 위한 entity-tag가 포함되어 있다.
The 204 response allows a server to indicate that the action has been successfully applied to the target resource, while implying that the user agent does not need to traverse away from its current “document view" (if any). The server assumes that the user agent will provide some indication of the success to its user, in accord with its own interface, and apply any new or updated metadata in the response to its active representation.
204 응답은 서버가 대상 리소스에 작업이 성공적으로 적용되었음을 나타내는 동시에 사용자 에이전트가 현재 “문서 보기”(있는 경우)에서 벗어날 필요가 없음을 암시한다. 서버는 사용자 에이전트가 자신의 인터페이스와 일치하여 그 사용자에게 성공에 대한 어떤 표시를 제공할 것으로 가정하고, 그 활성 표현에 대한 응답으로 새로운 메타데이터나 업데이트된 메타데이터를 적용한다.
For example, a 204 status code is commonly used with document editing interfaces corresponding to a "save" action, such that the document being saved remains available to the user for editing. It is also frequently used with interfaces that expect automated data transfers to be prevalent, such as within distributed version control systems.
예를 들어, 204 상태 코드는 일반적으로 “save” 작업에 해당하는 문서 편집 인터페이스와 함께 사용되어, 저장 중인 문서가 사용자가 편집할 수 있도록 유지된다. 또한 분산 버전 제어 시스템 내에서처럼 자동화된 데이터 전송이 보편화될 것으로 예상하는 인터페이스에서도 자주 사용된다.
A 204 response is terminated by the first empty line after the header fields because it cannot contain a message body.
204 응답은 메시지 본문을 포함할 수 없기 때문에 헤더 필드 뒤에 있는 첫 번째 빈 줄에 의해 종료된다.
A 204 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
204 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.3.6. 205 Reset Content
The 205 (Reset Content) status code indicates that the server has fulfilled the request and desires that the user agent reset the "document view", which caused the request to be sent, to its original state as received from the origin server.
205 (Reset Content) 상태 코드는 서버가 요청을 이행했음을 나타내며, 사용자 에이전트가 요청을 보낸 "문서 보기"를 원서버에서 수신한 원래 상태로 재설정했다.
This response is intended to support a common data entry use case where the user receives content that supports data entry (a form, notepad, canvas, etc.), enters or manipulates data in that space, causes the entered data to be submitted in a request, and then the data entry mechanism is reset for the next entry so that the user can easily initiate another input action.
이 응답은 사용자가 데이터 엔트리(폼, 노트패드, 캔버스, 등)를 지원하는 콘텐츠를 수신하고, 그 공간에서 데이터를 입력하거나 조작하고, 입력된 데이터를 요청으로 제출하게 한 후, 다음 입력에 대해 데이터 입력 메커니즘을 재설정하여 사용자가 다른 입력 작업을 쉽게 시작할 수 있도록 하는 공통 데이터 입력 사용 사례를 지원하기 위한 것이다.
Since the 205 status code implies that no additional content will be provided, a server MUST NOT generate a payload in a 205 response. In other words, a server MUST do one of the following for a 205 response: a) indicate a zero-length body for the response by including a Content-Length header field with a value of 0; b) indicate a zero-length payload for the response by including a Transfer-Encoding header field with a value of chunked and a message body consisting of a single chunk of zero-length; or, c) close the connection immediately after sending the blank line terminating the header section.
205 상태 코드는 추가 콘텐츠가 제공되지 않음을 의미하므로 서버는 205 응답에서 페이로드를 생성해서는 안 된다.(MUST NOT)
즉, 서버는 205 응답에 대해 다음 중 하나를 수행해야 한다.(MUST):
a) 값이 0인 Content-Length 헤더 필드를 포함하여 응답의 0 길이 본문을 나타내라
b) 청크 값을 가진 Transfer-Encoding 헤더 필드와 0 길이의 단일 청크로 구성된 메시지 본문을 포함하여 응답에 대한 0 길이의 페이로드로 나타내라
c) 헤더 부문을 종료하는 빈 줄을 보낸 후 즉시 커넥션을 닫아라
6.4 Redirection 3xx
The 3xx (Redirection) class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. If a Location header field (Section 7.1.2) is provided, the user agent MAY automatically redirect its request to the URI referenced by the Location field value, even if the specific status code is not understood. Automatic redirection needs to done with care for methods not known to be safe, as defined in Section 4.2.1, since the user might not wish to redirect an unsafe request.
상태 코드의 3xx (Redirection) 등급은 요청을 이행하기 위해 사용자 에이전트의 추가 조치가 필요하다는 것을 나타낸다. Location 헤더 필드(Section 7.1.2)가 제공되는 경우, 사용자 에이전트는 특정 상태 코드를 이해하지 못하더라도 Location 필드 값이 참조하는 URI로 요청을 자동으로 리다이렉트 할 수 있다. 사용자가 안전하지 않은 요청을 리다이렉트 하기를 원하지 않을 수 있으므로, Section 4.2.1에서 정의한 대로 안전하지 않은 메소드를 주의하여 자동 리다이렉트를 수행해야 한다.
There are several types of redirects:
여기에 리다이렉트의 몇 가지 유형이 있다:
1. Redirects that indicate the resource might be available at a different URI, as provided by the Location field, as in the status codes 301 (Moved Permanently), 302 (Found), and 307 (Temporary Redirect).
1. 상태 코드 301(Moved Permanently), 302 (Found), 307 (Temporary Redirect)과 같이 Location 필드에서 제공하는 대로 다른 URI에서 리소스를 사용할 수 있음을 나타내는 리다이렉트.
2. Redirection that offers a choice of matching resources, each capable of representing the original request target, as in the 300 (Multiple Choices) status code.
2. 300 (Multiple Choices) 상태 코드에서와 같이 각각 원래의 요청 대상을 나타낼 수 있는 매칭 리소스의 선택을 제공하는 리다이렉트.
3. Redirection to a different resource, identified by the Location field, that can represent an indirect response to the request, as in the 303 (See Other) status code.
3. 303 (See Other) 상태 코드에서와 같이 요청에 대한 간접적인 응답을 나타낼 수 있는 위치 필드로 식별된 다른 리소스로의 리다이렉트.
4. Redirection to a previously cached result, as in the 304 (Not Modified) status code.
4. 304 (Not Modified) 상태 코드에서와 같이 이전에 캐시된 결과로 리다이렉트.
Note: In HTTP/1.0, the status codes 301 (Moved Permanently) and 302 (Found) were defined for the first type of redirect ([RFC1945], Section 9.3). Early user agents split on whether the method applied to the redirect target would be the same as the original request or would be rewritten as GET. Although HTTP originally defined the former semantics for 301 and 302 (to match its original implementation at CERN), and defined 303 (See Other) to match the latter semantics, prevailing practice gradually converged on the latter semantics for 301 and 302 as well. The first revision of HTTP/1.1 added 307 (Temporary Redirect) to indicate the former semantics without being impacted by divergent practice. Over 10 years later, most user agents still do method rewriting for 301 and 302; therefore, this specification makes that behavior conformant when the original request is POST.
참고: HTTP/1.0에서는 첫 번째 리디렉션 유형([RFC1945], Section 9.3)에 대한 상태 코드 301(Moved Permanently) 및 302 (Found)가 정의되었다. 초기 사용자 에이전트는 리다이렉트 대상에 적용된 메서드가 원래 요청과 같을 것인지 아니면 GET로 다시 작성될 것인지에 대해 분할했다. HTTP는 원래 301과 302에 대한 이전의 의미론(CERN에서 원래 구현과 일치하도록 하기 위해)을 정의하고, 303 (See Other)을 후자의 의미론과 일치하도록 정의했지만, 지배적인 관행은 301과 302에 대해서도 점차적으로 후자의 의미론에 융합되었다. HTTP/1.1의 첫 번째 개정은 307 (Temporary Redirect)을 추가하여 다양한 관행에 영향을 받지 않고 이전의 의미론을 표시하였다. 10년이 지난 후에도 대부분의 사용자 에이전트는 여전히 301과 302에 대해 메서드 재작성을 한다. 따라서 이 규격은 원래 요청이 POST일 때 그러한 행동을 준수하도록 한다.
A client SHOULD detect and intervene in cyclical redirections (i.e., "infinite" redirection loops).
클라이언트는 주기적 리디렉션(즉, “infinite" 리디렉션 루프)을 감지하고 개입해야 한다.(SHOULD)
Note: An earlier version of this specification recommended a maximum of five redirections ([RFC2068], Section 10.3). Content developers need to be aware that some clients might implement such a fixed limitation.
참고: 이 명세의 이전 버전에서는 최대 5개의 리디렉션([RFC2068], Section 10.3)을 권장했다. 콘텐츠 개발자들은 일부 클라이언트가 그러한 고정된 제한을 구현할 수 있다는 것을 알아야 한다.
6.4.1. 300 Multiple Choices
The 300 (Multiple Choices) status code indicates that the target resource has more than one representation, each with its own more specific identifier, and information about the alternatives is being provided so that the user (or user agent) can select a preferred representation by redirecting its request to one or more of those identifiers. In other words, the server desires that the user agent engage in reactive negotiation to select the most appropriate representation(s) for its needs (Section 3.4).
300 (Multiple Choices) 상태 코드는 대상 리소스가 각각 더 구체적인 식별자를 가진 둘 이상의 표현을 가지고 있음을 나타내며, 사용자(또는 사용자 에이전트)가 해당 식별자 중 하나 이상으로 요청을 리디렉션하여 선호하는 표현을 선택할 수 있도록 대안에 대한 정보가 제공되고 있다. 즉, 서버는 사용자 에이전트가 자신의 요구에 가장 적합한 표현을 선택하기 위해 대응적인 협상에 임하기를 바란다(Section 3.4).
If the server has a preferred choice, the server SHOULD generate a Location header field containing a preferred choice's URI reference. The user agent MAY use the Location field value for automatic redirection.
서버에 기본 선택사항이 있는 경우, 서버는 기본 선택사항의 URI 참조가 포함된 Locaion 헤더 필드를 생성해야 한다.(SHOULD) 사용자 에이전트는 자동 리디렉션에 Location 필드 값을 사용할 수 있다.(MAY)
For request methods other than HEAD, the server SHOULD generate a payload in the 300 response containing a list of representation metadata and URI reference(s) from which the user or user agent can choose the one most preferred. The user agent MAY make a selection from that list automatically if it understands the provided media type. A specific format for automatic selection is not defined by this specification because HTTP tries to remain orthogonal to the definition of its payloads. In practice, the representation is provided in some easily parsed format believed to be acceptable to the user agent, as determined by shared design or content negotiation, or in some commonly accepted hypertext format.
HEAD 이외의 요청 메서드의 경우, 서버는 사용자나 사용자 에이전트가 가장 선호하는 것을 선택할 수 있는 표현 메타데이터 및 URI 참조 목록을 포함하는 300 응답에 페이로드를 생성해야 한다.(SHOULD) 사용자 에이전트는 제공된 미디어 타입을 이해하면 해당 목록에서 자동으로 선택할 수 있다.(MAY) 자동 선택을 위한 특정 형식은 이 명세에 의해 정의되지 않는다. 왜냐하면 HTTP는 그것의 페이로드의 정의와 직교하려고 하기 때문이다. 실제로, 표현은 공유 설계나 콘텐츠 협상으로 결정되는 사용자 에이전트에 의해 허용되는 것으로 믿어지는 일부 쉬운 구문 분석된 형식 또는 일반적으로 인정되는 일부 하이퍼텍스트 형식으로 제공된다.
A 300 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
300 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
Note: The original proposal for the 300 status code defined the URI header field as providing a list of alternative representations, such that it would be usable for 200, 300, and 406 responses and be transferred in responses to the HEAD method. However, lack of deployment and disagreement over syntax led to both URI and Alternates (a subsequent proposal) being dropped from this specification. It is possible to communicate the list using a set of Link header fields [RFC5988], each with a relationship of "alternate", though deployment is a chicken-and-egg problem.
참고: 300 상태 코드에 대한 원래 제안에서는 URI 헤더 필드를 200, 300 및 406 응답에 사용할 수 있고 HEAD 메서드에 대한 응답으로 이전할 수 있는 대체 표현 목록을 제공하는 것으로 정의했다. 그러나 배치 부족과 구문에 대한 의견 불일치로 인해 URI와 Alternates(이후의 제안)가 이 명세에서 모두 삭제되었다. 닭과 달걀의 문제지만 각 “대안”의 관계를 가진 Link 헤더 필드[RFC5988] 집합을 사용하여 목록을 전달할 수 있다.
6.4.2. 301 Moved Permanently
The 301 (Moved Permanently) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs. Clients with link-editing capabilities ought to automatically re-link references to the effective request URI to one or more of the new references sent by the server, where possible.
301(Moved Permanently) 상태 코드는 대상 리소스에 새 영구 URI가 할당되었으며 이 리소스에 대한 향후 참조는 동봉된 URI 중 하나를 사용해야 함을 나타낸다. 링크 편집 기능을 가진 클라이언트는 가능한 경우, 서버가 보낸 하나 이상의 새로운 참조에 유효한 요청 URI에 대한 참조로 자동으로 다시 연결해야 한다.
The server SHOULD generate a Location header field in the response containing a preferred URI reference for the new permanent URI. The user agent MAY use the Location field value for automatic redirection. The server's response payload usually contains a short hypertext note with a hyperlink to the new URI(s).
서버는 새 영구 URI에 대한 기본 URI 참조가 포함된 응답에 Location 헤더 필드를 생성해야 한다.(SHOULD) 사용자 에이전트는 자동 리디렉션에 Location 필드 값을 사용할 수 있다.(MAY) 서버의 응답 페이로드에는 일반적으로 새 URI에 대한 하이퍼링크가 포함된 짧은 하이퍼텍스트 노트가 포함되어 있다.
Note: For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead.
참고: 역사적 이유로, 사용자 에이전트는 후속 요청에 대한 요청 메서드를 POST에서 GET로 변경할 수 있다.(MAY) 이 동작이 원치 않으면 307 (Temporary Redirect) 상태 코드를 대신 사용할 수 있다.
A 301 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
301 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.4.3. 302 Found
The 302 (Found) status code indicates that the target resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client ought to continue to use the effective request URI for future requests.
302 (Found) 상태 코드는 대상 리소스가 일시적으로 다른 URI 아래에 있음을 나타낸다. 리디렉션은 때때로 변경될 수 있으므로 클라이언트는 향후 요청에 대해 유효한 요청 URI를 계속 사용해야 한다.
The server SHOULD generate a Location header field in the response containing a URI reference for the different URI. The user agent MAY use the Location field value for automatic redirection. The server’s response payload usually contains a short hypertext note with a hyperlink to the different URI(s).
서버는 다른 URI에 대한 URI 참조가 포함된 응답에 Location 헤더 필드를 생성해야 한다.(SHOULD) 사용자 에이전트는 자동 리디렉션에 Location 필드 값을 사용할 수 있다.(MAY) 서버의 응답 페이로드에는 일반적으로 다른 URI에 대한 하이퍼링크가 포함된 짧은 하이퍼텍스트 노트가 포함되어 있다.
Note: For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead.
참고: 역사적 이유로, 사용자 에이전트는 후속 요청에 대한 요청 메서드를 POST에서 GET로 변경할 수 있다.(MAY) 이 동작이 원치 않으면 307 (Temporary Redirect) 상태 코드를 대신 사용할 수 있다.
6.4.4. 303 See Other
The 303 (See Other) status code indicates that the server is redirecting the user agent to a different resource, as indicated by a URI in the Location header field, which is intended to provide an indirect response to the original request. A user agent can perform a retrieval request targeting that URI (a GET or HEAD request if using HTTP), which might also be redirected, and present the eventual result as an answer to the original request. Note that the new URI in the Location header field is not considered equivalent to the effective request URI.
303 (See Other) 상태 코드는 원래 요청에 대한 간접적인 응답을 제공하기 위한 Location 헤더 필드에 URI가 표시한 대로 서버가 사용자 에이전트를 다른 리소스로 리다이렉트 하고 있음을 나타낸다. 사용자 에이전트는 또한 리다이렉트 될 수 있는 URI(HTTP를 사용하는 경우 GET 또는 HEAD 요청)를 대상으로 검색 요청을 수행하여 최종 결과를 원래 요청에 대한 응답으로 제시할 수 있다. Location 헤더 필드의 새 URI는 유효한 요청 URI와 동등한 것으로 간주되지 않는다는 점에 참고한다.
This status code is applicable to any HTTP method. It is primarily used to allow the output of a POST action to redirect the user agent to a selected resource, since doing so provides the information corresponding to the POST response in a form that can be separately identified, bookmarked, and cached, independent of the original request.
이 상태 코드는 모든 HTTP 메서드에 적용된다. POST 동작의 출력이 사용자 에이전트를 선택한 리소스로 리다이렉트 하는 데 주로 사용되는데, 이는 POST 응답에 해당하는 정보를 원래 요청과 독립적으로 별도로 식별, 북마크, 캐시할 수 있는 형태로 제공하기 때문이다.
A 303 response to a GET request indicates that the origin server does not have a representation of the target resource that can be transferred by the server over HTTP. However, the Location field value refers to a resource that is descriptive of the target resource, such that making a retrieval request on that other resource might result in a representation that is useful to recipients without implying that it represents the original target resource. Note that answers to the questions of what can be represented, what representations are adequate, and what might be a useful description are outside the scope of HTTP.
GET 요청에 대한 303 응답은 원서버가 HTTP를 통해 서버에 의해 전송될 수 있는 대상 리소스의 표현을 가지고 있지 않음을 나타낸다. 그러나 Location 필드 값은 다른 리소스에 대한 검색 요청을 하면 원래 대상 리소스를 나타내지 않고 수신자에게 유용한 표현이 될 수 있으므로 대상 리소스를 설명하는 리소스를 말한다. 나타낼 수 있는 것, 적절한 표현, 유용한 설명의 질문에 대한 답변은 HTTP의 범위를 벗어난다는 것을 참고한다.
Except for responses to a HEAD request, the representation of a 303 response ought to contain a short hypertext note with a hyperlink to the same URI reference provided in the Location header field.
HEAD 요청에 대한 응답을 제외하고, 303 응답의 표현에는 Location 헤더 필드에 제공된 동일한 URI 참조에 대한 하이퍼링크가 있는 짧은 하이퍼텍스트 노트가 포함되어야 한다.
6.4.5. 305 Use Proxy
The 305 (Use Proxy) status code was defined in a previous version of this specification and is now deprecated (Appendix B).
305 (Use Proxy) 상태 코드는 이 명세의 이전 버전에서 정의되었으며 현재 더 이상 사용되지 않는다(Appendix B).
6.4.6. 306 (Unused)
The 306 status code was defined in a previous version of this specification, is no longer used, and the code is reserved.
306 상태 코드는 이 명세의 이전 버전에서 정의되었으며 더 이상 사용되지 않으며 코드가 예약되어 있다.
6.4.7. 307 Temporary Redirect
The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI. Since the redirection can change over time, the client ought to continue using the original effective request URI for future requests.
307(Temporary Redirect) 상태 코드는 대상 리소스가 일시적으로 다른 URI에 상주하고 있다는 것을 나타내며, 사용자 에이전트는 해당 URI로 자동 리디렉션을 수행할 경우 요청 메서드를 변경 하면 안 된다.(MUST NOT) 리디렉션은 시간이 지남에 따라 변경될 수 있으므로 클라이언트는 향후에 원래의 유효한 요청 URI를 계속 사용해야 한다.
The server SHOULD generate a Location header field in the response containing a URI reference for the different URI. The user agent MAY use the Location field value for automatic redirection. The server’s response payload usually contains a short hypertext note with a hyperlink to the different URI(s).
서버는 다른 URI에 대한 URI 참조가 포함된 응답에 Location 헤더 필드를 생성해야 한다.(SHOULD) 사용자 에이전트는 자동 리디렉션에 Location 필드 값을 사용할 수 있다.(MAY) 서버의 응답 페이로드에는 일반적으로 다른 URI에 대한 하이퍼링크가 포함된 짧은 하이퍼텍스트 노트가 포함되어 있다.
Note: This status code is similar to 302 (Found), except that it does not allow changing the request method from POST to GET. This specification defines no equivalent counterpart for 301 (Moved Permanently) ([RFC7238], however, defines the status code 308 (Permanent Redirect) for this purpose).
참고: 이 상태 코드는 요청 메서드를 POST에서 GET로 변경할 수 없다는 점을 제외하고 302 (Found)와 유사하다. 이 명세는 301 (Moved Permanent)에 해당하는 상대방은 정의하지 않지만(이 목적을 위한 상태 코드 308 (Permanent Redirect)을 정의한다.[RFC7238])
6.5 Client Error 4xx
The 4xx (Client Error) class of status code indicates that the client seems to have erred. Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included representation to the user.
상태 코드의 4xx(Client Error) 등급은 클라이언트가 오류가 발생한 것으로 보인다는 것을 나타낸다. HEAD 요청에 응답하는 경우를 제외하고, 서버는 오류 상황 및 일시적 또는 영구적 조건의 설명이 포함된 표현을 보내야 한다.(SHOULD) 이 상태 코드는 모든 요청 메서드에 적용할 수 있다. 사용자 에이전트는 사용자에게 포함된 표현을 표시해야 한다.(SHOULD)
6.5.1. 400 Bad Request
The 400 (Bad Request) status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
400 (Bad Request) 상태 코드는 클라이언트의 오류로 인식되는 것(e.g., 잘못된 요청 구문, 잘못된 요청 메시지 프레임 또는 기만적인 요청 라우팅)으로 인해 서버가 요청을 처리할 수 없거나 처리할 수 없음을 나타낸다.
6.5.2. 402 Payment Required
The 402 (Payment Required) status code is reserved for future use.
402 (Payment Required) 상태 코드는 향후 사용을 위해 예약되어 있다.
6.5.3. 403 Forbidden
The 403 (Forbidden) status code indicates that the server understood the request but refuses to authorize it. A server that wishes to make public why the request has been forbidden can describe that reason in the response payload (if any).
403 (Forbidden) 상태 코드는 서버가 요청을 이해했지만 승인을 거부함을 나타낸다. 요청이 금지된 이유를 공개하고자 하는 서버는, 응답 페이로드(있는 경우)에서 그 이유를 설명할 수 있다.
If authentication credentials were provided in the request, the server considers them insufficient to grant access. The client SHOULD NOT automatically repeat the request with the same credentials. The client MAY repeat the request with new or different credentials. However, a request might be forbidden for reasons unrelated to the credentials.
요청에 인증 자격 증명이 제공된 경우, 서버는 인증 자격 증명이 액세스 권한을 부여하기에 불충분하다고 간주한다. 클라이언트는 동일한 자격 증명으로 요청을 자동으로 반복해서는 안 된다. (SHOULD NOT) 클라이언트는 새 자격 증명 또는 다른 자격 증명으로 요청을 반복할 수 있다.(MAY) 그러나 인증 정보와 무관한 이유로 요청이 금지될 수 있다.
An origin server that wishes to "hide" the current existence of a forbidden target resource MAY instead respond with a status code of 404 (Not Found).
금지된 대상 리소스의 현재 존재를 “숨기기” 원하는 원서버는 대신 상태 코드 404 (Not Found)로 응답할 수 있다.(MAY)
6.5.4. 404 Not Found
The 404 (Not Found) status code indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. A 404 status code does not indicate whether this lack of representation is temporary or permanent; the 410 (Gone) status code is preferred over 404 if the origin server knows, presumably through some configurable means, that the condition is likely to be permanent.
404 (Not Found) 상태 코드는 원서버가 대상 리소스에 대한 현재 표현을 찾지 못했거나 존재하는 것을 공개하지 않으려는 것을 나타낸다. 404 상태 코드는 이러한 표현 부족이 일시적인지 영구적인지를 나타내지 않는다. 410 (Gone) 상태 코드는 원서버가 어떤 구성 가능한 수단을 통해 조건이 영구적일 가능성이 있다는 것을 알고 있는 경우 404 보다 선호된다.
A 404 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
404 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.5.5. 405 Method Not Allowed
The 405 (Method Not Allowed) status code indicates that the method received in the request-line is known by the origin server but not supported by the target resource. The origin server MUST generate an Allow header field in a 405 response containing a list of the target resource's currently supported methods.
405(Method Not Not Attable) 상태 코드는 request-line에 수신된 메서드가 원서버에 의해 알려져 있지만 대상 리소스에는 지원되지 않음을 나타낸다. 원서버는 대상 리소스의 현재 지원되는 메서드 목록을 포함하는 405 응답에 Allow 헤더 필드를 생성해야 한다.(MUST)
A 405 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
405 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.5.6. 406 Not Acceptable
The 406 (Not Acceptable) status code indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request (Section 5.3), and the server is unwilling to supply a default representation.
406 (Not Acceptable) 상태 코드는 요청에서 수신된 사전 협상 헤더 필드(Section 5.3)에 따라 대상 리소스가 사용자 에이전트가 수용할 수 있는 현재 표현을 가지고 있지 않으며, 서버가 기본 표현을 제공하지 않음을 나타낸다.
The server SHOULD generate a payload containing a list of available representation characteristics and corresponding resource identifiers from which the user or user agent can choose the one most appropriate. A user agent MAY automatically select the most appropriate choice from that list. However, this specification does not define any standard for such automatic selection, as described in Section 6.4.1.
서버는 사용자 또는 사용자 에이전트가 가장 적합한 것을 선택할 수 있는 사용 가능한 표현 특성 및 해당 리소스 식별자 목록을 포함하는 페이로드를 생성해야 한다.(SHOULD) 사용자 에이전트는 해당 목록에서 가장 적절한 선택을 자동으로 선택할 수 있다.(MAY) 그러나 이 명세는 Section 6.4.1에 설명된 바와 같이 그러한 자동 선택에 대한 표준을 정의하지 않는다.
6.5.7. 408 Request Timeout
The 408 (Request Timeout) status code indicates that the server did not receive a complete request message within the time that it was prepared to wait. A server SHOULD send the "close" connection option (Section 6.1 of [RFC7230]) in the response, since 408 implies that the server has decided to close the connection rather than continue waiting. If the client has an outstanding request in transit, the client MAY repeat that request on a new connection.
408(Request Timeout) 상태 코드는 서버가 대기할 준비가 된 시간 내에 완전한 요청 메시지를 수신하지 않았음을 나타낸다. 408은 서버가 계속 대기하기 보다는 커넥션을 종료하기로 결정하였음을 의미하므로, 서버는 응답으로 “close” 커넥션 옵션([RFC7230]의 Section 6.1)을 보내야 한다.(SHOULD) 클라이언트가 미결 요청을 가지고 있는 경우, 클라이언트는 새로운 커넥션에서 해당 요청을 반복할 수 있다.(MAY)
6.5.8. 409 Conflict
The 409 (Conflict) status code indicates that the request could not be completed due to a conflict with the current state of the target resource. This code is used in situations where the user might be able to resolve the conflict and resubmit the request. The server SHOULD generate a payload that includes enough information for a user to recognize the source of the conflict.
409 (Conflict) 상태 코드는 대상 리소스의 현재 상태와 충돌하여 요청을 완료할 수 없음을 나타낸다. 이 코드는 사용자가 충돌을 해결하고 요청을 다시 제출할 수 있는 상황에서 사용된다. 서버는 사용자가 충돌의 원인을 인식하기에 충분한 정보를 포함하는 페이로드를 생성해야 한다.(SHOULD)
Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the representation being PUT included changes to a resource that conflict with those made by an earlier (third-party) request, the origin server might use a 409 response to indicate that it can't complete the request. In this case, the response representation would likely contain information useful for merging the differences based on the revision history.
PUT 요청에 대응하여 충돌이 발생할 가능성이 가장 높다. 예를 들어 버전 지정이 사용 중이고 PUT에 있는 표현에 이전 (서드 파티) 요청에 의해 수행된 리소스와 충돌하는 리소스의 변경사항이 포함된 경우, 원서버는 요청을 완료할 수 없음을 나타내기 위해 409 응답을 사용할 수 있다. 이 경우, 응답 표현에는 개정 이력에 기초한 차이를 병합하는 데 유용한 정보가 포함될 수 있다.
6.5.9. 410 Gone
The 410 (Gone) status code indicates that access to the target resource is no longer available at the origin server and that this condition is likely to be permanent. If the origin server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) ought to be used instead.
410 (Gone) 상태 코드는 대상 리소스에 대한 액세스를 원서버에서 더 이상 사용할 수 없으며 이 조건이 영구적일 가능성이 있음을 나타낸다. 원본 서버가 조건이 영구적인지 여부를 알 수 없거나 확인할 수 있는 기능이 없는 경우, 대신에 상태 코드 404(Not Found)를 사용해야 한다.
The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer associated with the origin server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.
410 응답은 주로 수신자에게 리소스를 의도적으로 사용할 수 없으며 서버 소유자가 해당 리소스에 대한 원격 링크를 제거하기를 원한다는 것을 통지함으로써 웹 유지보수의 작업을 지원하기 위한 것이다. 이러한 이벤트는 제한된 시간의 홍보 서비스 및 원서버의 사이트와 더 이상 연관되지 않는 개인에 속하는 리소스에 대해 일반적이다. 영구적으로 사용할 수 없는 모든 리소스를 “gone”으로 표시하거나 서버 소유자의 재량에 맡겨진 어떤 시간 동안도 표시를 유지할 필요는 없다.
A 410 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
410 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.5.10. 411 Length Required
The 411 (Length Required) status code indicates that the server refuses to accept the request without a defined Content-Length (Section 3.3.2 of [RFC7230]). The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message body in the request message.
411 (Length Required) 상태 코드는 서버가 정의된 Content-Length ([RFC7230]의 Section 3.3.2) 없이 요청을 거부함을 나타낸다. 클라이언트는 요청 메시지에 메시지 본문의 길이가 포함된 유효한 Content-Length 헤더 필드를 추가하는 경우 요청을 반복할 수 있다.(MAY)
6.5.11. 413 Payload Too Large
The 413 (Payload Too Large) status code indicates that the server is refusing to process a request because the request payload is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.
413 (Payload Too Large) 상태 코드는 요청 페이로드가 서버가 처리할 의향이 있거나 처리할 수 있는 것보다 크기 때문에, 서버가 요청을 거부함을 나타낸다. 서버는 클라이언트가 요청을 계속하지 못하도록 커넥션을 닫는다.(MAY)
If the condition is temporary, the server SHOULD generate a Retry-After header field to indicate that it is temporary and after what time the client MAY try again.
일시적 조건인 경우 서버는 일시적임을 나타내기 위해 Retry-After 헤더 필드를 생성하여 클라이언트가 다시 시도할 수 있는(MAY) 시간 이후를 표시해야 한다.(SHOULD)
6.5.12. 414 URI Too Long
The 414 (URI Too Long) status code indicates that the server is refusing to service the request because the request-target (Section 5.3 of [RFC7230]) is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself) or when the server is under attack by a client attempting to exploit potential security holes.
414 (URI Too Long) 상태 코드는 요청 대상([RFC7230]의 Section 5.3)이 서버가 해석하려는 것보다 길기 때문에, 서버가 요청의 거부함을 나타낸다. 이 드문 조건은 클라이언트가 긴 쿼리 정보가 있는 GET 요청으로 POST 요청을 부적절하게 변환했을 때, 클라이언트가 “black hole” 리디렉션(예: 자체 접미사를 가리키는 리다이렉트된 URI 접두사)로 내려갔을 때, 또는 서버가 잠재적인 보안 구멍을 이용하려고 시도하는 클라이언트의 공격을 받을 때에만 발생할 수 있다.
A 414 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
414 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.5.13. 415 Unsupported Media Type
The 415 (Unsupported Media Type) status code indicates that the origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource. The format problem might be due to the request's indicated Content-Type or Content-Encoding, or as a result of inspecting the data directly.
415 (Unsupported Media Type) 상태 코드는 대상 리소스에 대해 이 메서드로 지원하지 않는 형식의 페이로드가 있기 때문에, 원서버가 요청을 거부함을 나타낸다. 형식 문제는 요청에 표현된 Content-Type 또는 Content-Encoding 또는 데이터를 직접 검사한 결과일 수 있다.
6.5.14. 417 Expectation Failed
The 417 (Expectation Failed) status code indicates that the expectation given in the request's Expect header field (Section 5.1.1) could not be met by at least one of the inbound servers.
417 (Expectation Failed) 상태 코드는 요청의 Expect 헤더 필드(Section 5.1.1)에 주어진 기대치를 인바운드 서버 중 하나 이상이 충족할 수 없음을 나타낸다.
6.5.15. 426 Upgrade Required
The 426 (Upgrade Required) status code indicates that the server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol. The server MUST send an Upgrade header field in a 426 response to indicate the required protocol(s) (Section 6.7 of [RFC7230]).
426 (Upgrade Required) 상태 코드는 서버가 현재 프로토콜을 사용하여 요청을 수행하기를 거부하지만 클라이언트가 다른 프로토콜로 업그레이드한 후 요청을 수행할 의사가 있음을 나타낸다. 서버는 반드시 필요한 프로토콜을 나타내기 위해 426 응답으로 Upgrade 헤더 필드를 전송해야 한다.(MUST) ([RFC7230]의 Section 6.7).
Example:
예를들어:
HTTP/1.1 426 Upgrade Required
Upgrade: HTTP/3.0
Connection: Upgrade
Content-Length: 53
Content-Type: text/plain
This service requires use of the HTTP/3.0 protocol.
이 서비스는 HTTP/3.0 프로토콜 사용을 필요로 한다.
6.6. Server Error 5xx
The 5xx (Server Error) class of status code indicates that the server is aware that it has erred or is incapable of performing the requested method. Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition. A user agent SHOULD display any included representation to the user. These response codes are applicable to any request method.
상태 코드의 5xx (Server Error) 등급은 서버가 요청된 메서드를 잘못했거나 수행할 수 없음을 알고 있음을 나타낸다. HEAD 요청에 응답하는 경우를 제외하고, 서버는 오류 상황에 대한 설명과 일시적 조건인지 영구적인 조건인지를 포함하는 표현을 보내야 한다. 사용자 에이전트는 사용자에게 포함된 모든 표현을 표시해야 한다.(SHOULD) 이 응답 코드는 모든 요청 메서드에 적용된다.
6.6.1. 500 Internal Server Error
The 500 (Internal Server Error) status code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request.
500 (Internal Server Error) 상태 코드는 서버가 요청을 이행하지 못하게 하는 예기치 않은 조건을 만났음을 나타낸다.
6.6.2. 501 Not Implemented
The 501 (Not Implemented) status code indicates that the server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.
501(Not Implemented) 상태 코드는 서버가 요청을 이행하는 데 필요한 기능을 지원하지 않음을 나타낸다. 이것은 서버가 요청 메서드를 인식하지 못하고 어떤 리소스에도 그것을 지원할 수 없을 때 적절한 대응이다.
A 501 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [RFC7234]).
501 응답은 기본적으로 캐시할 수 있다. 즉, 메서드 정의나 명시적 캐시 제어에 의해 달리 명시되지 않는 한([RFC7234]의 Section 4.2.2 참조).
6.6.3. 502 Bad Gateway
The 502 (Bad Gateway) status code indicates that the server, while acting as a gateway or proxy, received an invalid response from an inbound server it accessed while attempting to fulfill the request.
502 (Bad Gateway) 상태 코드는 서버가 게이트웨이 또는 프락시 역할을 하는 동안 요청을 이행하려고 시도하는 동안 액세스한 인바운드 서버로부터 잘못된 응답을 수신했음을 나타낸다.
6.6.4. 503 Service Unavailable
The 503 (Service Unavailable) status code indicates that the server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. The server MAY send a Retry-After header field (Section 7.1.3) to suggest an appropriate amount of time for the client to wait before retrying the request.
503 (Service Unavailable) 상태 코드는 서버가 현재 일시적인 과부하 또는 예정된 유지보수로 인해 요청을 처리할 수 없음을 나타내며, 이는 어느 정도 지연된 후에 완화될 가능성이 높다. 서버는 Retry-After 헤더 필드(Section 7.1.3)를 보내 클라이언트가 요청을 재시도하기 전에 대기할 시간을 제안할 수 있다.(MAY)
Note: The existence of the 503 status code does not imply that a server has to use it when becoming overloaded. Some servers might simply refuse the connection.
참고: 503 상태 코드가 존재한다고 해서 서버가 과부하가 걸렸을 때 이를 사용해야 하는 것은 아니다. 일부 서버는 단순히 커넥션을 거부할 수 있다.
6.6.5. 504 Gateway Timeout
The 504 (Gateway Timeout) status code indicates that the server, while acting as a gateway or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request.
504 (Gateway Timeout) 상태 코드는 서버가 게이트웨이 또는 프락시 역할을 하는 동안 요청을 완료하기 위해 액세스해야 하는 업스트림 서버로부터 적시에 응답을 받지 못했음을 나타낸다.
6.6.6. 505 HTTP Version Not Supported
The 505 (HTTP Version Not Supported) status code indicates that the server does not support, or refuses to support, the major version of HTTP that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in Section 2.6 of [RFC7230], other than with this error message. The server SHOULD generate a representation for the 505 response that describes why that version is not supported and what other protocols are supported by that server.
505 (HTTP Version Not Supported) 상태 코드는 서버가 요청 메시지에 사용된 HTTP의 주요 버전을 지원하지 않거나 지원을 거부함을 나타낸다. 서버는 [RFC7230]의 Section 2.6에서 설명한 것과 같이, 이 오류 메시지를 제외하고 클라이언트와 동일한 주요 버전을 사용하여 요청을 완료할 수 없거나 요청을 완료할 의사가 없음을 나타내고 있다. 서버는 해당 버전이 지원되지 않는 이유와 해당 서버에서 지원하는 다른 프로토콜을 설명하는 505 응답에 대한 표현을 생성해야 한다.(SHOULD)
7. Response Header Fields
The response header fields allow the server to pass additional information about the response beyond what is placed in the status-line. These header fields give information about the server, about further access to the target resource, or about related resources.
응답 헤더 필드는 서버가 status-line에 배치된 정보를 넘어 응답에 대한 추가 정보를 전달할 수 있도록 한다. 이러한 헤더 필드는 서버에 대한 정보, 대상 리소스에 대한 추가 액세스 또는 관련 리소스에 대한 정보를 제공한다.
Although each response header field has a defined meaning, in general, the precise semantics might be further refined by the semantics of the request method and/or response status code.
각 응답 헤더 필드에는 정의된 의미가 있지만, 일반적으로 정확한 의미론은 요청 메서드 및/또는 응답 상태 코드의 의미에 의해 더욱 세분화될 수 있다.
7.1. Control Data
Response header fields can supply control data that supplements the status code, directs caching, or instructs the client where to go next.
응답 헤더 필드는 상태 코드를 보충하거나 캐시를 지시하거나 클라이언트에 다음에 어디로 가야 하는지 지시하는 제어 데이터를 제공할 수 있다.
+——————————+——————————————+
| Header Field Name | Defined in... |
+——————————+——————————————+
| Age | Section 5.1 of [RFC7234] |
| Cache-Control | Section 5.2 of [RFC7234] |
| Expires | Section 5.3 of [RFC7234] |
| Date | Section 7.1.1.2 |
| Location | Section 7.1.2 |
| Retry-After | Section 7.1.3 |
| Vary | Section 7.1.4 |
| Warning | Section 5.5 of [RFC7234] |
+——————————+——————————————+
7.1.1. Origination Date
7.1.1.1. Date/Time Formats
Prior to 1995, there were three different formats commonly used by servers to communicate timestamps. For compatibility with old implementations, all three are defined here. The preferred format is a fixed-length and single-zone subset of the date and time specification used by the Internet Message Format [RFC5322].
1995년 이전에는 서버가 타임스탬프를 통신하기 위해 일반적으로 사용하는 세 가지 다른 형식이 있었다. 기존 구현과의 호환성을 위해 세 가지 모두 여기에 정의되어 있다. 선호하는 형식은 인터넷 메시지 형식[RFC5322]에서 사용하는 날짜 및 시간 규격의 fixed-length 및 single-zone 부분 집합이다.
HTTP-date = IMF-fixdate / obs-date
An example of the preferred format is
선호하는 형식의 예는
Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate
Examples of the two obsolete formats are
사용되지 않는 두 형식의 예는 다음과 같다.
Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
A recipient that parses a timestamp value in an HTTP header field MUST accept all three HTTP-date formats. When a sender generates a header field that contains one or more timestamps defined as HTTP-date, the sender MUST generate those timestamps in the IMF-fixdate format.
HTTP 헤더 필드에서 타임스탬프 값을 구문 분석하는 수신자는 세 가지 HTTP-date 형식을 모두 수용해야 한다.(MUST) 발신자가 HTTP-date로 정의된 하나 이상의 타임스탬프를 포함하는 헤더 필드를 생성할 때, 발신자는 반드시 IMF-fixdate 형식으로 타임스탬프를 생성해야 한다.(MUST)
An HTTP-date value represents time as an instance of Coordinated Universal Time (UTC). The first two formats indicate UTC by the three-letter abbreviation for Greenwich Mean Time, "GMT", a predecessor of the UTC name; values in the asctime format are assumed to be in UTC. A sender that generates HTTP-date values from a local clock ought to use NTP ([RFC5905]) or some similar protocol to synchronize its clock to UTC.
HTTP 날짜 값은 UTC(Coordinated Universal Time)의 인스턴스로서의 시간을 나타낸다. 처음 두 형식은 UTC 이름의 이전 버전인 “GMT”의 3글자 약어로 UTC를 나타내며, asctime 형식의 값은 UTC로 가정한다. 로컬 클럭에서 HTTP 날짜 값을 생성하는 발신자는 시계를 UTC에 동기화하기 위해 NTP([RFC5905]) 또는 이와 유사한 프로토콜을 사용해야 한다.
Preferred format:
선호되는 형식
IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
; fixed length/zone/capitalization subset of the format
; see Section 3.3 of [RFC5322]
day-name = %x4D.6F.6E ; "Mon", case-sensitive
/ %x54.75.65 ; "Tue", case-sensitive
/ %x57.65.64 ; "Wed", case-sensitive
/ %x54.68.75 ; "Thu", case-sensitive
/ %x46.72.69 ; "Fri", case-sensitive
/ %x53.61.74 ; "Sat", case-sensitive
/ %x53.75.6E ; "Sun", case-sensitive
date1 = day SP month SP year
; e.g., 02 Jun 1982
day = 2DIGIT
month = %x4A.61.6E ; "Jan", case-sensitive
/ %x46.65.62 ; "Feb", case-sensitive
/ %x4D.61.72 ; "Mar", case-sensitive
/ %x41.70.72 ; "Apr", case-sensitive
/ %x4D.61.79 ; "May", case-sensitive
/ %x4A.75.6E ; "Jun", case-sensitive
/ %x4A.75.6C ; "Jul", case-sensitive
/ %x41.75.67 ; "Aug", case-sensitive
/ %x53.65.70 ; "Sep", case-sensitive
/ %x4F.63.74 ; "Oct", case-sensitive
/ %x4E.6F.76 ; "Nov", case-sensitive
/ %x44.65.63 ; "Dec", case-sensitive
year = 4DIGIT
GMT = %x47.4D.54 ; "GMT", case-sensitive
time-of-day = hour ":" minute ":" second
; 00:00:00 - 23:59:60 (leap second)
hour = 2DIGIT
minute = 2DIGIT
second = 2DIGIT
Obsolete formats:
쇠퇴한 형식
obs-date = rfc850-date / asctime-date
rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
date2 = day "-" month "-" 2DIGIT
; e.g., 02-Jun-82
day-name-l = %x4D.6F.6E.64.61.79 ; "Monday", case-sensitive
/ %x54.75.65.73.64.61.79 ; "Tuesday", case-sensitive
/ %x57.65.64.6E.65.73.64.61.79 ; "Wednesday", case-sensitive
/ %x54.68.75.72.73.64.61.79 ; "Thursday", case-sensitive
/ %x46.72.69.64.61.79 ; "Friday", case-sensitive
/ %x53.61.74.75.72.64.61.79 ; "Saturday", case-sensitive
/ %x53.75.6E.64.61.79 ; "Sunday", case-sensitive
asctime-date = day-name SP date3 SP time-of-day SP year
date3 = month SP ( 2DIGIT / ( SP 1DIGIT ))
; e.g., Jun 2
HTTP-date is case sensitive. A sender MUST NOT generate additional whitespace in an HTTP-date beyond that specifically included as SP in the grammar. The semantics of day-name, day, month, year, and time-of-day are the same as those defined for the Internet Message Format constructs with the corresponding name ([RFC5322], Section 3.3).
HTTP-date는 대소문자를 구분한다. 발신자는 문법에 SP로 구체적으로 포함된 공간을 초과하여 HTTP-date에 추가 공백을 생성해서는 안 된다.(MUST NOT) day-name, day, month, year 및 time-of-day의 의미는 해당 이름([RFC5322], Section 3.3)과 Internet Message Format 구성에 대해 정의된 것과 동일하다.
Recipients of a timestamp value in rfc850-date format, which uses a two-digit year, MUST interpret a timestamp that appears to be more than 50 years in the future as representing the most recent year in the past that had the same last two digits.
두 자릿수를 사용하는 rfc850-date 형식의 타임스탬프 값을 받는 사람은 앞으로 50년 이상 된 것으로 보이는 타임스탬프를 마지막 two-digit가 같았던 과거의 가장 최근 연도를 나타내는 것으로 해석해야 한다.(MUST)
Recipients of timestamp values are encouraged to be robust in parsing timestamps unless otherwise restricted by the field definition. For example, messages are occasionally forwarded over HTTP from a non-HTTP source that might generate any of the date and time specifications defined by the Internet Message Format.
타임스탬프 값의 수신자는 필드 정의에 의해 달리 제한되지 않는 한 타임스탬프를 구문 분석할 때 견고한 것을 권장한다. 예를 들어, Internet Message Format에 의해 정의된 날짜 및 시간 사양을 생성할 수 있는 비 HTTP 소스에서 메시지를 HTTP를 통해 전달하는 경우가 있다.
Note: HTTP requirements for the date/time stamp format apply only to their usage within the protocol stream. Implementations are not required to use these formats for user presentation, request logging, etc.
참고: date/time 스탬프 형식에 대한 HTTP 요구 사항은 프로토콜 스트림 내의 사용에만 적용된다. 사용자 프레젠테이션, 요청 기록 등에 이러한 형식을 사용할 필요는 없다.
7.1.1.2. Date
The "Date" header field represents the date and time at which the message was originated, having the same semantics as the Origination Date Field (orig-date) defined in Section 3.6.1 of [RFC5322]. The field value is an HTTP-date, as defined in Section 7.1.1.1.
“Date” 헤더 필드는 [RFC5322]의 Section 3.6.1에서 정의한 Origination Date Field(orig-date)와 동일한 의미를 가지며 메시지가 발생한 날짜와 시간을 나타낸다. 필드 값은 Section 7.1.1.1에서 정의한 HTTP-date다.
Date = HTTP-date
An example is
예를들어
Date: Tue, 15 Nov 1994 08:12:31 GMT
When a Date header field is generated, the sender SHOULD generate its field value as the best available approximation of the date and time of message generation. In theory, the date ought to represent the moment just before the payload is generated. In practice, the date can be generated at any time during message origination.
Date 헤더 필드가 생성될 때, 발신자는 메시지 생성 날짜와 시간에 대한 가장 근사치로서 필드 값을 생성해야 한다.(SHOULD) 이론적으로, 날짜는 페이로드가 생성되기 바로 전의 순간을 나타내야 한다. 실제로, 그 날짜는 메시지 작성 중에 언제라도 생성될 수 있다.
An origin server MUST NOT send a Date header field if it does not have a clock capable of providing a reasonable approximation of the current instance in Coordinated Universal Time. An origin server MAY send a Date header field if the response is in the 1xx (Informational) or 5xx (Server Error) class of status codes. An origin server MUST send a Date header field in all other cases.
원서버는 Coordinated Universal Time(UTC)에서 현재 인스턴스의 합당한 근사치를 제공할 수 있는 시계가 없는 경우 Date 헤더 필드를 보내서는 안 된다.(MUST NOT) 응답이 상태 코드의 1xx (Informational) 또는 5xx (Server Error) 등급인 경우 원서버는 Date 헤더 필드를 보낼 수 있다.(MAY) 원서버는 다른 모든 경우 Date 헤더 필드를 전송해야 한다.(MUST)
A recipient with a clock that receives a response message without a Date header field MUST record the time it was received and append a corresponding Date header field to the message's header section if it is cached or forwarded downstream.
Date 헤더 필드 없이 시계와 응답 메시지를 수신하는 수신자는 수신된 시간을 기록하고 해당 Date 헤더 필드가 캐시되거나 다운스트림에서 전달되는 경우 메시지의 헤더 부문에 해당 Date 헤더 필드를 추가해야 한다.(MUST)
A user agent MAY send a Date header field in a request, though generally will not do so unless it is believed to convey useful information to the server. For example, custom applications of HTTP might convey a Date if the server is expected to adjust its interpretation of the user's request based on differences between the user agent and server clocks.
사용자 에이전트는 요청으로 Date 헤더 필드를 보낼 수 있지만,(MAY) 서버에 유용한 정보를 전달하는 것으로 간주되지 않는 한 일반적으로 그렇게 하지 않는다. 예를 들어, HTTP의 사용자 정의 애플리케이션은 서버가 사용자 에이전트와 서버 시계 간의 차이를 기반으로 사용자 요청에 대한 해석을 조정할 것으로 기대되는 경우 Date를 전달할 수 있다.
7.1.2. Location
The "Location" header field is used in some responses to refer to a specific resource in relation to the response. The type of relationship is defined by the combination of request method and status code semantics.
“Location” 헤더 필드는 응답과 관련된 특정 리소스를 참조하기 위해 일부 응답에 사용된다. 관계의 유형은 요청 메서드와 상태 코드 의미론의 조합에 의해 정의된다.
Location = URI-reference
The field value consists of a single URI-reference. When it has the form of a relative reference ([RFC3986], Section 4.2), the final value is computed by resolving it against the effective request URI ([RFC3986], Section 5).
필드 값은 단일 URI-reference로 구성된다. 상대적 참조([RFC3986], Section 4.2)의 형태를 가지고 있을 때 유효한 요청 URI([RFC3986], Section 5)에 반하여 최종 값을 계산한다.
For 201 (Created) responses, the Location value refers to the primary resource created by the request. For 3xx (Redirection) responses, the Location value refers to the preferred target resource for automatically redirecting the request.
201 (Created) 응답의 경우, Location 값은 요청에 의해 생성된 기본 리소스를 말한다. 3xx (Redirection) 응답의 경우, Location 값은 요청을 자동으로 리디렉션하기 위한 기본 대상 리소스를 가리킨다.
If the Location value provided in a 3xx (Redirection) response does not have a fragment component, a user agent MUST process the redirection as if the value inherits the fragment component of the URI reference used to generate the request target (i.e., the redirection inherits the original reference's fragment, if any).
3xx (Redirection) 응답에 제공된 Location 값에 단편 구성 요소가 없는 경우, 사용자 에이전트는 그 값이 요청 대상을 생성하는 데 사용된 URI 참조의 단편 구성 요소(즉, 리디렉션은 원래 참조의 파편을 상속하는 경우)를 상속하는 것처럼 리디렉션을 처리해야 한다.
For example, a GET request generated for the URI reference "http://www.example.org/~tim" might result in a 303 (See Other) response containing the header field:
예를 들어, URI 참조 “http://www.example.org/~tim” 에 대해 생성된 GET 요청은 헤더 필드를 포함하는 303(See Other) 응답을 초래할 수 있다.
Location: /People.html#tim
which suggests that the user agent redirect to “http://www.example.org/People.html#tim"
사용자 에이전트가 “http://www.example.org/People.html#tim" 으로 리디렉션됨을 암시함
Likewise, a GET request generated for the URI reference "http://www.example.org/index.html#larry" might result in a 301 (Moved Permanently) response containing the header field:
마찬가지로, URI 참조 “http://www.example.org/index.html#larry" 에 대해 생성된 GET 요청은 다음과 같은 헤더 필드를 포함하는 301 (Moved Permanently) 응답을 초래할 수 있다.
Location: http://www.example.net/index.html
which suggests that the user agent redirect to "http://www.example.net/index.html#larry", preserving the original fragment identifier.
이는 사용자 에이전트가 원본 단편 식별자를 보존하면서 "http://www.example.net/index.html#larry"으로 리디렉션함을 시사한다.
There are circumstances in which a fragment identifier in a Location value would not be appropriate. For example, the Location header field in a 201 (Created) response is supposed to provide a URI that is specific to the created resource.
Location 값의 단편 식별자가 적절하지 않은 상황이 있다. 예를 들어 201 (Created) 응답의 Location 헤더 필드는 생성된 리소스와 관련된 URI를 제공하도록 되어 있다.
Note: Some recipients attempt to recover from Location fields that are not valid URI references. This specification does not mandate or define such processing, but does allow it for the sake of robustness.
참고: 일부 수신자는 유효한 URI 참조가 아닌 Location 필드에서 복구를 시도한다. 이 명세는 그러한 처리를 위임하거나 정의하지 않지만, 견고함을 위해 허용한다.
Note: The Content-Location header field (Section 3.1.4.2) differs from Location in that the Content-Location refers to the most specific resource corresponding to the enclosed representation. It is therefore possible for a response to contain both the Location and Content-Location header fields.
참고: Content-Location 헤더 필드(Section 3.1.4.2)는 Content-Location이 동봉된 표현에 해당하는 가장 구체적인 리소스를 지칭한다는 점에서 Location과 다르다. 따라서 응답에 Location 및 Content-Location 헤더 필드가 모두 포함될 수 있다.
7.1.3. Retry-After
Servers send the "Retry-After" header field to indicate how long the user agent ought to wait before making a follow-up request. When sent with a 503 (Service Unavailable) response, Retry-After indicates how long the service is expected to be unavailable to the client. When sent with any 3xx (Redirection) response, Retry-After indicates the minimum time that the user agent is asked to wait before issuing the redirected request.
서버는 “Retry-After” 헤더 필드를 보내 사용자 에이전트가 후속 요청을 하기 전에 얼마나 기다려야 하는지 표시한다. 503 (Service Unavailable) 응답과 함께 전송된 경우 Retry-After에는 클라이언트가 서비스를 사용할 수 없을 것으로 예상되는 기간이 표시된다. 3xx (Redirection) 응답과 함께 전송되는 경우 Retry-After에는 리디렉션 요청을 실행하기 전에 사용자 에이전트가 대기하도록 요청하는 최소 시간이 표시된다.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
이 필드의 값은 HTTP-date 또는 응답 수신 후 지연 시간(초)이 될 수 있다.
Retry-After = HTTP-date / delay-seconds
A delay-seconds value is a non-negative decimal integer, representing time in seconds.
delay-seconds 값은 음이 아닌 소수 정수로 시간(초)을 나타낸다.
delay-seconds = 1*DIGIT
Two examples of its use are
두 가지 사용예시로
Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
Retry-After: 120
In the latter example, the delay is 2 minutes.
후자는 2분 지연이다.
7.1.4. Vary
The "Vary" header field in a response describes what parts of a request message, aside from the method, Host header field, and request target, might influence the origin server's process for selecting and representing this response. The value consists of either a single asterisk ("*") or a list of header field names (case-insensitive).
응답의 “Vary” 헤더 필드는 메서드, Host 헤더 필드 및 요청 대상을 제외하고 요청 메시지의 어떤 부분이 이 응답을 선택하고 나타내는 원서버의 프로세스에 영향을 미칠 수 있는지 설명한다. 값은 단일 별표(“*”) 또는 헤더 필드 이름 목록(대소문자 구분 없음)으로 구성된다.
Vary = "*" / 1#field-name
A Vary field value of "*" signals that anything about the request might play a role in selecting the response representation, possibly including elements outside the message syntax (e.g., the client’s network address). A recipient will not be able to determine whether this response is appropriate for a later request without forwarding the request to the origin server. A proxy MUST NOT generate a Vary field with a "*" value.
“*” 필드 값은 요청에 대한 모든 것이 메시지 구문(e.g., 클라이언트의 네트워크 주소) 외부에 있는 요소를 포함하여 응답 표현을 선택하는 데 역할을 할 수 있음을 나타낸다. 수신자는 요청을 원서버로 전달하지 않고는 이 응답이 이후 요청에 적합한지 여부를 결정할 수 없을 것이다. 프락시는 “*” 값을 가진 Vary 필드를 생성해서는 안 된다.(MUST NOT)
A Vary field value consisting of a comma-separated list of names indicates that the named request header fields, known as the selecting header fields, might have a role in selecting the representation. The potential selecting header fields are not limited to those defined by this specification.
comma-separated로 구분된 이름 목록으로 구성된 Vary 필드 값은 선택 헤더 필드라고 알려진 명명된 요청 헤더 필드가 표현을 선택하는 데 역할을 할 수 있음을 표시한다. 잠재적 선택 헤더 필드는 이 명세에 의해 정의된 필드로 제한되지 않는다.
For example, a response that contains
예를들어 Vary가 포함된 응답은
Vary: accept-encoding, accept-language
indicates that the origin server might have used the request’s Accept-Encoding and Accept-Language fields (or lack thereof) as determining factors while choosing the content for this response.
원서버가 이 응답에 대한 내용을 선택하면서 요청의 Accept-Encoding 및 Accept-Language 필드(또는 해당 필드 없음)를 결정 요인으로 사용했을 수 있음을 나타낸다.
An origin server might send Vary with a list of fields for two purposes:
원서버는 두 가지 목적을 위해 필드 목록과 함께 Vary를 보낼 수 있다.
1. To inform cache recipients that they MUST NOT use this response to satisfy a later request unless the later request has the same values for the listed fields as the original request (Section 4.1 of [RFC7234]). In other words, Vary expands the cache key required to match a new request to the stored cache entry.
1. 캐시 수신자에게, 이후의 요청이 원래 요청과 동일한 값을 가지지 않는 한, 이후의 요청을 만족시키기 위해 이 응답을 사용해서는 안 된다는 것(MUST NOT)을 통지한다 ([RFC7234]의 Section 4.1). 즉, Vary는 저장된 캐시 항목으로 새 요청을 일치시키는 데 필요한 캐시 키를 확장한다.
2. To inform user agent recipients that this response is subject to content negotiation (Section 5.3) and that a different representation might be sent in a subsequent request if additional parameters are provided in the listed header fields (proactive negotiation).
2. 사용자 에이전트 수신자에게 이 응답은 콘텐츠 협상(Section 5.3)의 대상이며, 나열된 헤더 필드에 추가 파라미터가 제공될 경우 후속 요청으로 다른 표현이 전송될 수 있음을 통지한다(사전 협상).
An origin server SHOULD send a Vary header field when its algorithm for selecting a representation varies based on aspects of the request message other than the method and request target, unless the variance cannot be crossed or the origin server has been deliberately configured to prevent cache transparency. For example, there is no need to send the Authorization field name in Vary because reuse across users is constrained by the field definition (Section 4.2 of [RFC7235]). Likewise, an origin server might use Cache-Control directives (Section 5.2 of [RFC7234]) to supplant Vary if it considers the variance less significant than the performance cost of Vary's impact on caching.
표현을 선택하기 위한 알고리즘이 메서드 및 요청 대상 이외의 요청 메시지의 측면에 따라 다를 경우, 캐시 투명성을 방지하기 위해 원서버를 의도적으로 구성하지 않는 한, 원서버는 Vary 헤더 필드를 전송해야 한다.(SHOULD) 예를 들어, 사용자 전체의 재사용은 필드 정의에 의해 제한되기 때문에 Vary에서 Authorization 필드 이름을 전송할 필요가 없다. ([RFC7235]의 Section 4.2) 마찬가지로, 원서버는 캐싱에 대한 Vary의 영향의 성능 비용보다 분산이 덜 중요하다고 간주할 경우, Cache-Control 지시어([RFC7234] Section 5.2)를 사용하여 Vary를 대체할 수 있다.
7.2. Validator Header Fields
Validator header fields convey metadata about the selected representation (Section 3). In responses to safe requests, validator fields describe the selected representation chosen by the origin server while handling the response. Note that, depending on the status code semantics, the selected representation for a given response is not necessarily the same as the representation enclosed as response payload.
검증자 헤더 필드는 선택된 표현에 대한 메타데이터를 전송한다(Section 3). 안전한 요청에 대한 응답에서 검증자 필드는 응답을 처리하는 동안 원서버에 의해 선택된 표현을 설명한다. 상태 코드 의미에 따라 특정 응답에 대해 선택된 표현은 응답 페이로드로 동봉된 표현과 반드시 동일하지는 않다는 점에 유의한다.
In a successful response to a state-changing request, validator fields describe the new representation that has replaced the prior selected representation as a result of processing the request.
상태 변경 요청에 대한 성공적인 응답에서 검증자 필드는 요청을 처리한 결과 이전에 선택된 표현을 대체한 새로운 표현을 설명한다.
For example, an ETag header field in a 201 (Created) response communicates the entity-tag of the newly created resource’s representation, so that it can be used in later conditional requests to prevent the "lost update" problem [RFC7232].
예를 들어 201 (Created) 응답의 ETag 헤더 필드는 새로 생성된 리소스의 표현에 대한 entity-tag를 전달하여, 이후 조건부 요청에 사용되어 “lost update” 문제를 방지할 수 있다 [RFC7232].
+——————————+——————————————+
| Header Field Name | Defined in... |
+——————————+——————————————+
| ETag | Section 2.3 of [RFC7232] |
| Last-Modified | Section 2.2 of [RFC7232] |
+——————————+——————————————+
7.3. Authentication Challenges
Authentication challenges indicate what mechanisms are available for the client to provide authentication credentials in future requests.
인증 문제는 클라이언트가 향후 요청 시 인증 자격 증명을 제공할 수 있는 메커니즘을 나타낸다.
+———————————+——————————————+
| Header Field Name | Defined in… |
+———————————+——————————————+
| WWW-Authenticate | Section 4.1 of [RFC7235] |
| Proxy-Authenticate | Section 4.3 of [RFC7235] |
+———————————+——————————————+
7.4. Response Context
The remaining response header fields provide more information about the target resource for potential use in later requests.
나머지 응답 헤더 필드는 이후 요청에 사용할 수 있는 대상 리소스에 대한 자세한 정보를 제공한다.
+——————————+——————————————+
| Header Field Name | Defined in... |
+——————————+——————————————+
| Accept-Ranges | Section 2.3 of [RFC7233] |
| Allow | Section 7.4.1 |
| Server | Section 7.4.2 |
+——————————+——————————————+
7.4.1. Allow
The "Allow" header field lists the set of methods advertised as supported by the target resource. The purpose of this field is strictly to inform the recipient of valid request methods associated with the resource.
“Allow” 헤더 필드에는 대상 리소스가 지원하는 것으로 알려진 메서드 집합이 나열된다. 이 필드의 목적은 수신자에게 리소스와 관련된 유효한 요청 메서드를 알리는 것이다.
Allow = #method
Example of use:
사용의 예로:
Allow: GET, HEAD, PUT
The actual set of allowed methods is defined by the origin server at the time of each request. An origin server MUST generate an Allow field in a 405 (Method Not Allowed) response and MAY do so in any other response. An empty Allow field value indicates that the resource allows no methods, which might occur in a 405 response if the resource has been temporarily disabled by configuration.
허용되는 메서드의 실제 집합은 각 요청 시 원서버에 의해 정의된다. 원서버는 405 (Method Not Allow) 응답에서 Allow 필드를 생성해야 하며,(MUST) 다른 응답에서는 Allow 필드를 생성할 수 있다.(MAY) 빈 Allow 필드 값은 리소스가 메서드를 허용하지 않음을 나타내며, 구성으로 인해 리소스가 일시적으로 비활성화된 경우 405 응답에서 발생할 수 있다.
A proxy MUST NOT modify the Allow header field -- it does not need to understand all of the indicated methods in order to handle them according to the generic message handling rules.
프락시는 Allow 헤더 필드를 수정해서는 안 되며,(MUST NOT) 일반적인 메시지 처리 규칙에 따라 처리하기 위해 표시된 모든 메서드를 이해할 필요는 없다.
7.4.2. Server
The "Server" header field contains information about the software used by the origin server to handle the request, which is often used by clients to help identify the scope of reported interoperability problems, to work around or tailor requests to avoid particular server limitations, and for analytics regarding server or operating system use. An origin server MAY generate a Server field in its responses.
“Server” 헤더 필드에는 요청을 처리하기 위해 원서버가 사용하는 소프트웨어에 대한 정보가 들어 있는데, 이 소프트웨어는 보고된 상호운용성 문제의 범위를 식별하는 데 도움을 주고, 특정 서버 제한을 피하기 위해 작업하거나 요청을 맞춤화하며, 서버 또는 운영 체제 사용과 관련된 분석을 위해 클라이언트가 종종 사용한다. 원서버는 응답에 Server 필드를 생성할 수 있다.(MAY)
Server = product *( RWS ( product / comment ) )
The Server field-value consists of one or more product identifiers, each followed by zero or more comments (Section 3.2 of [RFC7230]), which together identify the origin server software and its significant subproducts. By convention, the product identifiers are listed in decreasing order of their significance for identifying the origin server software. Each product identifier consists of a name and optional version, as defined in Section 5.5.3.
Server field-value은 하나 이상의 product 식별자로 구성되며, 각각 0개 이상의 주석이 뒤따르며([RFC7230]의 Section 3.2) 원서버 소프트웨어와 그 중요한 하위 제품을 함께 식별한다. 관례에 따라, product 식별자는 원서버 소프트웨어를 식별하기 위한 중요도의 감소 순서로 나열된다. 각 product식별자는 Section 5.5.3에 정의된 이름 및 선택 버전으로 구성된다.
Example:
예시:
Server: CERN/3.0 libwww/2.17
An origin server SHOULD NOT generate a Server field containing needlessly fine-grained detail and SHOULD limit the addition of subproducts by third parties. Overly long and detailed Server field values increase response latency and potentially reveal internal implementation details that might make it (slightly) easier for attackers to find and exploit known security holes.
원서버는 불필요한 세부 정보가 포함된 Server 필드를 생성해서는 안 되며(SHOULD NOT), 서드 파티의 하위 제품 추가를 제한해야 한다.(SHOULD) 지나치게 길고 세부적인 Server 필드 값은 응답 대기 시간을 증가시키고 공격자가 알려진 보안 구멍을 (더) 쉽게 찾고 이용할 수 있는 내부 구현 세부 정보를 잠재적으로 노출시킬 수 있다.
8. IANA Considerations
8.1. Method Registry
The "Hypertext Transfer Protocol (HTTP) Method Registry" defines the namespace for the request method token (Section 4). The method registry has been created and is now maintained at <http://www.iana.org/assignments/http-methods>.
“Hypertext Transfer Protocol (HTTP) Method Registry” 는 요청 메서드 토큰(Section 4)의 네임스페이스를 정의한다. 메서드 레지스트리는 생성되어 현재 <http://www.iana.org/assignments/http-methods>에서 유지되고 있다.
8.1.1. Procedure
HTTP method registrations MUST include the following fields:
HTTP 메서드 등록에는 다음 필드가 포함되어야 한다.(MUST)
o Method Name (see Section 4)
o 메서드 이름 (Section 4 참조)
o Safe ("yes" or "no", see Section 4.2.1)
o 안전(“예” 또는 “아니오”, Section 4.2.1 참조)
o Idempotent ("yes" or "no", see Section 4.2.2)
o 멱등성(“예” 또는 “아니오”, Section 4.2.2 참조)
o Pointer to specification text
o 명세 텍스트에 가리키는 것
Values to be added to this namespace require IETF Review (see [RFC5226], Section 4.1).
이 네임스페이스에 추가할 값은 IETF 검토가 필요하다([RFC5226, Section 4.1 참조).
8.1.2. Considerations for New Methods
Standardized methods are generic; that is, they are potentially applicable to any resource, not just one particular media type, kind of resource, or application. As such, it is preferred that new methods be registered in a document that isn't specific to a single application or data format, since orthogonal technologies deserve orthogonal specification.
표준화된 메서드는 일반적이다. 즉, 특정 미디어 타입, 리소스 종류 또는 애플리케이션이 아닌 모든 리소스에 적용할 수 있다. 이와 같이 직교 기술은 직교 사양을 받을 만하기 때문에 단일 애플리케이션이나 데이터 형식에 특정되지 않는 문서에 새로운 메서드를 등록하는 것이 바람직하다.
Since message parsing (Section 3.3 of [RFC7230]) needs to be independent of method semantics (aside from responses to HEAD), definitions of new methods cannot change the parsing algorithm or prohibit the presence of a message body on either the request or the response message. Definitions of new methods can specify that only a zero-length message body is allowed by requiring a Content-Length header field with a value of “0".
메시지 파싱([RFC7230]의 Section 3.3)은 메서드 의미론(HEAD에 대한 응답과 다름)과 독립되어야 하므로, 새로운 메서드의 정의는 파싱 알고리즘을 변경하거나 요청이나 응답 메시지에 메시지 본문의 존재를 금지할 수 없다. 새로운 메서드의 정의는 “0”의 값을 가진 Content-Length 헤더 필드를 요구하여 0길이 메시지 본문만 허용하도록 지정할 수 있다.
A new method definition needs to indicate whether it is safe (Section 4.2.1), idempotent (Section 4.2.2), cacheable (Section 4.2.3), what semantics are to be associated with the payload body if any is present in the request and what refinements the method makes to header field or status code semantics. If the new method is cacheable, its definition ought to describe how, and under what conditions, a cache can store a response and use it to satisfy a subsequent request. The new method ought to describe whether it can be made conditional (Section 5.2) and, if so, how a server responds when the condition is false. Likewise, if the new method might have some use for partial response semantics ([RFC7233]), it ought to document this, too.
새로운 메서드 정의는 그것이 안전한지 (Section 4.2.1), 멱등성 (Section 4.2.2), 캐시 가능 (Section 4.2.3), 요청에 존재하는 경우 페이로드 본문과 연관되어야 할 의미와 이 메서드가 헤더 필드 또는 상태 코드 의미에 어떤 영향을 미치는지 표시해야 한다. 새로운 메서드가 캐시 가능한 경우, 그 정의는 캐시가 어떻게 그리고 어떤 조건에서 응답을 저장하고 그것을 사용하여 후속 요청을 충족시킬 수 있는지를 설명해야 한다. 새로운 메서드는 조건부로 만들 수 있는지 여부(Section 5.2)와 조건의 거짓일 때 서버가 어떻게 반응하는지를 기술해야 한다. 마찬가지로, 새로운 메서드가 부분 응답 의미론([RFC7233])에 어느 정도 사용할 수 있다면, 이것 역시 문서화해야 한다.
Note: Avoid defining a method name that starts with "M-", since that prefix might be misinterpreted as having the semantics assigned to it by [RFC2774].
참고: 접두사가 [RFC2774]에 의해 할당된 의미론으로 잘못 해석될 수 있기 때문에, “M-“로 시작하는 메서드 이름을 정의하지 말라.
8.1.3. Registrations
The "Hypertext Transfer Protocol (HTTP) Method Registry" has been populated with the registrations below:
“Hypertext Transfer Protocol (HTTP) Method Registry” 는 다음과 같은 등록으로 채워졌다.
+——————+———+———————+————————+
| Method | Safe | Idempotent | Reference |
+——————+———+———————+————————+
| CONNECT | no | no | Section 4.3.6 |
| DELETE | no | yes | Section 4.3.5 |
| GET | yes | yes | Section 4.3.1 |
| HEAD | yes | yes | Section 4.3.2 |
| OPTIONS | yes | yes | Section 4.3.7 |
| POST | no | no | Section 4.3.3 |
| PUT | no | yes | Section 4.3.4 |
| TRACE | yes | yes | Section 4.3.8 |
+——————+———+———————+————————+
8.2. Status Code Registry
The "Hypertext Transfer Protocol (HTTP) Status Code Registry" defines the namespace for the response status-code token (Section 6). The status code registry is maintained at <http://www.iana.org/assignments/http-status-codes>.
“Hypertext Transfer Protocol (HTTP) Status Code Registry” 는 응답 상태 코드 토큰에 대한 네임스페이스를 정의한다(Section 6). 상태 코드 레지스트리는 <http://www.iana.org/assignments/http-status-codes>로 유지된다.
This section replaces the registration procedure for HTTP Status Codes previously defined in Section 7.1 of [RFC2817].
본 부문은 [RFC2817]의 Section 7.1에서 이전에 정의한 HTTP 상태 코드에 대한 등록 절차를 대체한다.
8.2.1. Procedure
A registration MUST include the following fields:
등록에는 다음 필드가 포함되어야 한다. (MUST)
o Status Code (3 digits)
상태 코드 (3 자리수)
o Short Description
짧은 설명
o Pointer to specification text
o 명세 텍스트에 가리키는 것
Values to be added to the HTTP status code namespace require IETF Review (see [RFC5226], Section 4.1).
HTTP 상태 코드 네임스페이스에 추가할 값은 IETF 검토가 필요하다([RFC5226, Section 4.1 참조).
8.2.2. Considerations for New Status Codes
When it is necessary to express semantics for a response that are not defined by current status codes, a new status code can be registered. Status codes are generic; they are potentially applicable to any resource, not just one particular media type, kind of resource, or application of HTTP. As such, it is preferred that new status codes be registered in a document that isn't specific to a single application.
현재 상태 코드로 정의되지 않은 응답에 대해 의미 표현이 필요한 경우, 새로운 상태 코드를 등록할 수 있다. 상태 코드는 일반적이며, 특정 미디어 유형, 리소스 종류 또는 HTTP 애플리케이션이 아닌 모든 리소스에 적용할 수 있다. 따라서, 새로운 상태 코드는 단일 애플리케이션에 특정되지 않은 문서에 등록하는 것이 바람직하다.
New status codes are required to fall under one of the categories defined in Section 6. To allow existing parsers to process the response message, new status codes cannot disallow a payload, although they can mandate a zero-length payload body.
새로운 상태 코드는 Section 6에 정의된 범주 중 하나에 해당해야 한다. 기존 구문 분석기들이 응답 메시지를 처리할 수 있도록 하기 위해, 0 길이의 페이로드 본체를 의무화할 수 있지만, 새로운 상태 코드는 페이로드 자체를 허용하지 않을 수 없다.
Proposals for new status codes that are not yet widely deployed ought to avoid allocating a specific number for the code until there is clear consensus that it will be registered; instead, early drafts can use a notation such as "4NN", or "3N0" .. "3N9", to indicate the class of the proposed status code(s) without consuming a number prematurely.
아직 널리 배치되지 않은 새로운 상태 코드에 대한 제안은 등록될 것이라는 명확한 합의가 있을 때까지 특정 번호를 할당하지 않아야 한다. 대신, 초기 초안은 “4NN” 또는 “3N0” 과 같은 기호를 사용할 수 있다. “3N9” 는 숫자를 조기 소비하지 않고 제안된 상태 코드의 부문을 표시한다.
The definition of a new status code ought to explain the request conditions that would cause a response containing that status code (e.g., combinations of request header fields and/or method(s)) along with any dependencies on response header fields (e.g., what fields are required, what fields can modify the semantics, and what header field semantics are further refined when used with the new status code).
새 상태 코드의 정의는 해당 상태 코드(e.g., 요청 헤더 필드 및/또는 메서드의 조합)를 포함하는 응답을 유발하는 요청 조건과 응답 헤더 필드에 대한 종속성을 설명해야 한다. (e.g., 어떤 필드가 필요한지, 의미론을 수정할 수 있는 필드가 무엇인지, 새로운 상태 코드와 함께 사용할 때 어떤 헤더 필드 의미가 더욱 정제되는지)
The definition of a new status code ought to specify whether or not it is cacheable. Note that all status codes can be cached if the response they occur in has explicit freshness information; however, status codes that are defined as being cacheable are allowed to be cached without explicit freshness information. Likewise, the definition of a status code can place constraints upon cache behavior. See [RFC7234] for more information.
새 상태 코드의 정의는 캐시 가능 여부를 명시해야 한다. 모든 상태 코드는 발생하는 응답에 명시적인 신선도 정보가 있을 경우 캐시할 수 있지만, 캐시 가능으로 정의된 상태 코드는 명시적인 신선도 정보 없이 캐시할 수 있다. 마찬가지로 상태 코드의 정의는 캐시 동작에 제약을 둘 수 있다. 자세한 내용은 [RFC7234]를 참조한다.
Finally, the definition of a new status code ought to indicate whether the payload has any implied association with an identified resource (Section 3.1.4.1).
마지막으로, 새로운 상태 코드의 정의는 페이로드가 식별된 리소스와 암묵적인 연관성을 가지고 있는지 여부를 표시해야 한다.(Section 3.1.4.1)
8.2.3. Registrations
The status code registry has been updated with the registrations below:
상태 코드 레지스트리가 아래 등록으로 업데이트됨:
+————+————————————————+————————+
| Value | Description | Reference |
+————+————————————————+————————+
| 100 | Continue | Section 6.2.1 |
| 101 | Switching Protocols | Section 6.2.2 |
| 200 | OK | Section 6.3.1 |
| 201 | Created | Section 6.3.2 |
| 202 | Accepted | Section 6.3.3 |
| 203 | Non-Authoritative Information| Section 6.3.4 |
| 204 | No Content | Section 6.3.5 |
| 205 | Reset Content | Section 6.3.6 |
| 300 | Multiple Choices | Section 6.4.1 |
| 301 | Moved Permanently | Section 6.4.2 |
| 302 | Found | Section 6.4.3 |
| 303 | See Other | Section 6.4.4 |
| 305 | Use Proxy | Section 6.4.5 |
| 306 | (Unused) | Section 6.4.6 |
| 307 | Temporary Redirect | Section 6.4.7 |
| 400 | Bad Request | Section 6.5.1 |
| 402 | Payment Required | Section 6.5.2 |
| 403 | Forbidden | Section 6.5.3 |
| 404 | Not Found | Section 6.5.4 |
| 405 | Method Not Allowed | Section 6.5.5 |
| 406 | Not Acceptable | Section 6.5.6 |
| 408 | Request Timeout | Section 6.5.7 |
| 409 | Conflict | Section 6.5.8 |
| 410 | Gone | Section 6.5.9 |
| 411 | Length Required | Section 6.5.10 |
| 413 | Payload Too Large | Section 6.5.11 |
| 414 | URI Too Long | Section 6.5.12 |
| 415 | Unsupported Media Type | Section 6.5.13 |
| 417 | Expectation Failed | Section 6.5.14 |
| 426 | Upgrade Required | Section 6.5.15 |
| 500 | Internal Server Error | Section 6.6.1 |
| 501 | Not Implemented | Section 6.6.2 |
| 502 | Bad Gateway | Section 6.6.3 |
| 503 | Service Unavailable | Section 6.6.4 |
| 504 | Gateway Timeout | Section 6.6.5 |
| 505 | HTTP Version Not Supported | Section 6.6.6 |
+————+————————————————+————————+
8.3. Header Field Registry
HTTP header fields are registered within the "Message Headers” registry located at <http://www.iana.org/assignments/message-headers>, as defined by [BCP90].
HTTP 헤더 필드는 [BCP90]에서 정의한 대로 <http://www.iana.org/assignments/message-headers>에 위치한 “Message Headers” 레지스트리 내에 등록된다.
8.3.1. Considerations for New Header Fields
Header fields are key:value pairs that can be used to communicate data about the message, its payload, the target resource, or the connection (i.e., control data). See Section 3.2 of [RFC7230] for a general definition of header field syntax in HTTP messages.
헤더 필드는 key:value 쌍으로, 메시지, 페이로드, 대상 리소스 또는 커넥션(e.g., 제어 데이터)에 대한 데이터를 전달하는 데 사용할 수 있다. HTTP 메시지의 헤더 필드 구문에 대한 일반적인 정의는 [RFC7230]의 Section 3.2를 참조한다.
The requirements for header field names are defined in [BCP90].
헤더 필드 이름에 대한 요구사항은 [BCP90]에 정의되어 있다.
Authors of specifications defining new fields are advised to keep the name as short as practical and not to prefix the name with “X-" unless the header field will never be used on the Internet. (The "X-" prefix idiom has been extensively misused in practice; it was intended to only be used as a mechanism for avoiding name collisions inside proprietary software or intranet processing, since the prefix would ensure that private names never collide with a newly registered Internet name; see [BCP178] for further information).
새로운 분야를 정의하는 사양의 저자들은 인터넷에서 헤더 필드가 결코 사용되지 않는 한 그 이름을 “X-“ 로 접두사하지 말고 실용적으로 짧게 유지하도록 권고한다.(“X-“ 접두사 숙어는 실무적으로 광범위하게 오용되어 왔으며, 단지 사유 소프트웨어 또는 인트라넷 처리 내부의 이름 충돌을 피하기 위한 메커니즘으로만 사용되도록 의도되었다. 때문에 접두사는 개인 이름이 새로 등록된 인터넷 이름과 충돌하지 않도록 한다. 자세한 내용은 [BCP178]을 참조하십시오.)
New header field values typically have their syntax defined using ABNF ([RFC5234]), using the extension defined in Section 7 of [RFC7230] as necessary, and are usually constrained to the range of US-ASCII characters. Header fields needing a greater range of characters can use an encoding such as the one defined in [RFC5987].
새로운 헤더 필드 값은 일반적으로 필요에 따라 [RFC7230]의 Section 7에서 정의한 확장자를 사용하여 ABNF ([RFC5234])를 사용하여 정의된 구문을 가지며, 일반적으로 US-ASCII 문자 범위에 구속된다. 더 많은 범위의 문자가 필요한 헤더 필드는 [RFC5987]에서 정의한 것과 같은 인코딩을 사용할 수 있다.
Leading and trailing whitespace in raw field values is removed upon field parsing (Section 3.2.4 of [RFC7230]). Field definitions where leading or trailing whitespace in values is significant will have to use a container syntax such as quoted-string (Section 3.2.6 of [RFC7230]).
원시 필드 값의 선행 및 후행 공백은 필드 구문 분석 시 제거된다.([RFC7230]의 Section 3.2.4) 값에서 선행 또는 후행 공백이 중요한 필드 정의는 quoted-string과 같은 컨테이너 구문을 사용해야 한다. ([RFC7230] Section 3.2.6)
Because commas (",") are used as a generic delimiter between field-values, they need to be treated with care if they are allowed in the field-value. Typically, components that might contain a comma are protected with double-quotes using the quoted-string ABNF production.
쉼표 (“,”)는 field-value들 사이의 일반 구분 기호로 사용되기 때문에 field-value에서 허용되는 경우 주의하여 처리할 필요가 있다. 일반적으로 쉼표를 포함할 수 있는 구성 요소는 quoted-string로 ABNF 생성을 사용하여 double-quotes로 보호된다.
For example, a textual date and a URI (either of which might contain a comma) could be safely carried in field-values like these:
예를 들어 텍스트 날짜와 URI(쉼표를 포함할 수 있음)는 다음과 같은 field-value로 안전하게 운반될 수 있다.
Example-URI-Field: "http://example.com/a.html,foo",
"http://without-a-comma.example.com/"
Example-Date-Field: "Sat, 04 May 1996", "Wed, 14 Sep 2005"
Note that double-quote delimiters almost always are used with the quoted-string production; using a different syntax inside double-quotes will likely cause unnecessary confusion.
double-quote 기호는 quoted-string 생산과 대부분 항상 사용된다는 점에 참고한다. double-quote의 내부에 다른 구문을 사용하면 불필요한 혼란을 야기할 수 있다.
Many header fields use a format including (case-insensitively) named parameters (for instance, Content-Type, defined in Section 3.1.1.5). Allowing both unquoted (token) and quoted (quoted-string) syntax for the parameter value enables recipients to use existing parser components. When allowing both forms, the meaning of a parameter value ought to be independent of the syntax used for it (for an example, see the notes on parameter handling for media types in Section 3.1.1.1).
많은 헤더 필드는 (대소문자를 구분하지 않고) 명명된 매개변수(예, Section 3.1.1.5에 정의된 Content-Type)를 포함한 형식을 사용한다. 매개 변수 값에 대해 따옴표로 묶지 않은(토큰) 구문과 따옴표로 묶은(quoted-string) 구문을 모두 허용하면 수신자는 기존 구문 분석기 구성요소를 사용할 수 있다. 두 가지 양식을 모두 허용할 때 매개변수 값의 의미는 매개변수에 사용되는 구문과 무관해야 한다(예, Section 3.1.1.1의 미디어 타입에 대한 매개변수 취급에 대한 참조).
Authors of specifications defining new header fields are advised to consider documenting:
새로운 헤더 필드를 정의하는 규격의 작성자는 문서화를 고려할 것을 권고한다.
o Whether the field is a single value or whether it can be a list (delimited by commas; see Section 3.2 of [RFC7230]).
o 필드가 단일 값인지 또는 리스트가 될 수 있는지 여부(쉼표로 구분됨. [RFC7230]의 Section 3.2 참조).
If it does not use the list syntax, document how to treat messages where the field occurs multiple times (a sensible default would be to ignore the field, but this might not always be the right choice).
리스트 구문을 사용하지 않는 경우, 필드가 여러 번 발생하는 메시지를 처리하는 방법을 문서화한다.(알맞은 기본값은 필드를 무시하는 것이지만 항상 올바른 선택은 아닐 수 있음)
Note that intermediaries and software libraries might combine multiple header field instances into a single one, despite the field's definition not allowing the list syntax. A robust format enables recipients to discover these situations (good example: "Content-Type", as the comma can only appear inside quoted strings; bad example: "Location", as a comma can occur inside a URI).
리스트 구문을 허용하지 않는 필드 정의에도 불구하고 중개자와 소프트웨어 라이브러리는 여러 헤더 필드 인스턴스를 하나의 인스턴스로 결합할 수 있다는 점에 참고한다. 강한 형식은 수신자가 이러한 상황을 발견할 수 있도록 한다. (좋은 예: “Content-Type” 은 쉼표가 따옴표로 묶인 문자열 내에서만 나타날 수 있기 때문에; 나쁜 예: “Location” 는 쉼표가 URI 내에서 발생할 수 있기 때문에).
o Under what conditions the header field can be used; e.g., only in responses or requests, in all messages, only on responses to a particular request method, etc.
o 헤더 필드를 사용할 수 있는 조건, 예를 들어 응답 또는 요청, 모든 메시지, 특정 요청 메서드에 대한 응답에만 사용할 수 있다.
o Whether the field should be stored by origin servers that understand it upon a PUT request.
o PUT 요청에 따라 필드를 이해하는 원서버가 필드를 저장해야 하는지 여부.
o Whether the field semantics are further refined by the context, such as by existing request methods or status codes.
o 기존 요청 메서드나 상태 코드와 같은 문맥에 의해 필드 의미론이 더 세분화되는지 여부.
o Whether it is appropriate to list the field-name in the Connection header field (i.e., if the header field is to be hop-by-hop; see Section 6.1 of [RFC7230]).
o Connection 헤더 필드에 필드 이름을 나열하는 것이 적절한지 여부(i.e., 헤더 필드가 hop-by-hop인 경우, [RFC7230]의 Section 6.1 참조).
o Under what conditions intermediaries are allowed to insert, delete, or modify the field's value.
o 어떤 조건에서 중개자가 필드 값을 삽입, 삭제 또는 수정할 수 있는지 여부.
o Whether it is appropriate to list the field-name in a Vary response header field (e.g., when the request header field is used by an origin server's content selection algorithm; see Section 7.1.4).
o Vary 응답 헤더 필드에서 field-name을 나열하는 것이 적절한지 여부(e.g., 요청 헤더 필드가 원서버의 콘텐츠 선택 알고리즘에서 사용되는 경우, Section 7.1.4 참조).
o Whether the header field is useful or allowable in trailers (see Section 4.1 of [RFC7230]).
o 헤더 필드가 트레일러에서 유용하거나 허용되는지 여부([RFC7230]의 Section 4.1 참조).
o Whether the header field ought to be preserved across redirects.
o 헤더 필드가 리디렉션 전체에 걸쳐 보존되어야 하는지 여부.
o Whether it introduces any additional security considerations, such as disclosure of privacy-related data.
o 프라이버시 관련 데이터의 공개와 같은 추가적인 보안 고려사항을 도입하는지 여부.
8.3.2. Registrations
The "Message Headers" registry has been updated with the following permanent registrations:
“Message Headers” 레지스트리는 다음과 같은 영구 등록으로 업데이트되었다.
+——————————+—————+—————+—————————+
| Header Field Name | Protocol | Status | Reference |
+——————————+—————+—————+—————————+
| Accept | http | standard | Section 5.3.2 |
| Accept-Charset | http | standard | Section 5.3.3 |
| Accept-Encoding | http | standard | Section 5.3.4 |
| Accept-Language | http | standard | Section 5.3.5 |
| Allow | http | standard | Section 7.4.1 |
| Content-Encoding | http | standard | Section 3.1.2.2 |
| Content-Language | http | standard | Section 3.1.3.2 |
| Content-Location | http | standard | Section 3.1.4.2 |
| Content-Type | http | standard | Section 3.1.1.5 |
| Date | http | standard | Section 7.1.1.2 |
| Expect | http | standard | Section 5.1.1 |
| From | http | standard | Section 5.5.1 |
| Location | http | standard | Section 7.1.2 |
| Max-Forwards | http | standard | Section 5.1.2 |
| MIME-Version | http | standard | Appendix A.1 |
| Referer | http | standard | Section 5.5.2 |
| Retry-After | http | standard | Section 7.1.3 |
| Server | http | standard | Section 7.4.2 |
| User-Agent | http | standard | Section 5.5.3 |
| Vary | http | standard | Section 7.1.4 |
+——————————+—————+—————+—————————+
The change controller for the above registrations is: “IETF (iesg@ietf.org) - Internet Engineering Task Force".
위의 등록에 대한 변경 컨트롤러는 “IETF(iesg@ietf.org) - Internet Engineering Task Force” 이다.
8.4. Content Coding Registry
The "HTTP Content Coding Registry" defines the namespace for content coding names (Section 4.2 of [RFC7230]). The content coding registry is maintained at <http://www.iana.org/assignments/http-parameters>.
"HTTP Content Coding Registry"는 컨텐츠 코딩 이름의 네임스페이스를 정의한다([RFC7230]의 Section 4.2). 콘텐츠 코딩 레지스트리는 <http://www.iana.org/assignments/http-parameters>으로 유지된다.
8.4.1. Procedure
Content coding registrations MUST include the following fields:
콘텐츠 코딩 등록에는 다음 필드가 포함되어야 한다.
o Name
o 이름
o Description
o 설명
o Pointer to specification text
o 명세 텍스트에 가리키는 것
Names of content codings MUST NOT overlap with names of transfer codings (Section 4 of [RFC7230]), unless the encoding transformation is identical (as is the case for the compression codings defined in Section 4.2 of [RFC7230]).
([RFC7230]의 Section 4.2에서 정의한 압축 코딩의 경우와 같이) 인코딩 변환이 동일하지 않는 한 내용 코딩의 이름은 전송 코딩의 이름과 중복되지 않아야 한다.(MUST NOT) ([RFC7230]의 Section 4).
Values to be added to this namespace require IETF Review (see Section 4.1 of [RFC5226]) and MUST conform to the purpose of content coding defined in this section.
이 네임스페이스에 추가할 값은 IETF 검토([RFC5226]의 Section 4.1 참조)가 필요하며, 반드시 이 섹션에서 정의한 콘텐츠 코딩의 목적에 부합해야 한다.
8.4.2. Registrations
The "HTTP Content Coding Registry" has been updated with the registrations below:
“HTTP Content Coding Registry” 는 아래 등록과 함께 업데이트되었다.
+—————+——————————————————————+————————+
| Name | Description | Reference |
+—————+——————————————————————+————————+
| identity | Reserved (synonym for "no encoding" in | Section 5.3.4 |
| | Accept-Encoding) | |
+—————+——————————————————————+————————+
9. Security Considerations
This section is meant to inform developers, information providers, and users of known security concerns relevant to HTTP semantics and its use for transferring information over the Internet. Considerations related to message syntax, parsing, and routing are discussed in Section 9 of [RFC7230].
이 절은 HTTP 의미와 관련된 알려진 보안 우려 사항과 인터넷을 통한 정보 전송에 대한 그것의 사용을 개발자, 정보 제공자 및 사용자에게 알리기 위한 것이다. 메시지 구문, 구문 분석 및 라우팅과 관련된 고려사항은 [RFC7230]의 Section 9에 설명되어 있다.
The list of considerations below is not exhaustive. Most security concerns related to HTTP semantics are about securing server-side applications (code behind the HTTP interface), securing user agent processing of payloads received via HTTP, or secure use of the Internet in general, rather than security of the protocol. Various organizations maintain topical information and links to current research on Web application security (e.g., [OWASP]).
아래의 고려사항 목록은 완전하지 않다. HTTP 의미론 관련 보안 우려는 대부분 서버측 애플리케이션(HTTP 인터페이스 뒤의 코드)의 보안, HTTP를 통해 수신한 페이로드의 사용자 에이전트 처리, 프로토콜의 보안이 아닌 인터넷의 일반적 이용에 관한 것이다. 다양한 조직은 주제 정보와 웹 애플리케이션 보안에 대한 현재의 연구(e.g., [OWASP])로 연결되는 링크를 유지한다.
9.1. Attacks Based on File and Path Names
Origin servers frequently make use of their local file system to manage the mapping from effective request URI to resource representations. Most file systems are not designed to protect against malicious file or path names. Therefore, an origin server needs to avoid accessing names that have a special significance to the system when mapping the request target to files, folders, or directories.
원서버는 유효한 요청 URI에서 리소스 표현으로의 매핑을 관리하기 위해 종종 로컬 파일 시스템을 사용한다. 대부분의 파일 시스템은 악의적인 파일이나 경로 이름으로부터 보호하도록 설계되지 않았다. 따라서 원서버는 요청 대상을 파일, 폴더 또는 디렉토리에 매핑할 때 시스템에 특별한 의미가 있는 이름에 액세스하지 않도록 해야 한다.
For example, UNIX, Microsoft Windows, and other operating systems use ".." as a path component to indicate a directory level above the current one, and they use specially named paths or file names to send data to system devices. Similar naming conventions might exist within other types of storage systems. Likewise, local storage systems have an annoying tendency to prefer user-friendliness over security when handling invalid or unexpected characters, recomposition of decomposed characters, and case-normalization of case-insensitive names.
예를 들어, UNIX, 마이크로소프트 윈도우즈 및 기타 운영 체제는 현재보다 높은 디렉토리 수준을 나타내는 경로 구성요소로 ".."를 사용하고, 특별히 명명된 경로나 파일 이름을 사용하여 시스템 장치로 데이터를 전송한다. 유사한 이름 지정 규칙이 다른 유형의 스토리지 시스템 내에 존재할 수 있다. 마찬가지로 로컬 스토리지 시스템은 잘못되거나 예기치 않은 문자를 처리할 때 보안보다 사용자 친화성을 선호하는 성가신 경향이 있으며, 분해된 문자를 다시 컴파일하고 대소문자를 구분하지 않는 이름을 정규화한다.
Attacks based on such special names tend to focus on either denial-of-service (e.g., telling the server to read from a COM port) or disclosure of configuration and source files that are not meant to be served.
이러한 특수 이름에 기초한 공격은 denial-of-service (e.g., 서버가 COM 포트에서 읽도록 지시) 또는 서비스되지 않는 구성 및 원본 파일의 공개에 초점을 맞추는 경향이 있다.
9.2. Attacks Based on Command, Code, or Query Injection
Origin servers often use parameters within the URI as a means of identifying system services, selecting database entries, or choosing a data source. However, data received in a request cannot be trusted. An attacker could construct any of the request data elements (method, request-target, header fields, or body) to contain data that might be misinterpreted as a command, code, or query when passed through a command invocation, language interpreter, or database interface.
원서버는 종종 URI 내의 매개변수를 시스템 서비스 식별, 데이터베이스 항목 선택 또는 데이터 원본 선택 수단으로 사용한다. 그러나 요청으로 받은 데이터는 신뢰할 수 없다. 공격자는 명령 호출, 언어 인터프리터 또는 데이터베이스 인터페이스를 통과할 때 명령, 코드 또는 쿼리로 잘못 해석될 수 있는 데이터를 포함하도록 요청 데이터 요소(메서드, request-target, 헤더 필드 또는 본문)를 구성할 수 있다.
For example, SQL injection is a common attack wherein additional query language is inserted within some part of the request-target or header fields (e.g., Host, Referer, etc.). If the received data is used directly within a SELECT statement, the query language might be interpreted as a database command instead of a simple string value. This type of implementation vulnerability is extremely common, in spite of being easy to prevent.
예를 들어 SQL 주입은 request-target 또는 헤더 필드(e.g., Host, Referer 등)의 일부 내에 추가 쿼리 언어가 삽입되는 일반적인 공격이다. 수신된 데이터를 SELECT 문 내에서 직접 사용하는 경우, 쿼리 언어는 단순한 문자열 값 대신 데이터베이스 명령어로 해석될 수 있다. 이러한 유형의 구현 취약성은 예방하기 쉽지만 매우 일반적이다.
In general, resource implementations ought to avoid use of request data in contexts that are processed or interpreted as instructions. Parameters ought to be compared to fixed strings and acted upon as a result of that comparison, rather than passed through an interface that is not prepared for untrusted data. Received data that isn’t based on fixed parameters ought to be carefully filtered or encoded to avoid being misinterpreted.
일반적으로 리소스 구현은 처리되거나 지침으로 해석되는 맥락에서 요청 데이터의 사용을 피해야 한다. 매개변수는 신뢰할 수 없는 데이터에 대해 준비되지 않은 인터페이스를 통과하기 보다는 고정 문자열과 비교하고 그 비교의 결과로 작용해야 한다. 고정된 매개변수에 기초하지 않은 수신된 데이터는 오해가 발생하지 않도록 주의 깊게 필터링하거나 인코딩해야 한다.
Similar considerations apply to request data when it is stored and later processed, such as within log files, monitoring tools, or when included within a data format that allows embedded scripts.
로그 파일, 모니터링 도구 내 또는 내장된 스크립트를 허용하는 데이터 형식 내에 포함된 경우와 같이 데이터를 저장하고 나중에 처리할 때 유사한 고려사항이 요청 시에도 적용된다.
9.3. Disclosure of Personal Information
Clients are often privy to large amounts of personal information, including both information provided by the user to interact with resources (e.g., the user's name, location, mail address, passwords, encryption keys, etc.) and information about the user's browsing activity over time (e.g., history, bookmarks, etc.). Implementations need to prevent unintentional disclosure of personal information.
클라이언트는 리소스(e.g., 사용자의 이름, 위치, 메일 주소, 비밀번호, 암호화 키 등)와 시간 경과에 따른 사용자의 검색 활동에 대한 정보(e.g., 이력, 책갈피 등)를 포함하여 사용자가 제공한 두 가지 정보를 포함하여 대량의 개인 정보에 종종 접근한다. 구현 시 의도하지 않은 개인정보의 공개를 방지할 필요가 있다.
9.4. Disclosure of Sensitive Information in URIs
URIs are intended to be shared, not secured, even when they identify secure resources. URIs are often shown on displays, added to templates when a page is printed, and stored in a variety of unprotected bookmark lists. It is therefore unwise to include information within a URI that is sensitive, personally identifiable, or a risk to disclose.
URI는 보안 리소스를 식별하더라도 보안이 아닌 공유될 수 있도록 되어 있다. URI는 종종 디스플레이에 표시되고, 페이지가 인쇄될 때 템플릿에 추가되며, 보호되지 않는 다양한 북마크 목록에 저장된다. 따라서 민감하거나 개인 식별 가능하거나 공개할 위험이 있는 정보를 보호되지 않는 다양한 북마크 목록에 포함하는 것은 현명하지 못하다.
Authors of services ought to avoid GET-based forms for the submission of sensitive data because that data will be placed in the request-target. Many existing servers, proxies, and user agents log or display the request-target in places where it might be visible to third parties. Such services ought to use POST-based form submission instead.
서비스 작성자는 중요한 데이터의 제출을 위한 GET 기반 양식을 피해야 한다. 그 데이터는 요청 대상에 포함될 것이기 때문이다. 많은 기존 서버, 프락시 및 사용자 에이전트는 요청 대상을 서드파티가 볼 수 있는 위치에 기록하거나 표시한다. 이러한 서비스는 대신 POST 기반 양식 제출을 사용해야 한다.
Since the Referer header field tells a target site about the context that resulted in a request, it has the potential to reveal information about the user's immediate browsing history and any personal information that might be found in the referring resource’s URI. Limitations on the Referer header field are described in Section 5.5.2 to address some of its security considerations.
Referer 헤더 필드는 대상 사이트에 요청을 초래한 상황에 대해 말하기 때문에, 사용자의 즉각적인 검색 기록 및 참조 리소스의 URI에서 찾을 수 있는 개인 정보에 대한 정보를 공개할 가능성이 있다. Referer 헤더 필드의 제한 사항은 일부 보안 고려 사항의 설명하기 위해 Section 5.5.2에 설명되어 있다.
9.5. Disclosure of Fragment after Redirects
Although fragment identifiers used within URI references are not sent in requests, implementers ought to be aware that they will be visible to the user agent and any extensions or scripts running as a result of the response. In particular, when a redirect occurs and the original request's fragment identifier is inherited by the new reference in Location (Section 7.1.2), this might have the effect of disclosing one site's fragment to another site. If the first site uses personal information in fragments, it ought to ensure that redirects to other sites include a (possibly empty) fragment component in order to block that inheritance.
URI 참조에서 사용되는 단편 식별자는 요청으로 전송되지 않지만, 구현자는 응답의 결과로 실행 중인 사용자 에이전트와 확장자 또는 스크립트에 해당 식별자를 볼 수 있음을 알아야 한다. 특히 리디렉션이 발생하고 원래 요청의 단편 식별자가 위치(Section 7.1.2)의 새로운 참조에 의해 상속되는 경우, 이는 한 사이트의 단편을 다른 사이트에 공개하는 효과를 가져올 수 있다. 첫 번째 사이트가 단편적으로 개인 정보를 사용하는 경우, 그 상속을 차단하기 위해 다른 사이트로의 리디렉션에 (비어 있을 가능성이 있는) 조각 구성요소가 포함되도록 해야 한다.
9.6. Disclosure of Product Information
The User-Agent (Section 5.5.3), Via (Section 5.7.1 of [RFC7230]), and Server (Section 7.4.2) header fields often reveal information about the respective sender's software systems. In theory, this can make it easier for an attacker to exploit known security holes; in practice, attackers tend to try all potential holes regardless of the apparent software versions being used.
User-Agent(Section 5.5.3), Via([RFC7230]의 Section 5.7.1), Server(Section 7.4.2) 헤더 필드는 종종 각 발신자의 소프트웨어 시스템에 대한 정보를 공개한다. 이론적으로, 이것은 공격자가 알려진 보안 구멍을 더 쉽게 이용할 수 있게 한다. 실제로, 공격자는 사용 중인 명백한 소프트웨어 버전에 상관없이 모든 잠재적 구멍을 시도하는 경향이 있다.
Proxies that serve as a portal through a network firewall ought to take special precautions regarding the transfer of header information that might identify hosts behind the firewall. The Via header field allows intermediaries to replace sensitive machine names with pseudonyms.
네트워크 방화벽을 통한 포털 역할을 하는 프락시는 방화벽 뒤의 호스트를 식별할 수 있는 헤더 정보의 전송과 관련하여 특별한 예방 조치를 취해야 한다. Via 헤더 필드는 매개자가 민감한 기계 이름을 유사어로 대체할 수 있도록 한다.
9.7. Browser Fingerprinting
Browser fingerprinting is a set of techniques for identifying a specific user agent over time through its unique set of characteristics. These characteristics might include information related to its TCP behavior, feature capabilities, and scripting environment, though of particular interest here is the set of unique characteristics that might be communicated via HTTP. Fingerprinting is considered a privacy concern because it enables tracking of a user agent's behavior over time without the corresponding controls that the user might have over other forms of data collection (e.g., cookies). Many general-purpose user agents (i.e., Web browsers) have taken steps to reduce their fingerprints.
브라우저 지문 채취는 고유한 특성 집합을 통해 시간에 따라 특정 사용자 에이전트를 식별하기 위한 기법 집합이다. 이러한 특성은 TCP 동작, 기능 기능 및 스크립팅 환경과 관련된 정보를 포함할 수 있지만, 여기서는 HTTP를 통해 전달될 수 있는 고유한 특성의 집합이다. 지문 감식은 사용자가 다른 형태의 데이터 수집(e.g., cookies)에 대해 가질 수 있는 해당 제어 장치 없이 시간 경과에 따른 사용자 에이전트의 행동을 추적할 수 있기 때문에 개인 정보 보호 문제로 간주된다. 많은 범용 사용자 에이전트(i.e., 웹 브라우저)는 지문을 줄이기 위한 조치를 취했다.
There are a number of request header fields that might reveal information to servers that is sufficiently unique to enable fingerprinting. The From header field is the most obvious, though it is expected that From will only be sent when self-identification is desired by the user. Likewise, Cookie header fields are deliberately designed to enable re-identification, so fingerprinting concerns only apply to situations where cookies are disabled or restricted by the user agent's configuration.
지문을 사용할 수 있을 만큼 충분히 고유한 정보를 서버에 노출시킬 수 있는 요청 헤더 필드가 다수 존재한다. From 헤더 필드는 사용자가 자체 식별을 원할 때만 발송될 것으로 예상되지만 가장 명백하다. 마찬가지로 Cookie 헤더 필드는 의도적으로 재식별이 가능하도록 설계되어 있으므로 지문채취 우려는 쿠키가 비활성화되거나 사용자 에이전트의 구성에 의해 제한되는 상황에만 적용된다.
The User-Agent header field might contain enough information to uniquely identify a specific device, usually when combined with other characteristics, particularly if the user agent sends excessive details about the user's system or extensions. However, the source of unique information that is least expected by users is proactive negotiation (Section 5.3), including the Accept, Accept-Charset, Accept-Encoding, and Accept-Language header fields.
User-Agent 헤더 필드는 특정 장치를 고유하게 식별하기에 충분한 정보를 포함할 수 있으며, 일반적으로 다른 특성과 결합될 경우 특히 사용자 에이전트가 사용자의 시스템 또는 확장에 대한 과도한 세부 정보를 전송하는 경우 더욱 그러하다. 그러나 사용자가 가장 기대하지 않는 고유 정보의 출처는 Accept, Accept-Charset, Accept-Encoding 및 Accept-Language 헤더 필드를 포함한 사전 협상(Section 5.3)이다.
In addition to the fingerprinting concern, detailed use of the Accept-Language header field can reveal information the user might consider to be of a private nature. For example, understanding a given language set might be strongly correlated to membership in a particular ethnic group. An approach that limits such loss of privacy would be for a user agent to omit the sending of Accept-Language except for sites that have been whitelisted, perhaps via interaction after detecting a Vary header field that indicates language negotiation might be useful.
지문 인식 문제 외에도, 사용 언어 헤더 필드를 자세히 사용하면 사용자가 개인 성격으로 간주할 수 있는 정보가 노출될 수 있다. 예를 들어, 주어진 언어 집합을 이해하는 것은 특정 민족 집단의 구성원 자격과 강하게 관련될 수 있다. 이러한 개인 정보 상실을 제한하는 접근방식은 사용자 에이전트가 언어 협상이 유용할 수 있음을 나타내는 Vary 헤더 필드를 탐지한 후 상호작용을 통해 화이트리스트에 있는 사이트를 제외하고 수락 언어의 전송을 생략하는 것이다.
In environments where proxies are used to enhance privacy, user agents ought to be conservative in sending proactive negotiation header fields. General-purpose user agents that provide a high degree of header field configurability ought to inform users about the loss of privacy that might result if too much detail is provided. As an extreme privacy measure, proxies could filter the proactive negotiation header fields in relayed requests.
프라이버시를 높이기 위해 프락시를 사용하는 환경에서 사용자 에이전트는 사전 예방적 협상 헤더 필드를 전송하는 데 있어 보수적이어야 한다. 높은 수준의 헤더 필드 구성성을 제공하는 범용 사용자 에이전트는 너무 많은 세부 정보가 제공될 경우 발생할 수 있는 개인 정보 상실에 대해 사용자에게 알려야 한다. 극단적인 개인 정보 보호 조치로, 대리인들은 중계된 요청에서 사전 협상 헤더 필드를 필터링할 수 있다.
10. Acknowledgments
11. References
11.1. Normative References
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part One: Format of Internet Message
Bodies", RFC 2045, November 1996.
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046,
November 1996.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, January 2005.
[RFC4647] Phillips, A., Ed. and M. Davis, Ed., "Matching of Language
Tags", BCP 47, RFC 4647, September 2006.
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234, January 2008.
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
Languages", BCP 47, RFC 5646, September 2009.
[RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in
Internationalization in the IETF", BCP 166, RFC 6365,
September 2011.
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Message Syntax and Routing",
RFC 7230, June 2014.
[RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Conditional Requests", RFC 7232,
June 2014.
[RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
"Hypertext Transfer Protocol (HTTP/1.1): Range Requests",
RFC 7233, June 2014.
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching",
RFC 7234, June 2014.
[RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Authentication", RFC 7235, June 2014.
11.2. Informative References
[BCP13] Freed, N., Klensin, J., and T. Hansen, "Media Type
Specifications and Registration Procedures", BCP 13,
RFC 6838, January 2013.
[BCP178] Saint-Andre, P., Crocker, D., and M. Nottingham,
"Deprecating the "X-" Prefix and Similar Constructs in
Application Protocols", BCP 178, RFC 6648, June 2012.
[BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration
Procedures for Message Header Fields", BCP 90, RFC 3864,
September 2004.
[OWASP] van der Stock, A., Ed., "A Guide to Building Secure Web
Applications and Web Services", The Open Web Application
Security Project (OWASP) 2.0.1, July 2005,
[REST] Fielding, R., "Architectural Styles and the Design of
Network-based Software Architectures",
Doctoral Dissertation, University of California, Irvine,
September 2000,
<http://roy.gbiv.com/pubs/dissertation/top.htm>.
[RFC1945] Berners-Lee, T., Fielding, R., and H. Nielsen, "Hypertext
Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996.
[RFC2049] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Five: Conformance Criteria and
Examples", RFC 2049, November 1996.
[RFC2068] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T.
Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1",
RFC 2068, January 1997.
[RFC2295] Holtman, K. and A. Mutz, "Transparent Content Negotiation
in HTTP", RFC 2295, March 1998.
[RFC2388] Masinter, L., "Returning Values from Forms: multipart/
form-data", RFC 2388, August 1998.
[RFC2557] Palme, F., Hopmann, A., Shelness, N., and E. Stefferud,
"MIME Encapsulation of Aggregate Documents, such as HTML
(MHTML)", RFC 2557, March 1999.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC2774] Frystyk, H., Leach, P., and S. Lawrence, "An HTTP
Extension Framework", RFC 2774, February 2000.
[RFC2817] Khare, R. and S. Lawrence, "Upgrading to TLS Within
HTTP/1.1", RFC 2817, May 2000.
[RFC2978] Freed, N. and J. Postel, "IANA Charset Registration
Procedures", BCP 19, RFC 2978, October 2000.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008.
[RFC5322] Resnick, P., "Internet Message Format", RFC 5322,
October 2008.
[RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP",
RFC 5789, March 2010.
[RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch,
"Network Time Protocol Version 4: Protocol and Algorithms
Specification", RFC 5905, June 2010.
[RFC5987] Reschke, J., "Character Set and Language Encoding for
Hypertext Transfer Protocol (HTTP) Header Field
Parameters", RFC 5987, August 2010.
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010.
[RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265,
April 2011.
[RFC6266] Reschke, J., "Use of the Content-Disposition Header Field
in the Hypertext Transfer Protocol (HTTP)", RFC 6266,
June 2011.
[RFC7238] Reschke, J., "The Hypertext Transfer Protocol (HTTP)
Status Code 308 (Permanent Redirect)", RFC 7238,
June 2014.
Appendix A. Differences between HTTP and MIME
HTTP/1.1 uses many of the constructs defined for the Internet Message Format [RFC5322] and the Multipurpose Internet Mail Extensions (MIME) [RFC2045] to allow a message body to be transmitted in an open variety of representations and with extensible header fields. However, RFC 2045 is focused only on email; applications of HTTP have many characteristics that differ from email; hence, HTTP has features that differ from MIME. These differences were carefully chosen to optimize performance over binary connections, to allow greater freedom in the use of new media types, to make date comparisons easier, and to acknowledge the practice of some early HTTP servers and clients.
HTTP/1.1은 메시지 본문을 확장 가능한 다양한 표현과 확장 가능한 헤더 필드로 전송하기 위해 인터넷 메시지 형식 [RFC5322] 및 다목적 인터넷 메일 확장자(MIME)[RFC2045]에 대해 정의된 많은 구성을 사용한다. 그러나, RFC 2045는 이메일에만 초점을 맞춘다; HTTP의 어플리케이션은 이메일과 다른 많은 특성을 가지고 있다; 따라서 HTTP는 MIME과 다른 특징을 가지고 있다. 이러한 차이점은 이진 연결보다 성능을 최적화하고, 새로운 미디어 유형을 더 자유롭게 사용하고, 날짜 비교를 더 쉽게 하고, 그리고 더 쉽게 하기 위해 신중하게 선택되었다. 초기 HTTP 서버 및 클라이언트의 관행을 인정한다.
This appendix describes specific areas where HTTP differs from MIME. Proxies and gateways to and from strict MIME environments need to be aware of these differences and provide the appropriate conversions where necessary.
이 부록은 HTTP가 MIME과 다른 특정 영역을 설명한다. 엄격한 MIME 환경으로의 프락시 및 게이트웨이는 이러한 차이를 인식하고 필요한 경우 적절한 변환을 제공해야 한다.
A.1. MIME-Version
HTTP is not a MIME-compliant protocol. However, messages can include a single MIME-Version header field to indicate what version of the MIME protocol was used to construct the message. Use of the MIME-Version header field indicates that the message is in full conformance with the MIME protocol (as defined in [RFC2045]). Senders are responsible for ensuring full conformance (where possible) when exporting HTTP messages to strict MIME environments.
HTTP는 MIME 호환 프로토콜이 아니다. 그러나 메시지에는 메시지 구성에 사용된 MIME 프로토콜 버전을 나타내는 단일 MIME 버전 헤더 필드가 포함될 수 있다. MIME-Version 헤더 필드를 사용하면 메시지가 MIME 프로토콜([RFC2045]에서 정의)을 완전히 준수함을 나타낸다. 발신자는 HTTP 메시지를 엄격한 MIME 환경으로 내보낼 때(가능한 경우) 완전한 적합성을 보장할 책임이 있다.
A.2. Conversion to Canonical Form
MIME requires that an Internet mail body part be converted to canonical form prior to being transferred, as described in Section 4 of [RFC2049]. Section 3.1.1.3 of this document describes the forms allowed for subtypes of the "text" media type when transmitted over HTTP. [RFC2046] requires that content with a type of “text" represent line breaks as CRLF and forbids the use of CR or LF outside of line break sequences. HTTP allows CRLF, bare CR, and bare LF to indicate a line break within text content.
MIME은 [RFC2049]의 Section 4에 기술된 바와 같이 인터넷 메일 본문 부분을 전송 전에 표준 형식으로 변환할 것을 요구한다. 본 문서의 Section 3.1.1.3은 HTTP를 통해 전송될 때 “text” 미디어 타입의 하위 타입에 허용되는 양식을 설명한다. [RFC2046]에서는 “text” 타입의 콘텐츠가 줄 바꿈을 CRLF로 나타내며 줄 바꿈 순서 이외의 CR 또는 LF 사용을 금지하도록 요구한다. HTTP는 CRLF, bare CR 및 bare LF가 텍스트 내용 내에서 줄 바꿈을 나타낼 수 있도록 한다.
A proxy or gateway from HTTP to a strict MIME environment ought to translate all line breaks within the text media types described in Section 3.1.1.3 of this document to the RFC 2049 canonical form of CRLF. Note, however, this might be complicated by the presence of a Content-Encoding and by the fact that HTTP allows the use of some charsets that do not use octets 13 and 10 to represent CR and LF, respectively.
HTTP에서 엄격한 MIME 환경으로의 프락시 또는 게이트웨이는 본 문서의 Section 3.1.1.3에서 설명한 텍스트 미디어 타입 내의 모든 줄 바꿈을 RFC 2049 표준 형태의 CRLF로 번역해야 한다. 그러나, 이 문제는 콘텐츠 인코딩의 존재와 HTTP가 각각 CR과 LF를 나타내기 위해 octets 13과 10을 사용하지 않는 일부 문자열 집합을 사용할 수 있기 때문에 복잡할 수 있다.
Conversion will break any cryptographic checksums applied to the original content unless the original content is already in canonical form. Therefore, the canonical form is recommended for any content that uses such checksums in HTTP.
변환은 원본 콘텐츠가 이미 표준적인 형식이 아닌 한 원본 콘텐츠에 적용되는 모든 암호화 체크섬을 깨뜨릴 것이다. 따라서, 표준 형식은 HTTP에서 그러한 체크섬을 사용하는 모든 콘텐츠에 권장된다.
A.3. Conversion of Date Formats
HTTP/1.1 uses a restricted set of date formats (Section 7.1.1.1) to simplify the process of date comparison. Proxies and gateways from other protocols ought to ensure that any Date header field present in a message conforms to one of the HTTP/1.1 formats and rewrite the date if necessary.
HTTP/1.1은 제한된 날짜 형식 집합(Section 7.1.1)을 사용하여 날짜 비교 프로세스를 단순화한다. 다른 프로토콜의 프락시 및 게이트웨이는 메시지에 있는 모든 Date 헤더 필드가 HTTP/1.1 형식 중 하나를 준수하는지 확인하고 필요한 경우 날짜를 다시 작성해야 한다.
A.4. Conversion of Content-Encoding
MIME does not include any concept equivalent to HTTP/1.1’s Content-Encoding header field. Since this acts as a modifier on the media type, proxies and gateways from HTTP to MIME-compliant protocols ought to either change the value of the Content-Type header field or decode the representation before forwarding the message. (Some experimental applications of Content-Type for Internet mail have used a media-type parameter of “;conversions=<content-coding>" to perform a function equivalent to Content-Encoding. However, this parameter is not part of the MIME standards).
MIME에는 HTTP/1.1의 Content-Encoding 헤더 필드에 해당하는 개념이 포함되지 않는다. 이것이 미디어 타입에 수식어 역할을 하기 때문에, HTTP에서 MIME 호환 프로토콜로 프락시 및 게이트웨이는 메시지를 전달하기 전에 Content-Type 헤더 필드의 값을 변경하거나 표현을 디코딩해야 한다. (인터넷 메일용 Content-Type의 일부 실험 애플리케이션에서는 “;conversations= <content-coding>” 의 미디어 타입 매개변수를 사용하여 Content-Encoding과 동등한 기능을 수행했다. 그러나 이 매개변수는 MIME 표준의 일부가 아니다.
A.5. Conversion of Content-Transfer-Encoding
HTTP does not use the Content-Transfer-Encoding field of MIME. Proxies and gateways from MIME-compliant protocols to HTTP need to remove any Content-Transfer-Encoding prior to delivering the response message to an HTTP client.
HTTP는 MIME의 Content-Transfer-Encoding 필드를 사용하지 않는다. MIME 호환 프로토콜에서 HTTP로 가는 프락시 및 게이트웨이는 응답 메시지를 HTTP 클라이언트에 전달하기 전에 Content-Transfer-Encoding 을 제거해야 한다.
Proxies and gateways from HTTP to MIME-compliant protocols are responsible for ensuring that the message is in the correct format and encoding for safe transport on that protocol, where “safe transport" is defined by the limitations of the protocol being used. Such a proxy or gateway ought to transform and label the data with an appropriate Content-Transfer-Encoding if doing so will improve the likelihood of safe transport over the destination protocol.
HTTP에서 MIME 호환 프로토콜로의 프락시 및 게이트웨이는 메시지가 해당 프로토콜의 안전한 전송을 위해 올바른 형식과 인코딩인지 확인하는 역할을 하며, 여기서 “안전한 전송” 은 사용 중인 프로토콜의 제한에 의해 정의된다. 그러한 프락시 또는 게이트웨이는 적절한 Content-Transfer-Encoding으로 데이터를 변환하고 라벨을 부착해야 한다. 그렇게 하면 대상 프로토콜을 통한 안전한 전송 가능성이 개선된다.
A.6. MHTML and Line Length Limitations
HTTP implementations that share code with MHTML [RFC2557] implementations need to be aware of MIME line length limitations. Since HTTP does not have this limitation, HTTP does not fold long lines. MHTML messages being transported by HTTP follow all conventions of MHTML, including line length limitations and folding, canonicalization, etc., since HTTP transfers message-bodies as payload and, aside from the "multipart/byteranges" type (Appendix A of [RFC7233]), does not interpret the content or any MIME header lines that might be contained therein.
MHTML [RFC2557] 구현과 코드를 공유하는 HTTP 구현은 MIME 라인 길이 제한을 인식할 필요가 있다. HTTP는 이러한 제한이 없으므로 HTTP는 긴 줄을 접지 않는다. HTTP에 의해 전송되는 MHTML 메시지는 HTTP가 메시지 본문을 페이로드로 전송하고 “multipart/byteranges” 타입([RFC7233]의 부록 A)을 제외하고, 그 내용이나 MIME 헤더 라인을 해석하지 않기 때문에, 라인 길이 제한과 접기, 표준화 등을 포함한 MHTML의 모든 규약을 따른다.
Appendix B. Changes from RFC 2616
The primary changes in this revision have been editorial in nature: extracting the messaging syntax and partitioning HTTP semantics into separate documents for the core features, conditional requests, partial requests, caching, and authentication. The conformance language has been revised to clearly target requirements and the terminology has been improved to distinguish payload from representations and representations from resources.
본 개정의 주요 변경사항은 본질적으로 사설이 되어왔다: 메시징 구문을 추출하고 HTTP 의미론을 핵심 기능, 조건부 요청, 부분 요청, 캐싱, 인증에 대한 별도의 문서로 분할한다. 적합성 언어는 명확한 타겟 요구사항으로 수정되었고 용어는 페이로드와 표현 및 표현과 리소스를 구별하도록 개선되었다.
A new requirement has been added that semantics embedded in a URI be disabled when those semantics are inconsistent with the request method, since this is a common cause of interoperability failure. (Section 2)
이는 상호운용성 장애의 일반적인 원인이므로 그러한 의미론들이 요청 메서드에 부합하지 않을 경우 URI에 내재된 의미론들이 비활성화되어야 한다는 새로운 요구사항이 추가되었다. (Section 2)
An algorithm has been added for determining if a payload is associated with a specific identifier. (Section 3.1.4.1)
페이로드가 특정 식별자와 연관되어 있는지 여부를 결정하기 위한 알고리즘이 추가되었다. (Section 3.1.4.1)
The default charset of ISO-8859-1 for text media types has been removed; the default is now whatever the media type definition says. Likewise, special treatment of ISO-8859-1 has been removed from the Accept-Charset header field. (Section 3.1.1.3 and Section 5.3.3)
텍스트 미디어 타입에 대한 ISO-8859-1의 기본 문자 집합이 제거되었으며, 미디어 타입 정의가 말하는 기본 문자 집합은 이제 모두 삭제되었다. 마찬가지로 ISO-8859-1의 특별 처리는 Accept-Charset 헤더 필드에서 제거되었다. (Section 3.1.1.3 및 Section 5.3.3)
The definition of Content-Location has been changed to no longer affect the base URI for resolving relative URI references, due to poor implementation support and the undesirable effect of potentially breaking relative links in content-negotiated resources. (Section 3.1.4.2)
Content-Location의 정의가 더 이상 상대적 URI 참조를 해결하기 위한 기본 URI에 영향을 주지 않도록 변경되었는데, 이는 열악한 구현 지원과 content-negotiated 리소스의 상대적 링크의 중단 가능성으로 인한 바람직하지 않은 영향 때문이다. (Section 3.1.4.2)
To be consistent with the method-neutral parsing algorithm of [RFC7230], the definition of GET has been relaxed so that requests can have a body, even though a body has no meaning for GET. (Section 4.3.1)
[RFC7230]의 method-neutral 파싱 알고리즘과 일치하기 위해, GET 정의를 완화하여 본문은 GET을 의미하지 않지만 요청은 본문를 가질 수 있다.(Section 4.3.1)
Servers are no longer required to handle all Content-* header fields and use of Content-Range has been explicitly banned in PUT requests. (Section 4.3.4)
서버는 더 이상 모든 Content-* 헤더 필드를 처리할 필요가 없으며, PUT 요청에서 Content-Range의 사용이 명시적으로 금지되었다. (Section 4.3.4)
Definition of the CONNECT method has been moved from [RFC2817] to this specification. (Section 4.3.6)
CONNECT 메서드의 정의가 [RFC2817]에서 이 명세(Section 4.3.6)로 이동되었다.
The OPTIONS and TRACE request methods have been defined as being safe. (Section 4.3.7 and Section 4.3.8)
OPTION과 TRACE 요청 메서드는 안전하다고 정의되었다. (Section 4.3.7 및 Section 4.3.8)
The Expect header field's extension mechanism has been removed due to widely-deployed broken implementations. (Section 5.1.1)
널리 배포된 잘못된 구현으로 인해 Expect 헤더 필드의 확장 메커니즘이 제거되었다. (Section 5.1.1)
The Max-Forwards header field has been restricted to the OPTIONS and TRACE methods; previously, extension methods could have used it as well. (Section 5.1.2)
Max-Forwards 헤더 필드는 OPTIONS와 TRACE 메서드로 제한되었다. 이전에는 확장 메서드에서도 사용할 수 있었다. (Section 5.1.2)
The "about:blank" URI has been suggested as a value for the Referer header field when no referring URI is applicable, which distinguishes that case from others where the Referer field is not sent or has been removed. (Section 5.5.2)
“about:blank" URI는 참조 URI가 적용되지 않을 때 Referer 헤더 필드의 값으로 제안되어 Referer 필드가 전송되지 않거나 제거된 다른 경우와 구별된다. (Section 5.5.2)
The following status codes are now cacheable (that is, they can be stored and reused by a cache without explicit freshness information present): 204, 404, 405, 414, 501. (Section 6)
다음 상태 코드는 이제 캐시 가능(즉, 명시적인 신선도 정보가 없는 상태에서 캐시에 저장 및 재사용 가능): 204, 404, 405, 414, 501. (Section 6)
The 201 (Created) status description has been changed to allow for the possibility that more than one resource has been created. (Section 6.3.2)
둘 이상의 리소스가 생성되었을 가능성을 허용하기 위해 201 (Created) 상태 설명이 변경되었다. (Section 6.3.2)
The definition of 203 (Non-Authoritative Information) has been broadened to include cases of payload transformations as well. (Section 6.3.4)
203 (Non-Authoritative Information)의 정의는 페이로드 변환의 사례도 포함하도록 확대되었다. (Section 6.3.4)
The set of request methods that are safe to automatically redirect is no longer closed; user agents are able to make that determination based upon the request method semantics. The redirect status codes 301, 302, and 307 no longer have normative requirements on response payloads and user interaction. (Section 6.4)
자동으로 리다이렉트할 수 있는 요청 메서드 집합은 더 이상 닫히지 않으며, 사용자 에이전트는 요청 메서드 의미에 기초하여 이러한 결정을 내릴 수 있다. 리다이렉트 상태 코드 301, 302 및 307은 응답 페이로드 및 사용자 상호작용에 대한 규범적 요구사항을 더 이상 가지고 있지 않다. (Section 6.4)
The status codes 301 and 302 have been changed to allow user agents to rewrite the method from POST to GET. (Sections 6.4.2 and 6.4.3)
상태 코드 301과 302는 사용자 에이전트가 이 메서드를 POST에서 GET으로 다시 쓸 수 있도록 변경되었다. (Section 6.4.2 및 Section 6.4.3)
The description of the 303 (See Other) status code has been changed to allow it to be cached if explicit freshness information is given, and a specific definition has been added for a 303 response to GET. (Section 6.4.4)
명시적인 신선도 정보가 제공될 경우 캐시할 수 있도록 303 (See Other) 상태 코드에 대한 설명이 변경되었으며, GET에 대한 303 응답에 대한 구체적인 정의가 추가되었다. (Section 6.4.4)
The 305 (Use Proxy) status code has been deprecated due to security concerns regarding in-band configuration of a proxy. (Section 6.4.5)
305 (Use Proxy) 상태 코드는 프락시의 인-밴드 구성과 관련된 보안상의 문제로 인해 더 이상 사용되지 않았다. (Section 6.4.5)
The 400 (Bad Request) status code has been relaxed so that it isn’t limited to syntax errors. (Section 6.5.1)
400 (Bad Request) 상태 코드가 구문 오류에 국한되지 않도록 완화되었다. (Section 6.5.1)
The 426 (Upgrade Required) status code has been incorporated from [RFC2817]. (Section 6.5.15)
[RFC2817]에서 426 (Upgrade Required) 상태 코드가 통합되었다. (Section 6.5.15)
The target of requirements on HTTP-date and the Date header field have been reduced to those systems generating the date, rather than all systems sending a date. (Section 7.1.1)
HTTP-date와 Date 헤더 필드의 요구사항의 대상은 날짜를 보내는 모든 시스템이 아닌 날짜를 생성하는 시스템으로 축소되었다. (Section 7.1.1)
The syntax of the Location header field has been changed to allow all URI references, including relative references and fragments, along with some clarifications as to when use of fragments would not be appropriate. (Section 7.1.2)
Location 헤더 필드의 구문은 단편 사용이 적절하지 않은 시기에 대한 일부 명확성과 함께 상대적 참조와 단편을 포함한 모든 URI 참조를 허용하도록 변경되었다. (Section 7.1.2)
Allow has been reclassified as a response header field, removing the option to specify it in a PUT request. Requirements relating to the content of Allow have been relaxed; correspondingly, clients are not required to always trust its value. (Section 7.4.1)
Allow가 응답 헤더 필드로 재분류되어, PUT 요청에서 Allow를 지정하는 옵션이 제거되었다. Allow의 내용과 관련된 요구사항은 완화되었다. 따라서 클라이언트는 항상 그 값을 신뢰해야 하는 것은 아니다. (Section 7.4.1)
A Method Registry has been defined. (Section 8.1)
메서드 레지스트리가 정의되었다. (Section 8.1)
The Status Code Registry has been redefined by this specification; previously, it was defined in Section 7.1 of [RFC2817]. (Section 8.2)
상태 코드 레지스트리는 이 명세(Section 8.2) 의해 재정의되었다. 이전에는 [RFC2817]의 Section 7.1에서 정의되었다.
Registration of content codings has been changed to require IETF Review. (Section 8.4)
콘텐츠 코딩의 등록은 IETF 검토가 필요하도록 변경되었다. (Section 8.4)
The Content-Disposition header field has been removed since it is now defined by [RFC6266].
[RFC6266]에 의해 정의된 이후 Content-Disposition 헤더 필드가 제거되었다.
The Content-MD5 header field has been removed because it was inconsistently implemented with respect to partial responses.
부분 응답과 관련하여 일관성 없이 구현되었기 때문에 Content-MD5 헤더 필드가 제거되었다.
Appendix C. Imported ABNF
The following core rules are included by reference, as defined in Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote), HEXDIG (hexadecimal 0-9/A-F/a-f), HTAB (horizontal tab), LF (line feed), OCTET (any 8-bit sequence of data), SP (space), and VCHAR (any visible US-ASCII character).
The rules below are defined in [RFC7230]:
BWS = <BWS, see [RFC7230], Section 3.2.3>
OWS = <OWS, see [RFC7230], Section 3.2.3>
RWS = <RWS, see [RFC7230], Section 3.2.3>
URI-reference = <URI-reference, see [RFC7230], Section 2.7>
absolute-URI = <absolute-URI, see [RFC7230], Section 2.7>
comment = <comment, see [RFC7230], Section 3.2.6>
field-name = <comment, see [RFC7230], Section 3.2>
partial-URI = <partial-URI, see [RFC7230], Section 2.7>
quoted-string = <quoted-string, see [RFC7230], Section 3.2.6>
token = <token, see [RFC7230], Section 3.2.6>
Appendix D. Collected ABNF
In the collected ABNF below, list rules are expanded as per Section 1.2 of [RFC7230].
Accept = [ ( "," / ( media-range [ accept-params ] ) ) *( OWS "," [
OWS ( media-range [ accept-params ] ) ] ) ]
Accept-Charset = *( "," OWS ) ( ( charset / "*" ) [ weight ] ) *( OWS
"," [ OWS ( ( charset / "*" ) [ weight ] ) ] )
Accept-Encoding = [ ( "," / ( codings [ weight ] ) ) *( OWS "," [ OWS
( codings [ weight ] ) ] ) ]
Accept-Language = *( "," OWS ) ( language-range [ weight ] ) *( OWS
"," [ OWS ( language-range [ weight ] ) ] )
Allow = [ ( "," / method ) *( OWS "," [ OWS method ] ) ]
BWS = <BWS, see [RFC7230], Section 3.2.3>
Content-Encoding = *( "," OWS ) content-coding *( OWS "," [ OWS content-coding ] )
Content-Language = *( "," OWS ) language-tag *( OWS "," [ OWS language-tag ] )
Content-Location = absolute-URI / partial-URI
Content-Type = media-type
Date = HTTP-date
Expect = "100-continue"
From = mailbox
GMT = %x47.4D.54 ; GMT
HTTP-date = IMF-fixdate / obs-date
IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
Location = URI-reference
Max-Forwards = 1*DIGIT
OWS = <OWS, see [RFC7230], Section 3.2.3>
RWS = <RWS, see [RFC7230], Section 3.2.3>
Referer = absolute-URI / partial-URI
Retry-After = HTTP-date / delay-seconds
Server = product *( RWS ( product / comment ) )
URI-reference = <URI-reference, see [RFC7230], Section 2.7>
User-Agent = product *( RWS ( product / comment ) )
Vary = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name ] ) )
absolute-URI = <absolute-URI, see [RFC7230], Section 2.7>
accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ]
accept-params = weight *accept-ext
asctime-date = day-name SP date3 SP time-of-day SP year
charset = token
codings = content-coding / "identity" / "*"
comment = <comment, see [RFC7230], Section 3.2.6>
content-coding = token
date1 = day SP month SP year
date2 = day "-" month "-" 2DIGIT
date3 = month SP ( 2DIGIT / ( SP DIGIT ) )
day = 2DIGIT
day-name = %x4D.6F.6E ; Mon
/ %x54.75.65 ; Tue
/ %x57.65.64 ; Wed
/ %x54.68.75 ; Thu
/ %x46.72.69 ; Fri
/ %x53.61.74 ; Sat
/ %x53.75.6E ; Sun
day-name-l = %x4D.6F.6E.64.61.79 ; Monday
/ %x54.75.65.73.64.61.79 ; Tuesday
/ %x57.65.64.6E.65.73.64.61.79 ; Wednesday
/ %x54.68.75.72.73.64.61.79 ; Thursday
/ %x46.72.69.64.61.79 ; Friday
/ %x53.61.74.75.72.64.61.79 ; Saturday
/ %x53.75.6E.64.61.79 ; Sunday
delay-seconds = 1*DIGIT
field-name = <comment, see [RFC7230], Section 3.2>
hour = 2DIGIT
language-range = <language-range, see [RFC4647], Section 2.1>
language-tag = <Language-Tag, see [RFC5646], Section 2.1>
mailbox = <mailbox, see [RFC5322], Section 3.4>
media-range = ( "*/*" / ( type "/*" ) / ( type "/" subtype ) ) *( OWS ";" OWS parameter )
media-type = type "/" subtype *( OWS ";" OWS parameter )
method = token
minute = 2DIGIT
month = %x4A.61.6E ; Jan
/ %x46.65.62 ; Feb
/ %x4D.61.72 ; Mar
/ %x41.70.72 ; Apr
/ %x4D.61.79 ; May
/ %x4A.75.6E ; Jun
/ %x4A.75.6C ; Jul
/ %x41.75.67 ; Aug
/ %x53.65.70 ; Sep
/ %x4F.63.74 ; Oct
/ %x4E.6F.76 ; Nov
/ %x44.65.63 ; Dec
obs-date = rfc850-date / asctime-date
parameter = token "=" ( token / quoted-string )
partial-URI = <partial-URI, see [RFC7230], Section 2.7>
product = token [ "/" product-version ]
product-version = token
quoted-string = <quoted-string, see [RFC7230], Section 3.2.6>
qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] )
rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
second = 2DIGIT
subtype = token
time-of-day = hour ":" minute ":" second
token = <token, see [RFC7230], Section 3.2.6>
type = token
weight = OWS ";" OWS "q=" qvalue
year = 4DIGIT
'RFC' 카테고리의 다른 글
RFC 7232 - HTTP/1.1 : Conditional Requests 번역 (1) | 2020.05.26 |
---|---|
HTTP/1.1 RFC 2616과 개정된 RFC 7230, 7231, 7232, 7233, 7234 차이점 정리 (0) | 2020.05.18 |
RFC 7233 - HTTP/1.1 : Range Requests 번역 (0) | 2020.05.17 |
RFC 7235 - HTTP/1.1 : Authentication 번역 (0) | 2020.05.17 |
RFC 7230 - HTTP/1.1 : Message Syntax and Routing 번역 (11) | 2020.05.15 |