인터넷 엔지니어링 태스크 포스 (IETF) J. Snell
의견 요청: 7240 2014년 6월
카테고리: 표준 트랙
ISSN: 2070-1721

HTTP용 Prefer 헤더


Abstract

이 명세서는 클라이언트가 요청을 처리하는 동안 서버가 특정 동작을 사용하도록 요청할 때 사용할 수 있는 HTTP 헤더 필드를 정의합니다.

Status of This Memo

이 문서는 인터넷 표준 트랙 문서입니다.

이 문서는 인터넷 엔지니어링 태스크 포스(IETF)의 산출물입니다. 이는 IETF 커뮤니티의 합의를 반영합니다. 공개 검토를 거쳤으며 인터넷 엔지니어링 스티어링 그룹(IESG)에 의해 발행 승인을 받았습니다. 인터넷 표준에 관한 추가 정보는 RFC 5741의 섹션 2에서 확인할 수 있습니다.

이 문서의 현재 상태, 정오표, 및 피드백 제공 방법에 대한 정보는 http://www.rfc-editor.org/info/rfc7240에서 확인할 수 있습니다.

Copyright Notice

Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved.

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.

1. 소개

HTTP 요청을 처리하는 과정에서는 일반적으로 서버나 중계자가 적용할 수 있는 필수 및 선택적 동작들이 다양하게 존재합니다. 이러한 동작들은 응답 내에서 미묘하거나 명백한 여러 방식으로 드러납니다.

예를 들어 Atom Publishing Protocol([RFC5023])에서 정의된 것과 유사하게 리소스를 수정하기 위해 HTTP PUT 메서드를 사용할 때, 서버는 수정된 리소스의 전체 표현을 반환할지 또는 작업의 성공 완료만을 나타내는 최소한의 응답을 반환할지 선택할 수 있습니다. 어떤 유형의 응답을 클라이언트에 반환할지의 선택은 일반적으로 요청의 성공적인 처리에는 영향을 미치지 않지만, 예를 들어 응답을 받은 후 클라이언트가 취해야 할 추가 작업에 영향을 줄 수 있습니다. 즉, 응답에 수정된 리소스의 표현을 포함하면 클라이언트가 후속 GET 요청을 보내는 것을 피할 수 있습니다.

마찬가지로, 요청을 처리하는 서버는 기술적으로 무효이거나 잘못되었지만 여전히 이해 가능한 요청을 어떻게 처리할지에 대해 결정을 내려야 하는 상황에 직면하는 경우가 자주 있습니다. 서버가 요청의 기술적 오류를 무시하고도 요청을 성공적으로 처리할 수 있을 수 있습니다. 애플리케이션의 특정 요구사항과 요청의 성격에 따라, 클라이언트는 그러한 관대한 처리가 적절한지 여부를 달리 판단할 수 있습니다.

이러한 경우에 어떤 동작을 적용할지는 요청을 처리하는 서버의 결정에 달려 있지만, 서버는 선택적 동작에 대해 클라이언트가 선호를 지정하도록 위임하고 싶을 수 있습니다.

현재 HTTP는 주어진 요청의 선택적 처리 측면에 대한 클라이언트의 선호를 명시적으로 표현하는 수단을 제공하지 않습니다. HTTP는 Expect 헤더를 제공하여 요청 처리에 대한 필수 기대사항을 식별하는 데 사용할 수 있지만, 선택적 선호를 전달하는 데 Expect 헤더를 사용하는 것은 문제가 있습니다:

  1. Expect 헤더 필드의 의미는 인식되지 않거나 지원되지 않는 기대사항을 명시한 요청을 중계자나 서버가 거부하도록 요구합니다.
  2. Expect 헤더 필드는 종단 간(end-to-end)이지만 HTTP 명세는 해당 헤더가 홉-바이-홉으로 처리되도록 요구합니다. 즉, 클라이언트와 오리진 서버 사이에 요청을 처리하는 모든 중간 중계자는 기대사항을 처리할 수 있는지 판단해야 합니다.

Expect 헤더의 must-understand 의미는 선택적 선호를 표현하기에 적절하지 않습니다.

클라이언트가 선택할 수 있는 다른 방법은 요청 URI의 쿼리 문자열 매개변수를 사용해 선호를 표현하는 것입니다. 그러나 URI를 변경하는 어떤 메커니즘도 캐시가 변경된 URI를 기록하는 등 바람직하지 않은 부작용을 초래할 수 있습니다.

대안으로, 본 명세서는 클라이언트가 요청 처리 중 서버에 선택적 동작의 적용을 요청할 수 있도록 하는 새로운 HTTP 요청 헤더 필드를 정의합니다. 또한 이 새 헤더에서 사용할 몇 가지 초기 선호 토큰을 정의합니다.

이 문서에서 키워드 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 및 "OPTIONAL"은 [RFC2119]에 설명된 대로 해석됩니다.

1.1. 문법 표기

이 명세서는 Augmented Backus-Naur Form(ABNF) 표기법([RFC5234])을 사용하며, [RFC7230]의 섹션 3.2.1 및 3.2.4에서 정의된 "token", "word", "OWS", "BWS" 규칙과 #rule 확장을 참조로 포함합니다; 또한 [RFC7231]의 섹션 8.1.3에서 정의된 "delta-seconds" 규칙도 포함합니다.

2. Prefer 요청 헤더 필드

Prefer 요청 헤더 필드는 특정 서버 동작이 클라이언트에 의해 선호되지만 요청의 성공적인 완료에 필수적이지 않음을 나타내는 데 사용됩니다. Prefer는 [RFC7231]의 섹션 6.1.2에서 정의된 Expect 헤더 필드와 성격이 유사하지만, 서버는 명시된 선호를 무시할 수 있다는 점이 다릅니다.

ABNF:

  Prefer     = "Prefer" ":" 1#preference
  preference = token [ BWS "=" BWS word ] 
               *( OWS ";" [ OWS parameter ] )
  parameter  = token [ BWS "=" BWS word ]
      

이 헤더 필드는 향후 Registry of Preferences(섹션 5.1)에 포함될 수 있는 값을 허용하도록 확장 가능한 문법으로 정의됩니다. 요청의 Prefer 헤더 필드에 포함된 특정 선호 토큰을 서버가 인식하지 못하거나 준수할 수 없으면, 그 토큰들을 무시하고 오류를 신호하는 대신 계속 처리해야 합니다.

선호 토큰과 매개변수 내에서의 빈값 또는 길이가 0인 값은 아무 값도 지정되지 않은 것과 동등합니다. 따라서 다음의 예들은 단일 "bar" 매개변수를 가진 "foo" 선호의 동등한 예시입니다.

  Prefer: foo; bar
  Prefer: foo; bar=""
  Prefer: foo=""; bar
      

선호 토큰마다 선택적 매개변수 집합을 지정할 수 있습니다. 이러한 매개변수의 의미와 적용은 각 선호 토큰의 정의 및 서버 구현에 따라 달라집니다. 주어진 선호에서 매개변수들의 순서에는 의미가 부여되지 않습니다.

선호 토큰 이름과 매개변수 이름의 비교는 대소문자 구분 없이 수행되는 반면, 값은 토큰이든 인용 문자열이든 관계없이 대소문자 구분이 적용됩니다.

Prefer 헤더 필드는 종단 간(end to end)이며, 요청이 전달될 경우 Proxy는 Prefer가 [RFC7230] 섹션 6.1에 정의된 Connection 헤더 필드를 사용해 명시적으로 홉-바이-홉으로 식별되지 않는 한 Prefer 헤더를 전달해야 합니다.

여러 상황에서 중계자는 대상 서버와 무관하게 선호를 자체적으로 준수할 수 있다고 판단할 수 있습니다. 예를 들어, 개입 중인 중계자가 오리진 서버와 무관하게 202 (Accepted) 응답을 사용해 비동기 처리를 제공할 수 있으면, 해당 중계자는 오리진이 이를 제공할 수 있든 없든 "respond-async" 선호를 자체적으로 존중할 수 있습니다.

개별 선호 토큰은 중계자가 오리진 서버와 독립적으로 요청에 선호를 적용할 수 있는지 여부와 방법에 대해 자체 요구사항과 제한을 정의할 수 있습니다.

클라이언트는 단일 메시지에 Prefer 헤더 필드를 여러 인스턴스로 사용할 수 있으며, 또는 콤마로 구분된 여러 선호 토큰을 포함한 단일 Prefer 헤더 필드를 사용할 수 있습니다. 여러 Prefer 헤더 필드를 사용하면 이는 모든 토큰을 콤마로 연결한 단일 Prefer 헤더 필드와 동일합니다. 예를 들어 다음은 동등합니다:

세 개의 서로 다른 선호 토큰을 정의하는 여러 Prefer 헤더 필드:

POST /foo HTTP/1.1
Host: example.org
Prefer: respond-async, wait=100
Prefer: handling=lenient
Date: Tue, 20 Dec 2011 12:34:56 GMT

같은 세 선호 토큰을 정의하는 단일 Prefer 헤더 필드:

POST /foo HTTP/1.1
Host: example.org
Prefer: handling=lenient, wait=100, respond-async
Date: Tue, 20 Dec 2011 12:34:56 GMT

모든 모호성을 피하기 위해, 개별 선호 토큰은 단일 요청 내에서 여러 번 나타나지 않아야 합니다. 어떤 선호가 여러 번 지정된 경우 처음 인스턴스만 고려되어야 합니다. 이후 발생한 모든 항목은 오류를 신호하거나 요청 처리를 변경하지 않고 무시해야 합니다. 이것이 요청 내 선호의 순서가 중요하게 고려되는 유일한 경우입니다.

서버 주도의 콘텐츠 협상, 효과적인 캐싱 및 선택적 선호 적용을 올바르게 구현하는 데 수반되는 고유한 복잡성으로 인해, 구현자는 응답의 캐싱에 영향을 주는 방식으로 선호를 사용하는 경우 주의해야 하며 Prefer 헤더 메커니즘을 콘텐츠 협상에 사용해서는 안 됩니다. 서버가 캐시의 응답 엔터티 처리 방식에 변화를 초래할 수 있는 선택적 선호를 지원하는 경우, 클라이언트가 실제로 Prefer를 요청했는지 여부와 상관없이 응답에 Prefer 헤더 필드를 나열하는 Vary 헤더 필드를 포함해야 합니다. 대안으로 서버는 [RFC7231] 섹션 8.2.1에서 정의된 특수 값 "*"를 가진 Vary 헤더를 포함할 수 있습니다. 다만 "Vary: *"를 사용하면 프록시가 응답을 캐시할 수 없게 된다는 점에 유의하십시오.

선호 토큰은 구조적으로 Expect 토큰과 유사하지만, Prefer와 Expect 헤더 필드는 매우 다른 목적을 제공하며 선호는 기대사항(expectation)으로 사용할 수 없습니다.

2.1. 예시

다음 예시는 본 명세서에서 정의한 여러 선호의 사용과 순전히 설명 목적으로 정의되지 않은 확장 예시를 보여줍니다:

1. 요청을 10초 내에 처리하지 못할 경우 비동기 처리로 202 (Accepted) 응답을 반환하도록 요청합니다. 또한 정의되지 않은 "priority" 선호도 지정되어 있습니다:

POST /some-resource HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: respond-async, wait=10
Prefer: priority=5

{...}

2. 관대한(lenient) 처리를 사용:

POST /some-resource HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: Lenient

{...}

3. return=minimal 선호에 대해 선택적이며 정의되지 않은 매개변수를 사용하는 예:

POST /some-resource HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: return=minimal; foo="some parameter"

{...}

3. Preference-Applied 응답 헤더 필드

Preference-Applied 응답 헤더는 응답 메시지에 포함되어 서버가 요청 처리에 대해 어떤 Prefer 토큰을 존중하고 적용했는지를 표시할 수 있습니다.

ABNF:

  Preference-Applied = "Preference-Applied" ":" 1#applied-pref
  applied-pref = token [ BWS "=" BWS word ]
      

Preference-Applied 헤더의 문법은 Prefer 헤더와 달리 매개변수를 포함하지 않는다는 점에서 차이가 있습니다.

Preference-Applied 헤더는 서버가 특정 선호를 적용했는지 여부가 명확하지 않아 클라이언트의 응답 처리에 영향을 줄 수 있는 경우에만 필요합니다. 예를 들어 "return=representation" 또는 "return=minimal" 선호를 사용하는 경우, 클라이언트 애플리케이션은 응답의 페이로드만 검사해서는 선호가 적용되었는지 신뢰성 있게 판단하지 못할 수 있습니다. 이런 경우 Preference-Applied 헤더 필드를 사용할 수 있습니다.

요청:

PATCH /my-document HTTP/1.1
Host: example.org
Content-Type: application/example-patch
Prefer: return=representation

[{"op": "add", "path": "/a", "value": 1}]

응답:

HTTP/1.1 200 OK
Content-Type: application/json
Preference-Applied: return=representation
Content-Location: /my-document

{"a": 1}

4. 선호사항 정의

다음 하위절들은 초기 선호 집합을 정의합니다. 추가 선호는 편의성을 위해 또는 다른 애플리케이션의 재사용을 촉진하기 위해 등록될 수 있습니다. 본 명세서는 IANA의 선호사항 레지스트리를 설정합니다(참조 섹션 5.1).

4.1. "respond-async" 선호사항

"respond-async" 선호는 클라이언트가 서버가 응답을 비동기적으로 수행하는 것을 선호함을 나타냅니다. 예를 들어 응답을 생성하는 데 걸리는 시간이 서버가 설정한 임의의 임계값을 초과할 경우, 서버는 202 (Accepted) 응답을 반환함으로써 "respond-async" 선호를 존중할 수 있습니다.

ABNF:

  respond-async = "respond-async"
      

"respond-async" 선호의 주요 동기는 클라이언트가 비동기 응답 처리에 대한 능력과 선호를 서버에 표시할 수 있게 하여 비동기 요청 처리의 작동을 용이하게 하는 것입니다.

"respond-async" 선호를 지정한 요청 예시:

POST /collection HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: respond-async

{Data}

202 (Accepted)를 사용한 비동기 응답 예시:

HTTP/1.1 202 Accepted
Location: http://example.org/collection/123

202 (Accepted) 응답 상태는 [RFC7231]에서 정의되어 있지만, 해당 응답 코드를 언제 어떻게 사용하고 최종 결과를 결정하는 절차에 대해서는 거의 지침이 제공되지 않습니다. 따라서 특정 서버가 비동기 응답을 어떻게 지원하는지는 구현별 세부사항이며 본 명세서의 범위를 벗어납니다.

4.2. "return=representation" 및 "return=minimal" 선호사항

"return=representation" 선호는 클라이언트가 성공적인 요청에 대한 응답에 해당 리소스의 현재 상태를 나타내는 엔터티를 포함하기를 선호함을 나타냅니다.

반면 "return=minimal" 선호는 클라이언트가 성공적인 요청에 대해 서버가 최소한의 응답만 반환하길 원함을 나타냅니다. 일반적으로 이러한 응답은 204 (No Content) 상태를 사용할 수 있지만, 0 길이의 응답 엔터티를 가진 200 (OK)과 같은 다른 코드가 적절하게 사용될 수도 있습니다. 적절한 최소 응답의 판단은 전적으로 서버의 재량입니다.

ABNF:

  return = "return" BWS "=" BWS ("representation" / "minimal")
      

"return=representation" 선호를 존중할 때 반환된 표현은 요청이 영향을 미치는 다른 리소스를 위한 표현일 수 있으며, 이 경우 반환된 표현의 URI를 식별하기 위해 Content-Location 헤더를 사용할 수 있습니다.

"return=representation" 선호는 수정 이후 리소스의 현재 표현을 가져오기 위한 추가 GET 요청의 필요성을 제거하여 클라이언트와 서버 간 통신을 최적화하는 수단을 제공하는 것을 목표로 합니다.

POST 또는 PUT과 같은 수정 요청을 성공적으로 처리한 후, 서버는 작업의 상태를 설명하는 엔터티를 반환하거나 수정된 리소스 자체의 표현을 반환하기로 선택할 수 있습니다. 반환할 엔터티의 유형 선택은 전적으로 서버의 재량이지만, "return=representation" 및 아래 정의된 "return=minimal" 선호는 서버가 응답을 구성할 때 클라이언트의 선호를 고려할 수 있게 합니다.

"return=representation" 선호를 지정한 요청 예시:

PATCH /item/123 HTTP/1.1
Host: example.org
Content-Type: application/example-patch
Prefer: return=representation

1c1
< ABCDEFGHIJKLMNOPQRSTUVWXYZ
---
> BCDFGHJKLMNPQRSTVWXYZ

리소스 표현을 포함한 응답 예시:

HTTP/1.1 200 OK
Content-Location: http://example.org/item/123
Content-Type: text/plain
ETag: "d3b07384d113edec49eaa6238ad5ff00"

BCDFGHJKLMNPQRSTVWXYZ

대조적으로 "return=minimal" 선호는 요청 후 서버가 클라이언트에게 반환해야 하는 데이터 양을 줄일 수 있습니다. 이는 대역폭이 제한된 모바일 장치와 통신하거나 클라이언트가 요청 결과에 대한 추가 정보를 전혀 필요로 하지 않을 때 특히 유용합니다.

"return=minimal" 선호를 지정한 요청 예시:

POST /collection HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: return=minimal

{Data}

최소 응답 예시:

HTTP/1.1 201 Created
Location: http://example.org/collection/123

"return=minimal"과 "return=representation" 선호는 상호 배타적인 지시입니다. 단일 요청에 두 선호가 동시에 포함되는 상황은 의미가 없을 것으로 예상되며, 그러한 요청은 보통 클라이언트의 코딩 오류로 인한 것입니다. 따라서 두 선호가 모두 포함된 요청은 어느 것도 지정되지 않은 것처럼 처리할 수 있습니다.

4.3. "wait" 선호사항

"wait" 선호는 클라이언트가 요청이 수신된 후 서버가 요청을 처리하는 데 걸릴 것으로 예상하는 최대 시간을 초 단위로 설정하는 데 사용할 수 있습니다. 응답 생성이 지정된 시간보다 오래 걸리는 경우 서버나 프록시는 비동기 처리 모델을 선택하여 예를 들어 202 (Accepted) 응답을 반환할 수 있습니다.

ABNF:

  wait = "wait" BWS "=" BWS delta-seconds
      

HTTP 메시지는 네트워크를 통과하고 중계자에 의해 처리되는 동안 일정 시간이 소요된다는 점을 고려하는 것이 중요합니다. 이는 클라이언트가 서버가 요청을 처리하는 데 걸리는 시간 외에도 응답을 기다리는 총 시간을 증가시킵니다. 엄격한 시간 요구사항을 가진 클라이언트는 이러한 요인을 추정하여 wait 값을 적절히 조정할 수 있습니다.

다른 선호와 마찬가지로 "wait" 선호는 무시될 수 있습니다. 클라이언트는 기다릴 준비가 된 시간보다 오래 걸리는 요청을 포기할 수 있습니다.

예를 들어 다음 요청을 받은 서버는 처리에 10초 이상 걸리는 경우 비동기 응답을 선택할 수 있습니다:

POST /collection HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: respond-async, wait=10

{Data}

4.4. "handling=strict" 및 "handling=lenient" 처리 선호사항

"handling=strict" 및 "handling=lenient" 선호는 요청 처리 중 발생할 수 있는 잠재적 오류 조건을 서버가 어떻게 처리하길 원하는지를 클라이언트가 표시할 때 사용됩니다. 예를 들어 요청의 페이로드에 다양한 경미한 구문 또는 의미론적 오류가 포함되어 있지만 서버가 요청을 이해하고 성공적으로 처리할 수 있는 경우, 요청을 적절한 "4xx" 오류로 거부할지 아니면 처리를 계속할지 결정해야 합니다. "handling=strict" 선호는 개별 오류가 복구 가능하더라도 클라이언트가 요청을 거부하기를 선호함을 나타냅니다. 반대로 "handling=lenient" 선호는 서버가 요청 처리를 시도하기를 원함을 나타냅니다.

ABNF:

  handling = "handling" BWS "=" BWS ("strict" / "lenient")
    

"strict" 선호를 지정한 요청 예시:

POST /collection HTTP/1.1
Host: example.org
Content-Type: text/plain
Prefer: handling=strict

"handling=strict"와 "handling=lenient" 선호는 서로 배타적인 지시입니다. 단일 요청에 두 선호가 동시에 포함되는 상황은 의미가 없을 것으로 예상되며, 그러한 요청은 대개 클라이언트의 코딩 오류로 인한 것입니다. 따라서 두 선호가 모두 포함된 요청은 어느 것도 지정되지 않은 것처럼 처리할 수 있습니다.

5. IANA 고려사항

'Prefer' 및 'Preference-Applied' 헤더 필드는 [RFC3864]에 정의된 "Permanent Message Header Field Names" 레지스트리에 추가되었습니다 (http://www.iana.org/assignments/message-headers).

  • Header field name: Prefer
  • Applicable Protocol: HTTP
  • Status: Standard
  • Author: James M Snell <jasnell@gmail.com>
  • Change controller: IETF
  • Specification document: this specification, 섹션 2
  • Header field name: Preference-Applied
  • Applicable Protocol: HTTP
  • Status: Standard
  • Author: James M Snell <jasnell@gmail.com>
  • Change controller: IETF
  • Specification document: this specification, 섹션 3

5.1. 선호사항 등록소

IANA는 "HTTP Preferences"라는 새 레지스트리를 "Hypertext Transfer Protocol (HTTP) Parameters" 레지스트리 아래에 생성했습니다. 새 등록은 Specification Required 정책([RFC5226])을 사용합니다. 등록된 선호에 대한 요구사항은 섹션 4에 설명되어 있습니다.

등록 요청은 일반적으로 필요한 명세에서 완성된 등록 템플릿을 포함합니다. 그러나 출판 이전에 값 할당을 허용하기 위해, 지정 전문가(Designated Expert)는 사전에 제출된 템플릿을 근거로 명세서가 출판될 것이라고 확신되면 등록을 승인할 수 있습니다. 지정 전문가는 널리 배포되어 있고 적시에 등록될 가능성이 낮은 비등록 선호를 제3자가 등록하도록 결정할 수 있습니다.

등록 템플릿은 다음과 같습니다:

  • Preference: (섹션 2에 주어진 문법 규칙을 따르는 Prefer 요청 헤더 필드의 값)
  • Value: (선호 토큰에 대한 가능한 값의 열거 또는 설명)
  • Optional Parameters: (선호 토큰과 관련된 선택적 매개변수 및 그 값의 열거)
  • Description:
  • Reference:
  • Notes: [optional]

"Value" 및 "Optional Parameters" 필드는 특정 선호 토큰 정의가 어느 하나를 정의하지 않을 경우 등록 템플릿에서 생략될 수 있습니다.

등록 요청은 <ietf-http-wg@w3.org> 메일링 리스트로 보내져야 하며, 제목란에 명확히 표시되어야 합니다(예: "NEW PREFERENCE - example"은 "example" 선호를 등록하기 위한 것). 요청 제출 후 최대 14일 이내에 지정 전문가는 등록 요청을 승인하거나 거부하고 그 결정을 검토 리스트 및 IANA에 통지합니다. 거부 시에는 설명과, 해당되는 경우 성공적인 요청이 되기 위한 제안이 포함되어야 합니다.

전문가는 다음을 확인해야 합니다:

  • 요청된 선호 이름이 섹션 2의 token 규칙을 따르며 다른 등록된 선호 이름과 동일하지 않다는 것;
  • 관련된 값, 매개변수 이름 및 값이 섹션 2의 해당 ABNF 문법 사양에 부합하는지;
  • 이름이 선호의 특수성에 적합한지; 즉 의미가 특정 애플리케이션에 매우 특화된 경우 이름이 이를 반영하여 덜 특화된 용도를 위한 일반 이름을 남겨둬야 한다는 것;
  • 요청된 선호가 성공적인 처리를 위해 서버, 클라이언트 또는 중계자에게 필수적인 동작을 강제하지 않는지;
  • 선호를 정의하는 명세 문서가 선호 사용과 관련된 적절하고 완전한 보안 고려사항 논의를 포함하는지.

5.2. 초기 등록 내용

"HTTP Preferences" 레지스트리의 초기 내용은 다음과 같습니다:

  • Preference: respond-async
  • Description: 클라이언트가 서버가 요청에 대해 비동기적으로 응답하기를 선호함을 나타냄
  • Reference: [this specification], 섹션 4.1
  • Preference: return
  • Value: "minimal" 또는 "representation" 중 하나
  • Description: 값이 "minimal"인 경우 서버가 요청에 대해 최소 응답을 반환하기를 선호함을 나타냄. 값이 "representation"인 경우 서버가 요청에 대한 응답에 리소스의 현재 상태 표현을 포함하기를 선호함을 나타냄.
  • Reference: [this specification], 섹션 4.2
  • Preference: wait
  • Description: 클라이언트가 요청이 수신된 후 서버가 요청을 처리하는 데 걸릴 것으로 예상하는 최대 시간을 나타냄
  • Reference: [this specification], 섹션 4.3
  • Preference: handling
  • Value: "strict" 또는 "lenient" 중 하나
  • Description: 값이 "strict"인 경우 클라이언트가 요청 처리에 엄격한 검증과 오류 처리를 적용하길 원함을 나타냄. 값이 "lenient"인 경우 클라이언트가 관대한 검증과 오류 처리를 적용하길 원함을 나타냄.
  • Reference: [this specification], 섹션 4.4

6. 보안 고려사항

클라이언트가 요청한 특정 선호는 HTTP/1.1 및 관련 명세에서 논의된 것들 이상의 보안 고려사항과 우려를 도입할 수 있습니다. 구현자는 각 선호의 명세와 설명을 참조하여 해당 선호 사용과 관련된 보안 고려사항을 판단해야 합니다.

서버는 특정 선호를 준수하려 시도함으로써 더 큰 비용을 부담할 수 있습니다(예: 일반적으로 포함하지 않을 응답에 표현을 제공하는 비용, 또는 비동기 응답을 위해 상태를 추적하는 데 필요한 자원 할당). 서버가 무조건적으로 선호에 따를 경우 서비스 거부(DoS)에 선호가 악용될 수 있습니다. 서버는 자원을 소비하고 싶지 않은 경우 표현된 선호를 무시할 수 있습니다.

7. 참고문헌

7.1. 규범적 참고문헌

[RFC2119]
Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.
[RFC3864]
Klyne, G., Nottingham, M., and J. Mogul, “Registration Procedures for Message Header Fields”, BCP 90, RFC 3864, September 2004, <https://www.rfc-editor.org/info/rfc3864>.
[RFC5226]
Narten, T. and H. Alvestrand, “Guidelines for Writing an IANA Considerations Section in RFCs”, RFC 5226, May 2008, <https://www.rfc-editor.org/info/rfc5226>.
[RFC5234]
Crocker, D., Ed. and P. Overell, “Augmented BNF for Syntax Specifications: ABNF”, STD 68, RFC 5234, January 2008, <https://www.rfc-editor.org/info/rfc5234>.
[RFC7230]
Fielding, R., Ed. and J. Reschke, Ed., “Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing”, RFC 7230, June 2014.
[RFC7231]
Fielding, R., Ed. and J. Reschke, Ed., “Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content”, RFC 7231, June 2014.

7.2. 비규범적 참고문헌

[RFC5023]
Gregorio, J., Ed. and B. de hOra, Ed., “The Atom Publishing Protocol”, RFC 5023, October 2007, <https://www.rfc-editor.org/info/rfc5023>.

저자 주소

James M Snell
Email: jasnell@gmail.com