[要約] RFC 2295は、HTTPにおける透過的なコンテンツネゴシエーションの仕組みを定義しており、異なるコンテンツ形式のクライアントとサーバー間で最適な形式を自動的に選択することを目的としています。

Network Working Group                                         K. Holtman
Request for Comments: 2295                                           TUE
Category: Experimental                                           A. Mutz
                                                         Hewlett-Packard
                                                              March 1998
        

Transparent Content Negotiation in HTTP

HTTPでの透過的なコンテンツネゴシエーション

Status of this Memo

本文書の状態

This memo defines an Experimental Protocol for the Internet community. It does not specify an Internet standard of any kind. Discussion and suggestions for improvement are requested. Distribution of this memo is unlimited.

このメモは、インターネットコミュニティの実験プロトコルを定義します。いかなる種類のインターネット標準も規定していません。改善のための議論と提案が要求されます。このメモの配布は無制限です。

Copyright Notice

著作権表示

Copyright (C) The Internet Society (1998). All Rights Reserved.

Copyright(C)The Internet Society(1998)。全著作権所有。

ABSTRACT

概要

HTTP allows web site authors to put multiple versions of the same information under a single URL. Transparent content negotiation is an extensible negotiation mechanism, layered on top of HTTP, for automatically selecting the best version when the URL is accessed. This enables the smooth deployment of new web data formats and markup tags.

HTTPを使用すると、Webサイトの作成者は、同じ情報の複数のバージョンを1つのURLの下に置くことができます。透過的コンテンツネゴシエーションは、HTTPの上に階層化された拡張可能なネゴシエーションメカニズムであり、URLにアクセスしたときに最適なバージョンを自動的に選択します。これにより、新しいWebデータ形式とマークアップタグをスムーズに展開できます。

TABLE OF CONTENTS

目次

   1  Introduction................................................4
    1.1 Background................................................4
        
   2  Terminology.................................................5
    2.1 Terms from HTTP/1.1.......................................5
    2.2 New terms.................................................6
        
   3  Notation....................................................8
        
   4  Overview....................................................9
    4.1 Content negotiation.......................................9
    4.2 HTTP/1.0 style negotiation scheme.........................9
    4.3 Transparent content negotiation scheme...................10
    4.4 Optimizing the negotiation process.......................12
    4.5 Downwards compatibility with non-negotiating user agents.14
    4.6 Retrieving a variant by hand.............................15
    4.7 Dimensions of negotiation................................15
        
    4.8 Feature negotiation......................................15
    4.9 Length of variant lists..................................16
    4.10 Relation with other negotiation schemes.................16
        
   5  Variant descriptions.......................................17
    5.1 Syntax...................................................17
    5.2 URI......................................................17
    5.3 Source-quality...........................................18
    5.4 Type, charset, language, and length......................19
    5.5 Features.................................................19
    5.6 Description..............................................19
    5.7 Extension-attribute......................................20
        
   6  Feature negotiation........................................20
    6.1 Feature tags.............................................20
    6.1.1 Feature tag values.....................................21
    6.2 Feature sets.............................................21
    6.3 Feature predicates.......................................22
    6.4 Features attribute.......................................24
        
   7  Remote variant selection algorithms........................25
    7.1 Version numbers..........................................25
        
   8  Content negotiation status codes and headers...............25
    8.1 506 Variant Also Negotiates..............................25
    8.2 Accept-Features..........................................26
    8.3 Alternates...............................................27
    8.4 Negotiate................................................28
    8.5 TCN......................................................30
    8.6 Variant-Vary.............................................30
        
   9  Cache validators...........................................31
    9.1 Variant list validators..................................31
    9.2 Structured entity tags...................................31
    9.3 Assigning entity tags to variants........................32
        
   10 Content negotiation responses..............................32
    10.1 List response...........................................33
    10.2 Choice response.........................................34
    10.3 Adhoc response..........................................37
    10.4 Reusing the Alternates header...........................38
    10.5 Extracting a normal response from a choice response.....39
    10.6 Elaborate Vary headers..................................39
    10.6.1 Construction of an elaborate Vary header..............40
    10.6.2 Caching of an elaborate Vary header...................41
    10.7 Adding an Expires header for HTTP/1.0 compatibility.....41
    10.8 Negotiation on content encoding.........................41
        
   11 User agent support for transparent negotiation.............42
    11.1 Handling of responses...................................42
    11.2 Presentation of a transparently negotiated resource.....42
        
   12 Origin server support for transparent negotiation..........43
    12.1 Requirements............................................43
    12.2 Negotiation on transactions other than GET and HEAD.....45
        
   13 Proxy support for transparent negotiation..................45
        
   14 Security and privacy considerations........................46
    14.1 Accept- headers revealing personal information..........46
    14.2 Spoofing of responses from variant resources............47
    14.3 Security holes revealed by negotiation..................47
        
   15 Internationalization considerations........................47
        
   16 Acknowledgments............................................47
        
   17 References.................................................48
        
   18 Authors' Addresses.........................................48
        
   19 Appendix: Example of a local variant selection algorithm...49
    19.1 Computing overall quality values........................49
    19.2 Determining the result..................................51
    19.3 Ranking dimensions......................................51
        
   20 Appendix: feature negotiation examples.....................52
    20.1 Use of feature tags.....................................52
    20.2 Use of numeric feature tags.............................53
    20.3 Feature tag design......................................53
        
   21 Appendix: origin server implementation considerations......54
    21.1 Implementation with a CGI script........................54
    21.2 Direct support by HTTP servers..........................55
    21.3 Web publishing tools....................................55
        
   22 Appendix: Example of choice response construction..........55
        
   23 Full Copyright Statement...................................58
        

1 Introduction

1はじめに

HTTP allows web site authors to put multiple versions of the same information under a single URI. Each of these versions is called a `variant'. Transparent content negotiation is an extensible negotiation mechanism for automatically and efficiently retrieving the best variant when a GET or HEAD request is made. This enables the smooth deployment of new web data formats and markup tags.

HTTPにより、Webサイトの作成者は同じ情報の複数のバージョンを単一のURIの下に置くことができます。これらの各バージョンは「バリアント」と呼ばれます。透過的コンテンツネゴシエーションは、GETまたはHEADリクエストが行われたときに最適なバリアントを自動的かつ効率的に取得するための拡張可能なネゴシエーションメカニズムです。これにより、新しいWebデータ形式とマークアップタグをスムーズに展開できます。

This specification defines transparent content negotiation as an extension on top of the HTTP/1.1 protocol [1]. However, use of this extension does not require use of HTTP/1.1: transparent content negotiation can also be done if some or all of the parties are HTTP/1.0 [2] systems.

この仕様では、透過的なコンテンツネゴシエーションをHTTP / 1.1プロトコル[1]の拡張として定義しています。ただし、この拡張機能を使用するためにHTTP / 1.1を使用する必要はありません。一部またはすべての関係者がHTTP / 1.0 [2]システムである場合、透過的なコンテンツネゴシエーションも実行できます。

Transparent content negotiation is called `transparent' because it makes all variants which exist inside the origin server visible to outside parties.

透過的なコンテンツネゴシエーションは、発信元サーバーの内部に存在するすべてのバリアントを外部のパーティから見えるようにするため、「透過的」と呼ばれます。

Note: Some members of the IETF are currently undertaking a number of activities which are loosely related to this experimental protocol. First, there is an effort to define a protocol-independent registry for feature tags. The intention is that this experimental protocol will be one of the clients of the registry. Second, some research is being done on content negotiation systems for other transport protocols (like internet mail and internet fax) and on generalized negotiation systems for multiple transport protocols. At the time of writing, it is unclear if or when this research will lead to results in the form of complete negotiation system specifications. It is also unclear to which extent possible future specifications can or will re-use elements of this experimental protocol.

注:IETFの一部のメンバーは、現在、この実験プロトコルに緩やかに関連するいくつかの活動を行っています。まず、機能タグのプロトコルに依存しないレジストリを定義する取り組みがあります。その意図は、この実験的なプロトコルがレジストリのクライアントの1つになることです。第2に、他のトランスポートプロトコル(インターネットメールやインターネットFAXなど)のコンテンツネゴシエーションシステムと、複数のトランスポートプロトコルの一般化されたネゴシエーションシステムに関する調査が行われています。これを書いている時点では、この研究が完全な交渉システム仕様の形で結果をもたらすかどうか、またはいつになるかは不明です。また、将来の仕様でこの実験プロトコルの要素をどの程度再利用できるか、または再利用するかについても不明です。

1.1 Background
1.1 バックグラウンド

The addition of content negotiation to the web infrastructure has been considered important since the early days of the web. Among the expected benefits of a sufficiently powerful system for content negotiation are

Webインフラストラクチャへのコンテンツネゴシエーションの追加は、Webの初期の頃から重要であると考えられてきました。コンテンツネゴシエーションのための十分に強力なシステムの予想される利点には、

* smooth deployment of new data formats and markup tags will allow graceful evolution of the web

* 新しいデータ形式とマークアップタグのスムーズな展開により、Webを適切に進化させることができます

* eliminating the need to choose between a `state of the art multimedia homepage' and one which can be viewed by all web users

* 「最先端のマルチメディアホームページ」とすべてのWebユーザーが表示できるホームページのどちらかを選択する必要をなくす

* enabling good service to a wider range of browsing platforms (from low-end PDA's to high-end VR setups)

* 幅広いブラウジングプラットフォーム(ローエンドのPDAからハイエンドのVRセットアップまで)に適切なサービスを提供する

* eliminating error-prone and cache-unfriendly User-Agent based negotiation

* エラーが発生しやすく、キャッシュに不便なユーザーエージェントベースのネゴシエーションを排除

* enabling construction of sites without `click here for the X version' links

* 「Xバージョンはここをクリック」リンクなしでサイトの構築を可能にする

* internationalization, and the ability to offer multi-lingual content without a bias towards one language.

* 国際化、および1つの言語に偏らずに多言語コンテンツを提供する機能。

2 Terminology

2用語

The words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in RFC 2119 [4].

このドキュメントの「MUST」、「MUST NOT」、「SHOULD」、「SHOULD NOT」、および「MAY」は、RFC 2119 [4]に記載されているように解釈されます。

This specification uses the term `header' as an abbreviation for for `header field in a request or response message'.

この仕様では、「要求または応答メッセージのヘッダーフィールド」の省略形として「ヘッダー」という用語を使用しています。

2.1 Terms from HTTP/1.1
2.1 HTTP / 1.1の用語

This specification mostly uses the terminology of the HTTP/1.1 specification [1]. For the convenience of the reader, this section reproduces some key terminology definition from [1].

この仕様では、主にHTTP / 1.1仕様の用語を使用しています[1]。読者の便宜のために、このセクションでは、[1]からいくつかの重要な用語の定義を再現します。

request An HTTP request message.

request HTTPリクエストメッセージ。

response An HTTP response message.

response HTTP応答メッセージ。

resource A network data object or service that can be identified by a URI. Resources may be available in multiple representations (e.g. multiple languages, data formats, size, resolutions) or vary in other ways.

リソースURIで識別できるネットワークデータオブジェクトまたはサービス。リソースは、複数の表現(複数の言語、データ形式、サイズ、解像度など)で利用できる場合と、他の方法で異なる場合があります。

content negotiation The mechanism for selecting the appropriate representation when servicing a request.

コンテンツネゴシエーション要求を処理するときに適切な表現を選択するメカニズム。

client A program that establishes connections for the purpose of sending requests.

クライアントリクエストを送信する目的で接続を確立するプログラム。

user agent The client which initiates a request. These are often browsers, editors, spiders (web-traversing robots), or other end user tools.

ユーザーエージェントリクエストを開始するクライアント。これらは多くの場合、ブラウザー、エディター、スパイダー(Webトラバースロボット)、またはその他のエンドユーザーツールです。

server An application program that accepts connections in order to service requests by sending back responses. Any given program may be capable of being both a client and a server; our use of these terms refers only to the role being performed by the program for a particular connection, rather than to the program's capabilities in general. Likewise, any server may act as an origin server, proxy, gateway, or tunnel, switching behavior based on the nature of each request.

サーバー応答を送り返すことによって要求を処理するために接続を受け入れるアプリケーションプログラム。特定のプログラムは、クライアントとサーバーの両方になることができます。これらの用語の使用は、プログラムの一般的な機能ではなく、特定の接続に対してプログラムによって実行される役割のみを指します。同様に、どのサーバーも、オリジンサーバー、プロキシ、ゲートウェイ、またはトンネルとして機能し、各リクエストの性質に基づいて動作を切り替えます。

origin server The server on which a given resource resides or is to be created.

起点サーバー特定のリソースが存在するサーバー、または作成されるサーバー。

proxy An intermediary program which acts as both a server and a client for the purpose of making requests on behalf of other clients. Requests are serviced internally or by passing them on, with possible translation, to other servers. A proxy must implement both the client and server requirements of this specification.

プロキシ他のクライアントに代わってリクエストを行う目的でサーバーとクライアントの両方として機能する中間プログラム。リクエストは内部的に処理されるか、他のサーバーに変換される可能性があります。プロキシは、この仕様のクライアントとサーバーの両方の要件を実装する必要があります。

age The age of a response is the time since it was sent by, or successfully validated with, the origin server.

age応答の経過時間は、元のサーバーによって送信されてから、または正常に検証されてからの時間です。

fresh A response is fresh if its age has not yet exceeded its freshness lifetime.

フレッシュ年齢がフレッシュネスライフタイムを超えていない場合、レスポンスはフレッシュです。

2.2 New terms
2.2 新しい用語

transparently negotiable resource A resource, identified by a single URI, which has multiple representations (variants) associated with it. When servicing a request on its URI, it allows selection of the best representation using the transparent content negotiation mechanism. A transparently negotiable resource always has a variant list bound to it, which can be represented as an Alternates header (defined in section 8.3).

透過的に交渉可能なリソース複数の表現(バリアント)が関連付けられている単一のURIで識別されるリソース。 URIでリクエストを処理する場合、透過的なコンテンツネゴシエーションメカニズムを使用して最適な表現を選択できます。透過的に交渉可能なリソースには常にバリアントリストがバインドされており、これは代替ヘッダー(8.3で定義)として表すことができます。

variant list A list containing variant descriptions, which can be bound to a transparently negotiable resource.

バリアントリストバリアントの説明を含むリスト。透過的に交渉可能なリソースにバインドできます。

variant description A machine-readable description of a variant resource, usually found in a variant list. A variant description contains the variant resource URI and various attributes which describe properties of the variant. Variant descriptions are defined in section 5.

バリアントの説明通常はバリアントリストにある、バリアントリソースの機械可読な説明。バリアントの説明には、バリアントリソースURIと、バリアントのプロパティを説明するさまざまな属性が含まれています。バリアントの説明はセクション5で定義されています。

variant resource A resource from which a variant of a negotiable resource can be retrieved with a normal HTTP/1.x GET request, i.e. a GET request which does not use transparent content negotiation.

バリアントリソース通常のHTTP / 1.x GETリクエスト、つまり透過的なコンテンツネゴシエーションを使用しないGETリクエストで、交渉可能なリソースのバリアントを取得できるリソース。

neighboring variant A variant resource is called a neighboring variant resource of some transparently negotiable HTTP resource if the variant resource has a HTTP URL, and if the absolute URL of the variant resource up to its last slash equals the absolute URL of the negotiable resource up to its last slash, where equality is determined with the URI comparison rules in section 3.2.3 of [1]. The property of being a neighboring variant is important because of security considerations (section 14.2). Not all variants of a negotiable resource need to be neighboring variants. However, access to neighboring variants can be more highly optimized by the use of remote variant selection algorithms (section 7) and choice responses (section 10.2).

隣接バリアントバリアントリソースにHTTP URLがあり、バリアントリソースの最後のスラッシュまでの絶対URLが最大で交渉可能なリソースの絶対URLと等しい場合、バリアントリソースは透過的に交渉可能な一部のHTTPリソースの隣接バリアントリソースと呼ばれます。最後のスラッシュ。[1]のセクション3.2.3のURI比較ルールで等しいかどうかが判断されます。セキュリティ上の考慮事項(セクション14.2)のため、隣接するバリアントであるという特性は重要です。交渉可能なリソースのすべてのバリアントが隣接するバリアントである必要はありません。ただし、リモートバリアント選択アルゴリズム(セクション7)と選択応答(セクション10.2)を使用することで、隣接するバリアントへのアクセスをより高度に最適化できます。

remote variant selection algorithm A standardized algorithm by which a server can sometimes choose a best variant on behalf of a negotiating user agent. The algorithm typically computes whether the Accept- headers in the request contain sufficient information to allow a choice, and if so, which variant is the best variant. The use of a remote algorithm can speed up the negotiation process.

リモートバリアント選択アルゴリズムサーバーがネゴシエートするユーザーエージェントの代わりに最適なバリアントを選択できる場合がある標準化されたアルゴリズム。アルゴリズムは通常、リクエストのAccept-ヘッダーに選択を可能にするのに十分な情報が含まれているかどうかを計算し、含まれている場合は、どのバリアントが最適なバリアントかを計算します。リモートアルゴリズムを使用すると、ネゴシエーションプロセスを高速化できます。

list response A list response returns the variant list of the negotiable resource, but no variant data. It can be generated when the server does not want to, or is not allowed to, return a particular best variant for the request. List responses are defined in section 10.1.

リスト応答リスト応答は、交渉可能なリソースのバリアントリストを返しますが、バリアントデータは返しません。これは、サーバーが要求に対して特定の最良のバリアントを返すことを望まないか、または許可されない場合に生成されます。リストの応答はセクション10.1で定義されています。

choice response A choice response returns a representation of the best variant for the request, and may also return the variant list of the negotiable resource. It can be generated when the server has sufficient information to be able to choose the best variant on behalf the user agent, but may only be generated if this best variant is a neighboring variant. Choice responses are defined in section 10.2.

選択応答選択応答は、要求に最適なバリアントの表現を返します。また、交渉可能なリソースのバリアントリストを返す場合もあります。これは、サーバーがユーザーエージェントに代わって最適なバリアントを選択できる十分な情報を持っている場合に生成できますが、この最良のバリアントが隣接するバリアントである場合にのみ生成できます。選択応答はセクション10.2で定義されています。

adhoc response An adhoc response can be sent by an origin server as an extreme measure, to achieve compatibility with a non-negotiating or buggy client if this compatibility cannot be achieved by sending a list or choice response. There are very little requirements on the contents of an adhoc response. Adhoc responses are defined in section 10.3.

アドホック応答アドホック応答は、極端な手段としてオリジンサーバーによって送信され、リストまたは選択応答を送信することによってこの互換性を達成できない場合に、非交渉またはバグの多いクライアントとの互換性を実現できます。アドホック応答の内容に関する要件はほとんどありません。アドホック応答はセクション10.3で定義されています。

Accept- headers The request headers: Accept, Accept-Charset, Accept-Language, and Accept-Features.

Accept- headers要求ヘッダー:Accept、Accept-Charset、Accept-Language、およびAccept-Features。

supports transparent content negotiation From the viewpoint of an origin server or proxy, a user agent supports transparent content negotiation if and only if it sends a Negotiate header (section 8.4) which indicates such support.

透過的なコンテンツネゴシエーションのサポートオリジンサーバーまたはプロキシの観点から、ユーザーエージェントは、そのようなサポートを示すNegotiateヘッダー(セクション8.4)を送信する場合にのみ、透過的なコンテンツネゴシエーションをサポートします。

server-side override If a request on a transparently negotiated resource is made by a client which supports transparent content negotiation, an origin server is said to perform a server-side override if the server ignores the directives in the Negotiate request header, and instead uses a custom algorithm to choose an appropriate response. A server-side override can sometimes be used to work around known client bugs. It could also be used by protocol extensions on top of transparent content negotiation.

サーバー側のオーバーライド透過的にネゴシエートされたリソースに対する要求が、透過的なコンテンツネゴシエーションをサポートするクライアントによって行われた場合、サーバーがNegotiateリクエストヘッダーのディレクティブを無視し、代わりに適切な応答を選択するカスタムアルゴリズム。サーバー側のオーバーライドは、既知のクライアントのバグを回避するために使用されることがあります。透過的なコンテンツネゴシエーションに加えて、プロトコル拡張によっても使用できます。

3 Notation

3表記

The version of BNF used in this document is taken from [1], and many of the nonterminals used are defined in [1]. Note that the underlying charset is US-ASCII.

このドキュメントで使用されるBNFのバージョンは[1]から取得され、使用される非端末の多くは[1]で定義されています。基礎となる文字セットはUS-ASCIIであることに注意してください。

One new BNF construct is added:

新しいBNF構造が1つ追加されます。

1%rule

1%ルール

stands for one or more instances of "rule", separated by whitespace:

空白で区切られた「ルール」の1つ以上のインスタンスを表します。

      1%rule =  rule *( 1*LWS rule )
        

This specification also introduces

この仕様では、

      number = 1*DIGIT
        
      short-float = 1*3DIGIT [ "." 0*3DIGIT ]
        

This specification uses the same conventions as in [1] (see section 1.2 of [1]) for defining the significance of each particular requirement.

この仕様は、各特定の要件の重要性を定義するために、[1]と同じ規則([1]のセクション1.2を参照)を使用します。

4 Overview

4概要

This section gives an overview of transparent content negotiation. It starts with a more general discussion of negotiation as provided by HTTP.

このセクションでは、透過的なコンテンツネゴシエーションの概要について説明します。まず、HTTPによって提供されるネゴシエーションのより一般的な説明から始めます。

4.1 Content negotiation
4.1 コンテンツ交渉

HTTP/1.1 allows web site authors to put multiple versions of the same information under a single resource URI. Each of these versions is called a `variant'. For example, a resource http://x.org/paper could bind to three different variants of a paper:

HTTP / 1.1により、Webサイトの作成者は、同じ情報の複数のバージョンを単一のリソースURIの下に置くことができます。これらの各バージョンは「バリアント」と呼ばれます。たとえば、リソースhttp://x.org/paperは、紙の3つの異なるバリアントにバインドできます。

1. HTML, English 2. HTML, French 3. Postscript, English

1. HTML、英語2. HTML、フランス語3. Postscript、英語

Content negotiation is the process by which the best variant is selected if the resource is accessed. The selection is done by matching the properties of the available variants to the capabilities of the user agent and the preferences of the user.

コンテンツネゴシエーションは、リソースにアクセスした場合に最適なバリアントが選択されるプロセスです。選択は、利用可能なバリアントのプロパティをユーザーエージェントの機能とユーザーの設定に一致させることによって行われます。

It has always been possible under HTTP to have multiple representations available for one resource, and to return the most appropriate representation for each subsequent request. However, HTTP/1.1 is the first version of HTTP which has provisions for doing this in a cache-friendly way. These provisions include the Vary response header, entity tags, and the If-None-Match request header.

HTTPでは常に、1つのリソースで複数の表現を使用できるようにし、後続の各要求に最も適切な表現を返すことが常に可能でした。ただし、HTTP / 1.1はHTTPの最初のバージョンであり、キャッシュに適した方法でこれを実行するための規定があります。これらの規定には、Vary応答ヘッダー、エンティティタグ、およびIf-None-Match要求ヘッダーが含まれます。

4.2 HTTP/1.0 style negotiation scheme
4.2 HTTP / 1.0スタイルの交渉スキーム

The HTTP/1.0 protocol elements allow for a negotiation scheme as follows:

HTTP / 1.0プロトコル要素は、次のような交渉スキームを可能にします。

      Server _____ proxy _____ proxy _____ user
      x.org        cache       cache       agent
        
        < ----------------------------------
        |      GET http://x.org/paper
        |          Accept- headers
      choose
        |
         ---------------------------------- >
                    Best variant
        

When the resource is accessed, the user agent sends (along with its request) various Accept- headers which express the user agent capabilities and the user preferences. Then the origin server uses these Accept- headers to choose the best variant, which is returned in the response.

リソースがアクセスされると、ユーザーエージェントは、その要求と共に、ユーザーエージェントの機能とユーザー設定を表すさまざまなAccept-ヘッダーを送信します。次に、オリジンサーバーはこれらのAccept-ヘッダーを使用して、応答で返される最適なバリアントを選択します。

The biggest problem with this scheme is that it does not scale well. For all but the most minimal user agents, Accept- headers expressing all capabilities and preferences would be very large, and sending them in every request would be hugely inefficient, in particular because only a small fraction of the resources on the web have multiple variants.

このスキームの最大の問題は、拡張性が低いことです。最小限のユーザーエージェントを除いて、すべての機能と設定を表すAccept-ヘッダーは非常に大きくなり、特にWeb上のリソースのごく一部のみに複数のバリアントがあるため、すべてのリクエストでそれらを送信することは非常に非効率的です。

4.3 Transparent content negotiation scheme
4.3 透明なコンテンツ交渉スキーム

The transparent content negotiation scheme eliminates the need to send huge Accept- headers, and nevertheless allows for a selection process that always yields either the best variant, or an error message indicating that user agent is not capable of displaying any of the available variants.

透過的なコンテンツネゴシエーションスキームにより、巨大なAccept-ヘッダーを送信する必要がなくなりますが、常に最良のバリアント、またはユーザーエージェントが使用可能なバリアントのいずれも表示できないことを示すエラーメッセージを生成する選択プロセスが可能になります。

Under the transparent content negotiation scheme, the server sends a list with the available variants and their properties to the user agent. An example of a list with three variants is

透過的なコンテンツネゴシエーションスキームでは、サーバーは利用可能なバリアントとそのプロパティのリストをユーザーエージェントに送信します。 3つのバリエーションを持つリストの例は次のとおりです。

      {"paper.1" 0.9 {type text/html} {language en}},
      {"paper.2" 0.7 {type text/html} {language fr}},
      {"paper.3" 1.0 {type application/postscript} {language en}}
        

The syntax and semantics of the variant descriptions in this list are covered in section 5. When the list is received, the user agent can choose the best variant and retrieve it. Graphically, the communication can be represented as follows:

このリストのバリアントの説明の構文とセマンティクスはセクション5で説明されています。リストを受け取ると、ユーザーエージェントは最適なバリアントを選択して取得できます。グラフィカルに、通信は次のように表すことができます。

      Server _____ proxy _____ proxy _____ user
      x.org        cache       cache       agent
        
        < ----------------------------------
        |      GET http://x.org/paper
        |
        ----------------------------------- >         [list response]
                  return of list            |
                                         choose
                                            |
        < ----------------------------------
        |  GET http://x.org/paper.1
        |
         ---------------------------------- >         [normal response]
                return of paper.1
        

The first response returning the list of variants is called a `list response'. The second response is a normal HTTP response: it does not contain special content negotiation related information. Only the user agent needs to know that the second request actually retrieves a variant. For the other parties in the communication, the second transaction is indistinguishable from a normal HTTP transaction.

バリアントのリストを返す最初の応答は「リスト応答」と呼ばれます。 2番目の応答は通常のHTTP応答です。特別なコンテンツネゴシエーション関連情報は含まれていません。 2番目のリクエストが実際にバリアントを取得することを知る必要があるのは、ユーザーエージェントだけです。通信の他の当事者にとって、2番目のトランザクションは通常のHTTPトランザクションと区別できません。

With this scheme, information about capabilities and preferences is only used by the user agent itself. Therefore, sending such information in large Accept- headers is unnecessary. Accept- headers do have a limited use in transparent content negotiation however; the sending of small Accept- headers can often speed up the negotiation process. This is covered in section 4.4.

このスキームでは、機能と設定に関する情報はユーザーエージェント自体によってのみ使用されます。したがって、そのような情報を大きなAccept-ヘッダーで送信する必要はありません。ただし、Accept-ヘッダーは透過的なコンテンツネゴシエーションでの使用に制限があります。小さなAccept-ヘッダーを送信すると、ネゴシエーションプロセスを高速化できることがよくあります。これについては、セクション4.4で説明しています。

List responses are covered in section 10.1. As an example, the list response in the above picture could be:

リストの応答はセクション10.1で説明されています。例として、上の図のリストレスポンスは次のようになります。

     HTTP/1.1 300 Multiple Choices
     Date: Tue, 11 Jun 1996 20:02:21 GMT
     TCN: list
     Alternates: {"paper.1" 0.9 {type text/html} {language en}},
                 {"paper.2" 0.7 {type text/html} {language fr}},
                 {"paper.3" 1.0 {type application/postscript}
                     {language en}}
     Vary: negotiate, accept, accept-language
     ETag: "blah;1234"
     Cache-control: max-age=86400
     Content-Type: text/html
     Content-Length: 227
     <h2>Multiple Choices:</h2>
     <ul>
        
     <li><a href=paper.1>HTML, English version</a>
     <li><a href=paper.2>HTML, French version</a>
     <li><a href=paper.3>Postscript, English version</a>
     </ul>
        

The Alternates header in the response contains the variant list. The Vary header is included to ensure correct caching by plain HTTP/1.1 caches (see section 10.6). The ETag header allows the response to be revalidated by caches, the Cache-Control header controls this revalidation. The HTML entity included in the response allows the user to select the best variant by hand if desired.

応答のAlternatesヘッダーには、バリアントリストが含まれています。 Varyヘッダーは、プレーンHTTP / 1.1キャッシュによる正しいキャッシングを確実にするために含まれています(セクション10.6を参照)。 ETagヘッダーを使用すると、応答をキャッシュによって再検証できます。Cache-Controlヘッダーがこの再検証を制御します。応答に含まれるHTMLエンティティにより、ユーザーは必要に応じて最適なバリアントを手動で選択できます。

4.4 Optimizing the negotiation process
4.4 交渉プロセスの最適化

The basic transparent negotiation scheme involves two HTTP transactions: one to retrieve the list, and a second one to retrieve the chosen variant. There are however several ways to `cut corners' in the data flow path of the basic scheme.

基本的な透過​​的なネゴシエーションスキームには、2つのHTTPトランザクションが含まれます。1つはリストを取得するもので、もう1つは選択したバリアントを取得するものです。ただし、基本的なスキームのデータフローパスに「手抜き」をする方法はいくつかあります。

First, caching proxies can cache both variant lists and variants. Such caching can reduce the communication overhead, as shown in the following example:

まず、キャッシングプロキシは、バリアントリストとバリアントの両方をキャッシュできます。このようなキャッシングにより、次の例に示すように、通信オーバーヘッドを削減できます。

      Server _____ proxy _____ proxy __________ user
      x.org        cache       cache            agent
        
                                 < --------------
                                 |  GET ../paper
                                 |
                               has the list
                               in cache
                                 |
                                  -------------  >  [list response]
                                           list  |
                                                 |
                                              choose
                                                 |
                     < --------------------------
                     |   GET ../paper.1
                     |
                  has the variant
                  in cache
                     |
                      -------------------------- >  [normal response]
                         return of paper.1
        

Second, the user agent can send small Accept- headers, which may contain enough information to allow the server to choose the best variant and return it directly.

次に、ユーザーエージェントは小さなAccept-ヘッダーを送信できます。これには、サーバーが最適なバリアントを選択して直接返すのに十分な情報が含まれている場合があります。

      Server _____ proxy _____ proxy _____ user
      x.org        cache       cache       agent
        
        < ----------------------------------
        |      GET http://x.org/paper
        |       small Accept- headers
        |
      able to choose on
      behalf of user agent
        |
         ---------------------------------- >    [choice response]
              return of paper.1 and list
        

This choosing based on small Accept- headers is done with a `remote variant selection algorithm'. Such an algorithm takes the variant list and the Accept- headers as input. It then computes whether the Accept- headers contain sufficient information to choose on behalf of the user agent, and if so, which variant is the best variant. If the best variant is a neighboring variant, it may be returned, together with the variant list, in a choice response.

小さなAccept-ヘッダーに基づくこの選択は、「リモートバリアント選択アルゴリズム」で行われます。このようなアルゴリズムは、バリアントリストとAccept-ヘッダーを入力として受け取ります。次に、Accept-ヘッダーにユーザーエージェントに代わって選択するのに十分な情報が含まれているかどうかを計算し、含まれている場合は、どのバリアントが最良のバリアントかを計算します。最良のバリアントが隣接するバリアントである場合、バリアントリストとともに、選択応答で返される場合があります。

A server may only choose on behalf of a user agent supporting transparent content negotiation if the user agent explicitly allows the use of a particular remote variant selection algorithm in the Negotiate request header. User agents with sophisticated internal variant selection algorithms may want to disallow a remote choice, or may want to allow it only when retrieving inline images. If the local algorithm of the user agent is superior in only some difficult areas of negotiation, it is possible to enable the remote algorithm for the easy areas only. More information about the use of a remote variant selection algorithm can be found in [3].

ユーザーエージェントがNegotiateリクエストヘッダーで特定のリモートバリアント選択アルゴリズムの使用を明示的に許可している場合、サーバーは透過的なコンテンツネゴシエーションをサポートするユーザーエージェントに代わってのみ選択できます。高度な内部バリアント選択アルゴリズムを備えたユーザーエージェントは、リモートでの選択を許可しない場合や、インライン画像を取得する場合にのみ許可する場合があります。ユーザーエージェントのローカルアルゴリズムがネゴシエーションの一部の難しい領域でのみ優れている場合、リモートアルゴリズムを簡単な領域でのみ有効にすることができます。リモートバリアント選択アルゴリズムの使用に関する詳細は、[3]に記載されています。

Choice responses are covered in section 10.2. For example, the choice response in the above picture could be:

選択応答については、セクション10.2で説明します。たとえば、上の図の選択応答は次のようになります。

     HTTP/1.1 200 OK
     Date: Tue, 11 Jun 1996 20:05:31 GMT
     TCN: choice
     Content-Type: text/html
     Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT
     Content-Length: 5327
     Cache-control: max-age=604800
     Content-Location: paper.1
     Alternates: {"paper.1" 0.9 {type text/html} {language en}},
        
                 {"paper.2" 0.7 {type text/html} {language fr}},
                 {"paper.3" 1.0 {type application/postscript}
                     {language en}}
     Etag: "gonkyyyy;1234"
     Vary: negotiate, accept, accept-language
     Expires: Thu, 01 Jan 1980 00:00:00 GMT
        
     <title>A paper about ....
        

Finally, the above two kinds of optimization can be combined; a caching proxy which has the list will sometimes be able to choose on behalf of the user agent. This could lead to the following communication pattern:

最後に、上記の2種類の最適化を組み合わせることができます。リストを持つキャッシングプロキシは、ユーザーエージェントに代わって選択できる場合があります。これにより、次の通信パターンが発生する可能性があります。

      Server _____ proxy _____ proxy __________ user
      x.org        cache       cache            agent
        
                                 < ---------------
                                 |  GET ../paper
                                 |  small Accept
                                 |
                              able to choose
                                on behalf
                                 |
                     < ----------
                     |  GET ../paper.1
                     |
                      ---------- >   [normal response]
                        paper.1  |
                                  ---------------- >  [choice response]
                                   paper.1 and list
        

Note that this cutting of corners not only saves bandwidth, it also eliminates delays due to packet round trip times, and reduces the load on the origin server.

このコーナーの切断により、帯域幅が節約されるだけでなく、パケットのラウンドトリップ時間による遅延がなくなり、配信元サーバーの負荷が軽減されることに注意してください。

4.5 Downwards compatibility with non-negotiating user agents
4.5 非交渉ユーザーエージェントとの下位互換性

To handle requests from user agents which do not support transparent content negotiation, this specification allows the origin server to revert to a HTTP/1.0 style negotiation scheme. The specification of heuristics for such schemes is beyond the scope of this document.

透過的なコンテンツネゴシエーションをサポートしないユーザーエージェントからの要求を処理するために、この仕様では、オリジンサーバーがHTTP / 1.0スタイルのネゴシエーションスキームに戻ることができます。このようなスキームのヒューリスティックの仕様は、このドキュメントの範囲を超えています。

4.6 Retrieving a variant by hand
4.6 バリアントを手動で取得する

It is always possible for a user agent to retrieve the variant list which is bound to a negotiable resource. The user agent can use this list to make available a menu of all variants and their characteristics to the user. Such a menu allows the user to randomly browse other variants, and makes it possible to manually correct any sub-optimal choice made by the automatic negotiation process.

ユーザーエージェントは、交渉可能なリソースにバインドされているバリアントリストを取得することが常に可能です。ユーザーエージェントは、このリストを使用して、すべてのバリアントとその特性のメニューをユーザーに提供できます。このようなメニューを使用すると、ユーザーは他のバリアントをランダムに閲覧でき、自動ネゴシエーションプロセスで行われた次善の選択を手動で修正できます。

4.7 Dimensions of negotiation
4.7 交渉の側面

Transparent content negotiation defines four dimensions of negotiation:

透過的コンテンツネゴシエーションは、ネゴシエーションの4つの側面を定義します。

1. Media type (MIME type) 2. Charset 3. Language 4. Features

1. メディアタイプ(MIMEタイプ)2.文字セット3.言語4.機能

The first three dimensions have traditionally been present in HTTP. The fourth dimension is added by this specification. Additional dimensions, beyond the four mentioned above, could be added by future specifications.

最初の3つの次元は伝統的にHTTPに存在していました。 4番目の次元は、この仕様によって追加されます。上記の4つを超える寸法は、将来の仕様で追加される可能性があります。

Negotiation on the content encoding of a response (gzipped, compressed, etc.) is left outside of the realm of transparent negotiation. See section 10.8 for more information.

応答のコンテンツエンコーディング(gzip圧縮、圧縮など)に関するネゴシエーションは、透過的なネゴシエーションの領域外に残されます。詳細については、セクション10.8を参照してください。

4.8 Feature negotiation
4.8 機能交渉

Feature negotiation intends to provide for all areas of negotiation not covered by the type, charset, and language dimensions. Examples are negotiation on

機能ネゴシエーションは、タイプ、文字セット、および言語の次元でカバーされないネゴシエーションのすべての領域を提供することを意図しています。例は上の交渉です

* HTML extensions * Extensions of other media types * Color capabilities of the user agent * Screen size * Output medium (screen, paper, ...) * Preference for speed vs. preference for graphical detail

* HTML拡張*他のメディアタイプの拡張*ユーザーエージェントのカラー機能*画面サイズ*出力メディア(画面、紙など)*速度の優先とグラフィックの詳細の優先

The feature negotiation framework (section 6) is the principal means by which transparent negotiation offers extensibility; a new dimension of negotiation (really a sub-dimension of the feature dimension) can be added without the need for a new standards effort by the simple registration of a `feature tag'.

機能ネゴシエーションフレームワーク(セクション6)は、透過的なネゴシエーションが拡張性を提供する主要な手段です。ネゴシエーションの新しいディメンション(実際にはフィーチャーディメンションのサブディメンション)を追加できます。「フィーチャータグ」を登録するだけで、新しい標準を作成する必要はありません。

4.9 Length of variant lists
4.9 バリアントリストの長さ

As a general rule, variant lists should be short: it is expected that a typical transparently negotiable resource will have 2 to 10 variants, depending on its purpose. Variant lists should be short for a number of reasons:

原則として、バリアントリストは短くする必要があります。通常、透過的に交渉可能なリソースには、その目的に応じて2〜10のバリアントがあると予想されます。バリアントリストは、いくつかの理由で短くする必要があります。

1. The user must be able to pick a variant by hand to correct a bad automatic choice, and this is more difficult with a long variant list.

1. ユーザーは、不適切な自動選択を修正するために手動でバリアントを選択できる必要があります。これは、バリアントリストが長い場合はさらに困難になります。

2. A large number of variants will decrease the efficiency of internet proxy caches.

2. 多数のバリアントは、インターネットプロキシキャッシュの効率を低下させます。

3. Long variant lists will make some transparently negotiated responses longer.

3. バリアントリストが長いと、透過的にネゴシエートされる応答が長くなります。

In general, it is not desirable to create a transparently negotiable resource with hundreds of variants in order to fine-tune the graphical presentation of a resource. Any graphical fine-tuning should be done, as much as possible, by using constructs which act at the user agent side, for example

一般に、リソースのグラフィック表示を微調整するために、何百ものバリアントを持つ透過的に交渉可能なリソースを作成することは望ましくありません。グラフィカルな微調整は、ユーザーエージェント側で機能する構成を使用して、可能な限り実行する必要があります。次に例を示します。

      <center><img src=titlebanner.gif width=100%
      alt="MegaBozo Corp"></center>
        

In order to promote user agent side fine tuning, which is more scalable than fine tuning over the network, user agents which implement a scripting language for content rendering are encouraged to make the availability of this language visible for transparent content negotiation, and to allow rendering scripts to access the capabilities and preferences data used for content negotiation, as far as privacy considerations permit this.

ネットワーク経由の微調整よりもスケーラブルなユーザーエージェント側の微調整を促進するために、コンテンツレンダリング用のスクリプト言語を実装するユーザーエージェントは、透過的なコンテンツネゴシエーションでこの言語の可用性を可視化し、レンダリングを可能にすることが推奨されます。プライバシーに関する考慮事項が許可する限り、コンテンツネゴシエーションに使用される機能と設定データにアクセスするためのスクリプト。

4.10 Relation with other negotiation schemes
4.10 他の交渉スキームとの関係

The HTTP/1.x protocol suite allows for many different negotiation mechanisms. Transparent content negotiation specializes in scalable, interoperable negotiation of content representations at the HTTP level. It is intended that transparent negotiation can co-exist with other negotiation schemes, both open and proprietary, which cover different application domains or work at different points in the author-to-user chain. Ultimately, it will be up to the resource author to decide which negotiation mechanism, or combination of negotiation mechanisms, is most appropriate for the task at hand.

HTTP / 1.xプロトコルスイートは、多くの異なるネゴシエーションメカニズムを可能にします。透過的なコンテンツネゴシエーションは、HTTPレベルでのコンテンツ表現のスケーラブルで相互運用可能なネゴシエーションを専門としています。透過的なネゴシエーションは、オープンとプロプライエタリの両方の他のネゴシエーションスキームと共存でき、異なるアプリケーションドメインをカバーするか、作成者からユーザーチェーンの異なるポイントで機能することを目的としています。最終的に、どの交渉メカニズム、または交渉メカニズムの組み合わせが現在のタスクに最も適しているかを決定するのは、リソース作成者次第です。

5 Variant descriptions

5バリアントの説明

5.1 Syntax
5.1 構文

A variant can be described in a machine-readable way with a variant description.

バリアントは、バリアントの説明を使用して機械可読な方法で説明できます。

       variant-description =
                  "{" <"> URI <"> source-quality *variant-attribute"}"
        
       source-quality = qvalue
        
       variant-attribute = "{" "type" media-type "}"
                         | "{" "charset" charset "}"
                         | "{" "language"  1#language-tag "}"
                         | "{" "length" 1*DIGIT "}"
                         | "{" "features" feature-list "}"
                         | "{" "description"
                                     quoted-string [ language-tag ] "}"
                         | extension-attribute
        
       extension-attribute = "{" extension-name extension-value "}"
       extension-name      = token
       extension-value     = *( token | quoted-string | LWS
                              | extension-specials )
        
       extension-specials  =
                          <any element of tspecials except <"> and "}">
        

The feature-list syntax is defined in section 6.4.

feature-list構文はセクション6.4で定義されています。

Examples are

例は

      {"paper.2" 0.7 {type text/html} {language fr}}
        
      {"paper.5" 0.9 {type text/html} {features tables}}
        

{"paper.1" 0.001}

{"paper.1" 0.001}

The various attributes which can be present in a variant description are covered in the subsections below. Each attribute may appear only once in a variant description.

バリアントの説明に含めることができるさまざまな属性については、以下のサブセクションで説明します。各属性は、バリアントの説明で1回だけ使用できます。

5.2 URI
5.2 売り

The URI attribute gives the URI of the resource from which the variant can be retrieved with a GET request. It can be absolute or relative to the Request-URI. The variant resource may vary (on the Cookie request header, for example), but MUST NOT engage in transparent content negotiation itself.

URI属性は、GETリクエストでバリアントを取得できるリソースのURIを提供します。 Request-URIに対して絶対的または相対的に指定できます。バリアントリソースは(Cookieリクエストヘッダーなどで)異なる場合がありますが、透過的なコンテンツネゴシエーション自体に関与してはなりません。

5.3 Source-quality
5.3 ソース品質

The source-quality attribute gives the quality of the variant, as a representation of the negotiable resource, when this variant is rendered with a perfect rendering engine on the best possible output medium.

source-quality属性は、最適な出力メディアで完全なレンダリングエンジンを使用してこのバリアントをレンダリングしたときに、交渉可能なリソースの表現としてバリアントの品質を示します。

If the source-quality is less than 1, it often expresses a quality degradation caused by a lossy conversion to a particular data format. For example, a picture originally in JPEG form would have a lower source quality when translated to the XBM format, and a much lower source quality when translated to an ASCII-art variant. Note however, that degradation is a function of the source; an original piece of ASCII-art may degrade in quality if it is captured in JPEG form.

ソース品質が1未満の場合は、特定のデータ形式への不可逆変換によって引き起こされる品質低下を表すことがよくあります。たとえば、元々JPEG形式の画像は、XBM形式に変換するとソース品質が低下し、ASCIIアートバリアントに変換するとソース品質が大幅に低下します。ただし、劣化はソースの関数であることに注意してください。オリジナルのASCIIアートは、JPEG形式でキャプチャすると品質が低下する可能性があります。

The source-quality could also represent a level of quality caused by skill of language translation, or ability of the used media type to capture the intended artistic expression.

ソース品質は、言語翻訳のスキル、または使用するメディアタイプが意図した芸術的表現を取り込む能力によって引き起こされる品質のレベルを表すこともできます。

Servers should use the following table a guide when assigning source quality values:

サーバーは、ソース品質値を割り当てるときに、次の表のガイドを使用する必要があります。

1.000 perfect representation 0.900 threshold of noticeable loss of quality 0.800 noticeable, but acceptable quality reduction 0.500 barely acceptable quality 0.300 severely degraded quality 0.000 completely degraded quality

1.000完全な表現0.900品質の顕著な損失のしきい値0.800顕著なが、許容可能な品質の低下0.500かろうじて許容可能な品質0.300大幅に低下した品質0.000完全に低下した品質

The same table can be used by local variant selection algorithms (see appendix 19) when assigning degradation factors for different content rendering mechanisms. Note that most meaningful values in this table are close to 1. This is due to the fact that quality factors are generally combined by multiplying them, not by adding them.

さまざまなコンテンツレンダリングメカニズムに劣化要因を割り当てるときに、同じテーブルをローカルバリアント選択アルゴリズム(付録19を参照)で使用できます。この表の最も意味のある値は1に近いことに注意してください。これは、品質係数は通常、それらを追加するのではなく、乗算することによって組み合わされるためです。

When assigning source-quality values, servers should not account for the size of the variant and its impact on transmission and rendering delays; the size of the variant should be stated in the length attribute and any size-dependent calculations should be done by the variant selection algorithm. Any constant rendering delay for a particular media type (for example due to the startup time of a helper application) should be accounted for by the user agent, when assigning a quality factor to that media type.

ソース品質の値を割り当てる場合、サーバーはバリアントのサイズと、送信およびレンダリングの遅延に対するその影響を考慮に入れるべきではありません。バリアントのサイズは長さ属性で指定する必要があり、サイズに依存する計算は、バリアント選択アルゴリズムで実行する必要があります。特定のメディアタイプの一定のレンダリング遅延(たとえば、ヘルパーアプリケーションの起動時間による)は、そのメディアタイプに品質係数を割り当てるときに、ユーザーエージェントによって説明される必要があります。

5.4 Type, charset, language, and length
5.4 タイプ、文字セット、言語、および長さ

The type attribute of a variant description carries the same information as its Content-Type response header counterpart defined in [1], except for any charset information, which MUST be carried in the charset attribute. For, example, the header

バリアントの説明のtype属性は、[1]で定義されたContent-Type応答ヘッダーの対応物と同じ情報を持ちますが、charset属性で運ばれる文字セット情報を除きます。たとえば、ヘッダー

      Content-Type: text/html; charset=ISO-8859-4
        

has the counterpart attributes

対応する属性があります

      {type text/html} {charset ISO-8859-4}
        

The language and length attributes carry the same information as their Content-* response header counterparts in [1]. The length attribute, if present, MUST thus reflect the length of the variant alone, and not the total size of the variant and any objects inlined or embedded by the variant.

言語属性と長さ属性は、[1]の対応するContent- *応答ヘッダーと同じ情報を持っています。したがって、長さ属性は、存在する場合、バリアントのみの長さを反映する必要があり、バリアントと、バリアントによってインライン化または埋め込まれたオブジェクトの合計サイズを反映する必要はありません。

Though all of these attributes are optional, it is often desirable to include as many attributes as possible, as this will increase the quality of the negotiation process.

これらの属性はすべてオプションですが、ネゴシエーションプロセスの品質を向上させるため、できるだけ多くの属性を含めることが望ましい場合があります。

Note: A server is not required to maintain a one-to-one correspondence between the attributes in the variant description and the Content-* headers in the variant response. For example, if the variant description contains a language attribute, the response does not necessarily have to contain a Content-Language header. If a Content-Language header is present, it does not have to contain an exact copy of the information in the language attribute.

注:サーバーは、バリアントの説明の属性とバリアントの応答のContent- *ヘッダーを1対1で対応させる必要はありません。たとえば、バリアントの説明に言語属性が含まれている場合、応答には必ずしもContent-Languageヘッダーが含まれている必要はありません。 Content-Languageヘッダーが存在する場合、language属性に情報の正確なコピーを含める必要はありません。

5.5 Features
5.5 特徴

The features attribute specifies how the presence or absence of particular feature tags in the user agent affects the overall quality of the variant. This attribute is covered in section 6.4.

features属性は、ユーザーエージェント内の特定の機能タグの有無がバリアントの全体的な品質にどのように影響するかを指定します。この属性については、セクション6.4で説明しています。

5.6 Description
5.6 説明

The description attribute gives a textual description of the variant. It can be included if the URI and normal attributes of a variant are considered too opaque to allow interpretation by the user. If a user agent is showing a menu of available variants compiled from a variant list, and if a variant has a description attribute, the user agent SHOULD show the description attribute of the variant instead of showing the normal attributes of the variant. The description field uses the UTF-8 character encoding scheme [5], which is a superset of

description属性は、バリアントのテキストによる説明を提供します。バリアントのURIおよび通常の属性が不透明すぎてユーザーが解釈できない場合は、これを含めることができます。ユーザーエージェントがバリアントリストからコンパイルされた使用可能なバリアントのメニューを表示している場合、バリアントに説明属性がある場合、ユーザーエージェントは、バリアントの通常の属性ではなく、バリアントの説明属性を表示する必要があります。説明フィールドは、UTF-8文字エンコードスキーム[5]を使用します。これは、

US-ASCII, with ""%" HEX HEX" encoding. The optional language tag MAY be used to specify the language used in the description text.

US-ASCII、 ""% "HEX HEX"エンコーディング。オプションの言語タグを使用して、説明テキストで使用される言語を指定できます。

5.7 Extension-attribute
5.7 拡張属性

The extension-attribute allows future specifications to incrementally define dimensions of negotiation which cannot be created by using the feature negotiation framework, and eases content negotiation experiments. In experimental situations, servers MUST ONLY generate extension-attributes whose names start with "x-". User agents SHOULD ignore all extension attributes they do not recognize. Proxies MUST NOT run a remote variant selection algorithm if an unknown extension attribute is present in the variant list.

拡張属性を使用すると、将来の仕様で、機能ネゴシエーションフレームワークを使用して作成できないネゴシエーションのディメンションを段階的に定義でき、コンテンツネゴシエーションの実験が容易になります。実験的な状況では、サーバーは、名前が「x-」で始まる拡張属性のみを生成する必要があります。ユーザーエージェントは、認識しないすべての拡張属性を無視する必要があります(SHOULD)。未知の拡張属性がバリアントリストに存在する場合、プロキシはリモートバリアント選択アルゴリズムを実行してはなりません(MUST NOT)。

6 Feature negotiation

6機能交渉

This section defines the feature negotiation mechanism. Feature negotiation has been introduced in section 4.8. Appendix 19 contains examples of feature negotiation.

このセクションでは、機能のネゴシエーションメカニズムを定義します。機能のネゴシエーションはセクション4.8で導入されました。付録19には、機能ネゴシエーションの例が含まれています。

6.1 Feature tags
6.1 機能タグ

A feature tag (ftag) identifies something which can be negotiated on, for example a property (feature) of a representation, a capability (feature) of a user agent, or the preference of a user for a particular type of representation. The use of feature tags need not be limited to transparent content negotiation, and not every feature tag needs to be usable in the HTTP transparent content negotiation framework.

機能タグ(ftag)は、表現のプロパティ(機能)、ユーザーエージェントの機能(機能)、特定のタイプの表現に対するユーザーの好みなど、ネゴシエートできるものを識別します。機能タグの使用は透過的なコンテンツネゴシエーションに限定される必要はなく、すべての機能タグがHTTP透過的なコンテンツネゴシエーションフレームワークで使用できる必要はありません。

ftag = token | quoted-string

ftag =トークン|引用文字列

Note: A protocol-independent system for feature tag registration is currently being developed in the IETF. This specification does not define any feature tags. In experimental situations, the use of tags which start with "x." is encouraged.

注:機能タグ登録用のプロトコルに依存しないシステムは、現在IETFで開発されています。この仕様では、機能タグは定義されていません。実験的な状況では、「x」で始まるタグの使用。奨励されています。

Feature tags are used in feature sets (section 6.2) and in feature predicates (section 6.3). Feature predicates are in turn used in features attributes (section 6.4), which are used in variant descriptions (section 5). Variant descriptions can be transmitted in Alternates headers (section 8.3).

機能タグは、機能セット(セクション6.2)および機能述語(セクション6.3)で使用されます。機能述語は、バリアントの説明(セクション5)で使用される機能属性(セクション6.4)で使用されます。バリアントの説明は、Alternatesヘッダーで送信できます(セクション8.3)。

The US-ASCII charset is used for feature tags. Feature tag comparison is case-insensitive. A token tag XYZ is equal to a quoted-string tag "XYZ". Examples are

機能タグにはUS-ASCII文字セットが使用されます。機能タグの比較では大文字と小文字が区別されません。トークンタグXYZは、引用符付き文字列タグ "XYZ"と同じです。例は

tables, fonts, blebber, wolx, screenwidth, colordepth

テーブル、フォント、blebber、wolx、screenwidth、colordepth

An example of the use of feature tags in a variant description is:

バリアントの説明での機能タグの使用例は次のとおりです。

      {"index.html" 1.0 {type text/html} {features tables frames}}
        

This specification follows general computing practice in that it places no restrictions on what may be called a feature. At the protocol level, this specification does not distinguish between different uses of feature tags: a tag will be processed in the same way, no matter whether it identifies a property, capability, or preference. For some tags, it may be fluid whether the tag represents a property, preference, or capability. For example, in content negotiation on web pages, a "textonly" tag would identify a capability of a text-only user agent, but the user of a graphical user agent may use this tag to specify that text-only content is preferred over graphical content.

この仕様は、機能と呼ばれるものに制限を課さないという点で、一般的なコンピューティング慣行に従っています。プロトコルレベルでは、この仕様は機能タグのさまざまな使用法を区別しません。プロパティ、機能、または設定を識別するかどうかに関係なく、タグは同じ方法で処理されます。一部のタグでは、タグがプロパティ、設定、または機能を表すかどうかは流動的です。たとえば、ウェブページのコンテンツネゴシエーションでは、「textonly」タグはテキストのみのユーザーエージェントの機能を識別しますが、グラフィカルユーザーエージェントのユーザーはこのタグを使用して、テキストのみのコンテンツがグラフィックよりも優先されることを指定できます。コンテンツ。

6.1.1 Feature tag values
6.1.1 機能タグの値

The definition of a feature tag may state that a feature tag can have zero, one, or more values associated with it. These values specialize the meaning of the tag. For example, a feature tag `paper' could be associated with the values `A4' and `A5'.

機能タグの定義では、機能タグにゼロ、1、またはそれ以上の値を関連付けることができると記載されている場合があります。これらの値は、タグの意味を特化しています。たとえば、機能タグ「paper」は、値「A4」および「A5」に関連付けることができます。

tag-value = token | quoted-string

タグ値=トークン|引用文字列

The US-ASCII charset is used for feature tag values. Equality comparison for tag values MUST be done with a case-sensitive, octet-by-octet comparison, where any ""%" HEX HEX" encodings MUST be processed as in [1]. A token value XYZ is equal to a quoted-string value "XYZ".

機能タグ値にはUS-ASCII文字セットが使用されます。タグ値の等価比較は、大文字と小文字を区別するオクテットごとの比較で行う必要があります。「 "%" HEX HEX」エンコーディングは、[1]のように処理する必要があります。トークン値XYZは、引用符付きの文字列値 "XYZ"と同じです。

6.2 Feature sets
6.2 機能セット

The feature set of a user agent is a data structure which records the capabilities of the user agent and the preferences of the user.

ユーザーエージェントの機能セットは、ユーザーエージェントの機能とユーザーの設定を記録するデータ構造です。

Feature sets are used by local variant selection algorithms (see appendix 19 for an example). A user agent can use the Accept-Features header (section 8.2) to make some of the contents of its feature set known to remote variant selection algorithms.

機能セットは、ローカルバリアント選択アルゴリズムで使用されます(例については、付録19を参照してください)。ユーザーエージェントは、Accept-Featuresヘッダー(セクション8.2)を使用して、リモートバリアント選択アルゴリズムに機能セットのコンテンツの一部を知らせます。

Structurally, a feature set is a possibly empty set, containing records of the form

構造的に、機能セットは次の形式のレコードを含む、おそらく空のセットです

( feature tag , set of feature tag values )

(機能タグ、機能タグ値のセット)

If a record with a feature tag is present in the set, this means that the user agent implements the corresponding capability, or that the user has expressed the corresponding preference.

機能タグを持つレコードがセットに存在する場合、これはユーザーエージェントが対応する機能を実装するか、ユーザーが対応する設定を表明したことを意味します。

Each record in a feature set has a, possibly empty, set of tag values. For feature tags which cannot have values associated with it, this set is always empty. For feature tags which can have zero, one, or more values associated with it, this set contains those values currently associated with the tag. If the set of a feature tag T has the value V in it, it is said that `the tag T is present with the value V'.

機能セットの各レコードには、場合によっては空のタグ値のセットがあります。値を関連付けることができない機能タグの場合、このセットは常に空です。 0、1、またはそれ以上の値を関連付けることができる機能タグの場合、このセットには、現在タグに関連付けられている値が含まれています。特徴タグTのセットに値Vが含まれている場合、「タグTは値Vで存在する」と言います。

This specification does not define a standard notation for feature sets. An example of a very small feature set, in a mathematical notation, is

この仕様は、機能セットの標準表記を定義していません。数学表記での非常に小さな機能セットの例は、

      { ( "frames" , { } ) ,
        ( "paper"  , { "A4" , "A5" } )
      }
        

As feature registration is expected to be an ongoing process, it is generally not possible for a user agent to know the meaning of all feature tags it can possibly encounter in a variant description. A user agent SHOULD treat all features tags unknown to it as absent from its feature set.

機能の登録は進行中のプロセスであることが予想されるため、ユーザーエージェントがバリアントの説明で遭遇する可能性のあるすべての機能タグの意味を知ることは通常不可能です。ユーザーエージェントは、それが知らないすべての機能タグを、その機能セットに存在しないものとして扱う必要があります。

A user agent may change the contents of its feature set depending on the type of request, and may also update it to reflect changing conditions, for example a change in the window size. Therefore, when considering feature negotiation, one usually talks about `the feature set of the current request'.

ユーザーエージェントは、要求のタイプに応じてその機能セットの内容を変更し、ウィンドウサイズの変更などの変化する条件を反映するように更新することもできます。したがって、機能のネゴシエーションを検討する場合、通常は「現在の要求の機能セット」について話します。

6.3 Feature predicates
6.3 特徴述語

Feature predicates are predicates on the contents of feature sets. They appear in the features attribute of a variant description.

機能述語は、機能セットの内容に関する述語です。これらは、バリアントの説明のfeatures属性に表示されます。

      fpred = [ "!" ] ftag
            | ftag ( "=" | "!=" ) tag-value
            | ftag "=" "[" numeric-range "]"
        
      numeric-range = [ number ] "-" [ number ]
        

Feature predicates are used in features attributes (section 6.4), which are used in variant descriptions (section 5). Variant descriptions can be transmitted in Alternates headers (section 8.3).

機能述語は、バリアントの説明(セクション5)で使用される機能属性(セクション6.4)で使用されます。バリアントの説明は、Alternatesヘッダーで送信できます(セクション8.3)。

Examples of feature predicates are

特徴述語の例は

      blebber, !blebber, paper=a4, colordepth=5, blex!=54,
      dpi=[300-599], colordepth=[24-]
        

Using the feature set of the current request, a user agent SHOULD compute the truth value of the different feature predicates as follows.

ユーザーエージェントは、現在のリクエストの機能セットを使用して、次のようにさまざまな機能述語の真理値を計算する必要があります(SHOULD)。

ftag true if the feature is present, false otherwise

ftag機能が存在する場合はtrue、それ以外の場合はfalse

!ftag true if the feature is absent, false otherwise

!ftag機能がない場合はtrue、それ以外の場合はfalse

ftag=V true if the feature is present with the value V, false otherwise,

ftag = Vフィーチャーが値Vで存在する場合はtrue、それ以外の場合はfalse

ftag!=V true if the feature is not present with the value V, false otherwise,

ftag!= Vフィーチャーが値Vで存在しない場合はtrue、それ以外の場合はfalse

ftag=[N-M] true if the feature is present with at least one numeric value, while the highest value with which it is present in the range N-M, false otherwise. If N is missing, the lower bound is 0. If M is missing, the upper bound is infinity.

ftag = [N-M]フィーチャに少なくとも1つの数値が存在する場合はtrue、N-Mの範囲内に存在する最大値。それ以外の場合はfalse。 Nがない場合、下限は0です。Mがない場合、上限は無限大です。

As an example, with the feature set

例として、機能セット

       { ( "blex"       , { } ),
         ( "colordepth" , { "5" } ),
         ( "UA-media"   , { "stationary" } ),
         ( "paper"      , { "A4", "A3" } ) ,
         ( "x-version"  , { "104", "200" } )
       }
        

the following predicates are true:

次の述語が当てはまります。

   blex, colordepth=[4-], colordepth!=6, colordepth, !screenwidth, UA-
   media=stationary, UA-media!=screen, paper=A4, paper =!A0,
   colordepth=[ 4 - 6 ], x-version=[100-300], x-version=[200-300]
        

and the following predicates are false:

次の述語は偽です。

      !blex, blebber, colordepth=6, colordepth=foo, !colordepth,
      screenwidth, screenwidth=640, screenwidth!=640, x-version=99, UA-
      media=screen, paper=A0, paper=a4, x-version=[100-199], wuxta
        
6.4 Features attribute
6.4 機能属性

The features attribute, for which section 5.1 defines the syntax

セクション5.1が構文を定義するfeatures属性

"{" "features" feature-list "}"

"{" "features"機能リスト "}"

is used in a variant description to specify how the presence or absence of particular feature tags in the user agent affects the overall quality of the variant.

バリアントの説明で使用され、ユーザーエージェント内の特定の機能タグの有無がバリアントの全体的な品質にどのように影響するかを指定します。

feature-list = 1%feature-list-element

feature-list = 1%feature-list-element

       feature-list-element = ( fpred | fpred-bag )
                              [ ";" [ "+" true-improvement  ]
                                    [ "-" false-degradation ]
                              ]
        

fpred-bag = "[" 1%fpred "]"

fpred-bag = "[" 1%fpred "]"

true-improvement = short-float false-degradation = short-float

true-improvement = short-float false-degradation = short-float

Features attributes are used in variant descriptions (section 5). Variant descriptions can be transmitted in Alternates headers (section 8.3).

機能属性は、バリアントの説明で使用されます(セクション5)。バリアントの説明は、Alternatesヘッダーで送信できます(セクション8.3)。

Examples are:

次に例を示します。

       {features !textonly [blebber !wolx] colordepth=3;+0.7}
        
       {features !blink;-0.5 background;+1.5 [blebber !wolx];+1.4-0.8}
        

The default value for the true-improvement is 1. The default value for the false-degradation is 0, or 1 if a true-improvement value is given.

true-improvementのデフォルト値は1です。false-degradationのデフォルト値は0、またはtrue-improvement値が指定されている場合は1です。

A user agent SHOULD, and a remote variant selection algorithm MUST compute the quality degradation factor associated with the features attribute by multiplying all quality degradation factors of the elements of the feature-list. Note that the result can be a factor greater than 1.

ユーザーエージェントは、リモートバリアント選択アルゴリズムは、機能リストの要素のすべての品質劣化係数を乗算することにより、機能属性に関連する品質劣化係数を計算する必要があります(SHOULD)。結果は1より大きい係数になる可能性があることに注意してください。

A feature list element yields its true-improvement factor if the corresponding feature predicate is true, or if at least one element of the corresponding fpred-bag is true. The element yields its false-degradation factor otherwise.

機能リスト要素は、対応する機能述語が真である場合、または対応するfpred-bagの少なくとも1つの要素が真である場合、真の改善係数を生成します。それ以外の場合、要素はその偽分解係数を生成します。

7 Remote variant selection algorithms

7リモートバリアント選択アルゴリズム

A remote variant selection algorithm is a standardized algorithm by which a server can choose a best variant on behalf of a negotiating user agent. The use of a remote algorithm can speed up the negotiation process by eliminating a request-response round trip.

リモートバリアント選択アルゴリズムは、サーバーが交渉中のユーザーエージェントに代わって最適なバリアントを選択できる標準化されたアルゴリズムです。リモートアルゴリズムを使用すると、要求と応答のラウンドトリップがなくなるため、ネゴシエーションプロセスを高速化できます。

A remote algorithm typically computes whether the Accept- headers in the request contain sufficient information to allow a choice, and if so, which variant is the best variant. This specification does not define any remote algorithms, but does define a mechanism to negotiate on the use of such algorithms.

リモートアルゴリズムは通常、リクエストのAccept-ヘッダーに選択を可能にするのに十分な情報が含まれているかどうかを計算します。この仕様は、リモートアルゴリズムを定義していませんが、そのようなアルゴリズムの使用について交渉するメカニズムを定義しています。

7.1 Version numbers
7.1 バージョン番号

A version numbering scheme is used to distinguish between different remote variant selection algorithms.

バージョン番号付けスキームは、異なるリモートバリアント選択アルゴリズムを区別するために使用されます。

rvsa-version = major "." minor

rvsa-version = major "。"マイナー

      major = 1*4DIGIT
      minor = 1*4DIGIT
        

An algorithm with the version number X.Y, with Y>0, MUST be downwards compatible with all algorithms from X.0 up to X.Y. Downwards compatibility means that, if supplied with the same information, the newer algorithm MUST make the same choice, or a better choice, as the old algorithm. There are no compatibility requirements between algorithms with different major version numbers.

バージョン番号X.Y、Y> 0のアルゴリズムは、X.0からX.Yまでのすべてのアルゴリズムと下位互換性がある必要があります。下位互換性とは、同じ情報が提供された場合、新しいアルゴリズムは古いアルゴリズムと同じ選択またはより良い選択を行わなければならないことを意味します。メジャーバージョン番号が異なるアルゴリズム間の互換性要件はありません。

8 Content negotiation status codes and headers

8コンテンツネゴシエーションのステータスコードとヘッダー

This specification adds one new HTTP status code, and introduces six new HTTP headers. It also extends the semantics of an existing HTTP/1.1 header.

この仕様では、1つの新しいHTTPステータスコードが追加され、6つの新しいHTTPヘッダーが導入されています。また、既存のHTTP / 1.1ヘッダーのセマンティクスを拡張します。

8.1 506 Variant Also Negotiates
8.1 506バリアントも交渉

The 506 status code indicates that the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.

506ステータスコードは、サーバーに内部構成エラーがあることを示しています。選択されたバリアントリソースは透過的なコンテンツネゴシエーション自体に従事するように構成されているため、ネゴシエーションプロセスの適切なエンドポイントではありません。

8.2 Accept-Features
8.2 Accept-Features

The Accept-Features request header can be used by a user agent to give information about the presence or absence of certain features in the feature set of the current request. Servers can use this information when running a remote variant selection algorithm.

ユーザーエージェントはAccept-Featuresリクエストヘッダーを使用して、現在のリクエストの機能セット内の特定の機能の有無に関する情報を提供できます。サーバーは、リモートバリアント選択アルゴリズムを実行するときにこの情報を使用できます。

Note: the name `Accept-Features' for this header was chosen because of symmetry considerations with other Accept- headers, even though the Accept-Features header will generally not contain an exhaustive list of features which are somehow `accepted'. A more accurate name of this header would have been `Feature-Set-Info'.

注:このヘッダーの「Accept-Features」という名前は、他のAccept-ヘッダーとの対称性を考慮して選択されました。ただし、Accept-Featuresヘッダーには通常、「受け入れられた」機能の完全なリストは含まれていません。このヘッダーのより正確な名前は「Feature-Set-Info」になります。

       Accept-Features = "Accept-Features" ":"
                   #( feature-expr *( ";" feature-extension ) )
        
       feature-expr = [ "!" ] ftag
                    | ftag ( "=" | "!=" ) tag-value
                    | ftag "=" "{" tag-value "}"
                    | "*"
        

feature-extension = token [ "=" ( token | quoted-string ) ]

feature-extension = token ["="(token | quoted-string)]

No feature extensions are defined in this specification. An example is:

この仕様では、機能拡張は定義されていません。例は次のとおりです。

       Accept-Features: blex, !blebber, colordepth={5}, !screenwidth,
                  paper = A4, paper!="A2", x-version=104, *
        

The different feature expressions have the following meaning:

異なる特徴式には次の意味があります。

ftag ftag is present

ftag ftagが存在する

!ftag ftag is absent

!ftag ftagがありません

ftag=V ftag is present with the value V

ftag = V ftagは値Vで存在します

ftag!=V ftag is present, but not with the value V

ftag!= V ftagは存在しますが、値Vはありません

ftag={V} ftag is present with the value V, and not with any other values

ftag = {V} ftagは値Vで存在し、他の値では存在しません

* the expressions in this header do not fully describe the feature set: feature tags not mentioned in this header may also be present, and, except for the case ftag={V}, tags may be present with more values than mentioned.

* このヘッダーの式は機能セットを完全に説明していません。このヘッダーに記載されていない機能タグも存在する可能性があります。また、ftag = {V}の場合を除いて、記載されているよりも多くの値を持つタグが存在する可能性があります。

Absence of the Accept-Features header in a request is equivalent to the inclusion of

リクエストにAccept-Featuresヘッダーがないことは、

Accept-Features: *

Accept-Features:*

By using the Accept-Features header, a remote variant selection algorithm can sometimes determine the truth value of a feature predicate on behalf of the user agent. For example, with the header

Accept-Featuresヘッダーを使用することにより、リモートバリアント選択アルゴリズムは、ユーザーエージェントに代わって機能述語の真理値を決定できる場合があります。たとえば、ヘッダー

       Accept-Features: blex, !blebber, colordepth={5}, !screenwidth,
                  paper = A4, paper!="A2", x-version=104, *
        

the algorithm can determine that the following predicates are true:

アルゴリズムは、次の述語が真であると判断できます。

       blex, colordepth=[4-], colordepth!=6, colordepth, !screenwidth,
       paper=A4, colordepth=[4-6]
        

and that the following predicates are false:

そして、次の述語が偽であること:

!blex, blebber, colordepth=6, colordepth=foo, !colordepth, screenwidth, screenwidth=640, screenwidth!=640,

!blex、blebber、colordepth = 6、colordepth = foo、!colordepth、screenwidth、screenwidth = 640、screenwidth!= 640、

but the truth value of the following predicates cannot be determined:

ただし、以下の述部の真理値は判別できません。

       UA-media=stationary, UA-media!=screen, paper!=a0,
       x-version=[100-300], x-version=[200-300], x-version=99,
       UA-media=screen, paper=A0, paper=a4, x-version=[100-199], wuxta
        
8.3 Alternates
8.3 代替

The Alternates response header is used to convey the list of variants bound to a negotiable resource. This list can also include directives for any content negotiation process. If a response from a transparently negotiable resource includes an Alternates header, this header MUST contain the complete variant list bound to the negotiable resource. Responses from resources which do not support transparent content negotiation MAY also use Alternates headers.

代替応答ヘッダーは、交渉可能なリソースにバインドされたバリアントのリストを伝えるために使用されます。このリストには、コンテンツネゴシエーションプロセスのディレクティブを含めることもできます。透過的に交渉可能なリソースからの応答にAlternatesヘッダーが含まれている場合、このヘッダーには、交渉可能なリソースにバインドされた完全なバリアントリストが含まれている必要があります。透過的なコンテンツネゴシエーションをサポートしないリソースからの応答も、代替ヘッダーを使用する場合があります。

Alternates = "Alternates" ":" variant-list

Alternates = "Alternates" ":"バリアントリスト

variant-list = 1#( variant-description | fallback-variant | list-directive )

variant-list = 1#(variant-description | fallback-variant | list-directive)

       fallback-variant = "{" <"> URI <"> "}"
        
       list-directive = ( "proxy-rvsa" "=" <"> 0#rvsa-version <"> )
        

| extension-list-directive

| extension-list-directive

extension-list-directive = token [ "=" ( token | quoted-string ) ]

extension-list-directive = token ["="(token | quoted-string)]

An example is

例は

     Alternates: {"paper.1" 0.9 {type text/html} {language en}},
                 {"paper.2" 0.7 {type text/html} {language fr}},
                 {"paper.3" 1.0 {type application/postscript}
                     {language en}},
                 proxy-rvsa="1.0, 2.5"
        

Any relative URI specified in a variant-description or fallback-variant field is relative to the request-URI. Only one fallback-variant field may be present. If the variant selection algorithm of the user agent finds that all described variants are unacceptable, then it SHOULD choose the fallback variant, if present, as the best variant. If the user agent computes the overall quality values of the described variants, and finds that several variants share the highest value, then the first variant with this value in the list SHOULD be chosen as the best variant.

variant-descriptionまたはfallback-variantフィールドで指定された相対URIは、request-URIを基準にしています。フォールバックバリアントフィールドは1つしか存在できません。ユーザーエージェントのバリアント選択アルゴリズムが、記述されたすべてのバリアントが受け入れられないことを発見した場合、フォールバックバリアント(存在する場合)を最適なバリアントとして選択する必要があります(SHOULD)。ユーザーエージェントが記述されたバリアントの全体的な品質値を計算し、いくつかのバリアントが最高値を共有していることがわかった場合、リスト内のこの値を持つ最初のバリアントを最良のバリアントとして選択する必要があります(SHOULD)。

The proxy-rvsa directive restricts the use of remote variant selection algorithms by proxies. If present, a proxy MUST ONLY use algorithms which have one of the version numbers listed, or have the same major version number and a higher minor version number as one of the versions listed. Any restrictions set by proxy-rvsa come on top of the restrictions set by the user agent in the Negotiate request header. The directive proxy-rvsa="" will disable variant selection by proxies entirely. Clients SHOULD ignore all extension-list-directives they do not understand.

proxy-rvsaディレクティブは、プロキシによるリモートバリアント選択アルゴリズムの使用を制限します。存在する場合、プロキシは、リストされているバージョン番号の1つを持つアルゴリズム、またはリストされているバージョンの1つと同じメジャーバージョン番号とそれより高いマイナーバージョン番号を持つアルゴリズムのみを使用する必要があります。 proxy-rvsaによって設定された制限は、ユーザーエージェントによってNegotiateリクエストヘッダーで設定された制限の上に置かれます。ディレクティブproxy-rvsa = ""は、プロキシによるバリアントの選択を完全に無効にします。クライアントは、理解できない拡張リストディレクティブをすべて無視する必要があります。

A variant list may contain multiple differing descriptions of the same variant. This can be convenient if the variant uses conditional rendering constructs, or if the variant resource returns multiple representations using a multipart media type.

バリアントリストには、同じバリアントの複数の異なる説明が含まれる場合があります。これは、バリアントが条件付きレンダリング構成を使用する場合、またはバリアントリソースがマルチパートメディアタイプを使用して複数の表現を返す場合に便利です。

8.4 Negotiate
8.4 交渉する

The Negotiate request header can contain directives for any content negotiation process initiated by the request.

Negotiate要求ヘッダーには、要求によって開始されたコンテンツネゴシエーションプロセスのディレクティブを含めることができます。

      Negotiate = "Negotiate" ":" 1#negotiate-directive
        

negotiate-directive = "trans" | "vlist" | "guess-small"

negotiate-directive = "trans" | "vlist" | 「当て推量」

                          | rvsa-version
                          | "*"
                          | negotiate-extension
        

negotiate-extension = token [ "=" token ]

negotiate-extension = token ["="トークン]

Examples are

例は

Negotiate: 1.0, 2.5 Negotiate: *

交渉:1.0、2.5交渉:*

The negotiate directives have the following meaning

交渉指令には次の意味があります

"trans" The user agent supports transparent content negotiation for the current request.

"trans"ユーザーエージェントは、現在のリクエストに対する透過的なコンテンツネゴシエーションをサポートしています。

"vlist" The user agent requests that any transparently negotiated response for the current request includes an Alternates header with the variant list bound to the negotiable resource. Implies "trans".

"vlist"ユーザーエージェントは、現在の要求に対して透過的にネゴシエートされた応答に、交渉可能なリソースにバインドされたバリアントリストを含むAlternatesヘッダーを含めることを要求します。 「trans」を意味します。

"guess-small" The user agent allows origin servers to run a custom algorithm which guesses the best variant for the request, and to return this variant in a choice response, if the resulting choice response is smaller than or not much larger than a list response. The definition of `not much larger' is left to origin server heuristics. Implies "vlist" and "trans".

"guess-small"ユーザーエージェントを使用すると、オリジンサーバーはリクエストに最適なバリアントを推測するカスタムアルゴリズムを実行し、結果の選択肢の応答がリストよりも小さいか、それほど大きくない場合は、選択肢の応答でこのバリアントを返すことができます。応答。 「それほど大きくない」の定義は、オリジンサーバーのヒューリスティックに任されています。 「vlist」と「trans」を意味します。

rvsa-version The user agent allows origin servers and proxies to run the remote variant selection algorithm with the indicated version number, or with the same major version number and a higher minor version number. If the algorithm has sufficient information to choose a best, neighboring variant, the origin server or proxy MAY return a choice response with this variant. Implies "trans".

rvsa-versionユーザーエージェントを使用すると、オリジンサーバーとプロキシは、指定されたバージョン番号、または同じメジャーバージョン番号とより大きなマイナーバージョン番号を使用して、リモートバリアント選択アルゴリズムを実行できます。アルゴリズムに最適な隣接バリアントを選択するための十分な情報がある場合、オリジンサーバーまたはプロキシは、このバリアントとともに選択応答を返す場合があります。 「trans」を意味します。

"*" The user agent allows origin servers and proxies to run any remote variant selection algorithm. The origin server may even run algorithms which have not been standardized. If the algorithm has sufficient information to choose a best, neighboring variant, the origin server or proxy MAY return a choice response with this variant. Implies "trans".

"*"ユーザーエージェントを使用すると、オリジンサーバーとプロキシでリモートバリアント選択アルゴリズムを実行できます。オリジンサーバーは、標準化されていないアルゴリズムを実行することさえできます。アルゴリズムに最適な隣接バリアントを選択するための十分な情報がある場合、オリジンサーバーまたはプロキシは、このバリアントとともに選択応答を返す場合があります。 「trans」を意味します。

Servers SHOULD ignore all negotiate-directives they do not understand. If the Negotiate header allows a choice between multiple remote variant selection algorithms which are all supported by the server, the server SHOULD use some internal precedence heuristics to select the best algorithm.

サーバーは、理解できないすべてのnegotiateディレクティブを無視する必要があります(SHOULD)。 Negotiateヘッダーが、サーバーですべてサポートされている複数のリモートバリアント選択アルゴリズムからの選択を許可する場合、サーバーは、いくつかの内部優先順位ヒューリスティックを使用して最適なアルゴリズムを選択する必要があります(SHOULD)。

8.5 TCN
8.5 紀元前

The TCN response header is used by a server to signal that the resource is transparently negotiated.

サーバーは、TCN応答ヘッダーを使用して、リソースが透過的にネゴシエートされたことを通知します。

TCN = "TCN" ":" #( response-type | server-side-override-directive | tcn-extension )

TCN = "TCN" ":"#(response-type | server-side-override-directive | tcn-extension)

       response-type = "list" | "choice" | "adhoc"
        
       server-side-override-directive = "re-choose" | "keep"
        

tcn-extension = token [ "=" ( token | quoted-string ) ]

tcn-extension = token ["="(token | quoted-string)]

If the resource is not transparently negotiated, a TCN header MUST NOT be included in any response. If the resource is transparently negotiated, a TCN header, which includes the response-type value of the response, MUST be included in every response with a 2xx status code or any 3xx status code, except 304, in which it MAY be included. A TCN header MAY also be included, without a response-type value, in other responses from transparently negotiated resources.

リソースが透過的にネゴシエートされない場合、TCNヘッダーを応答に含めてはなりません(MUST NOT)。リソースが透過的にネゴシエートされる場合、応答のresponse-type値を含むTCNヘッダーは、2xxステータスコードまたは3xxステータスコードとともにすべての応答に含まれなければなりません(MUSTは304を除く)。 TCNヘッダーは、透過的にネゴシエートされたリソースからの他の応答に、応答タイプ値なしで含めることもできます(MAY)。

A server-side override directive MUST be included if the origin server performed a server-side override when choosing the response. If the directive is "re-choose", the server MUST include an Alternates header with the variant bound to the negotiable resource in the response, and user agent SHOULD use its internal variant selection algorithm to choose, retrieve, and display the best variant from this list. If the directive is "keep" the user agent SHOULD NOT renegotiate on the response, but display it directly, or act on it directly if it is a redirection response.

起点サーバーが応答を選択するときにサーバー側のオーバーライドを実行した場合は、サーバー側のオーバーライドディレクティブを含める必要があります。ディレクティブが「再選択」である場合、サーバーは応答内の交渉可能なリソースにバインドされたバリアントを含むAlternatesヘッダーを含める必要があり、ユーザーエージェントは内部バリアント選択アルゴリズムを使用して最適なバリアントを選択、取得、および表示する必要があります(SHOULD)。このリスト。ディレクティブが「keep」の場合、ユーザーエージェントは応答について再ネゴシエーションを行わないでください。ただし、直接表示するか、リダイレクト応答の場合は直接操作してください。

Clients SHOULD ignore all tcn-extensions they do not understand.

クライアントは、理解できないすべてのtcn-extensionsを無視する必要があります(SHOULD)。

8.6 Variant-Vary
8.6 Variant-Vary

The Variant-Vary response header can be used in a choice response to record any vary information which applies to the variant data (the entity body combined with some of the entity headers) contained in the response, rather than to the response as a whole.

Variant-Vary応答ヘッダーを選択応答で使用して、応答全体ではなく、応答に含まれるバリアントデータ(エンティティヘッダーの一部と組み合わせたエンティティ本体)に適用されるさまざまな情報を記録できます。

         Variant-Vary  = "Variant-Vary" ":" ( "*" | 1#field-name )
        

Use of the Variant-Vary header is discussed in section 10.2.

Variant-Varyヘッダーの使用については、セクション10.2で説明します。

9 Cache validators

9キャッシュバリデーター

To allow for correct and efficient caching and revalidation of negotiated responses, this specification extends the caching model of HTTP/1.1 [1] in various ways.

ネゴシエートされた応答の正確で効率的なキャッシングと再検証を可能にするために、この仕様はHTTP / 1.1 [1]のキャッシングモデルをさまざまな方法で拡張します。

This specification does not introduce a `variant-list-max-age' directive which explicitly bounds the freshness lifetime of a cached variant list, like the `max-age' Cache-Control directive bounds the freshness lifetime of a cached response. However, this specification does ensure that a variant list which is sent at a time T by the origin server will never be re-used without revalidation by semantically transparent caches after the time T+M. This M is the maximum of all freshness lifetimes assigned (using max-age directives or Expires headers) by the origin server to

この仕様では、 `max-age 'Cache-Controlディレクティブがキャッシュされた応答のフレッシュネスライフタイムを制限するように、キャッシュされたバリアントリストのフレッシュネスライフタイムを明示的に制限する` variant-list-max-age'ディレクティブを導入していません。ただし、この仕様では、オリジンサーバーによって時刻Tに送信されたバリアントリストが、時刻T + M以降の意味的に透過的なキャッシュによる再検証なしに再利用されることはありません。このMは、オリジンサーバーによって(max-ageディレクティブまたはExpiresヘッダーを使用して)割り当てられたすべての鮮度有効期間の最大値です。

a. the responses from the negotiable resource itself, and

a. 交渉可能なリソース自体からの応答、および

b. the responses from its neighboring variant resources

b. 隣接するバリアントリソースからの応答

If no freshness lifetimes are assigned by the origin server, M is the maximum of the freshness lifetimes which were heuristically assigned by all caches which can re-use the variant list.

オリジンサーバーによってフレッシュネスライフタイムが割り当てられていない場合、Mは、バリアントリストを再利用できるすべてのキャッシュによってヒューリスティックに割り当てられたフレッシュネスライフタイムの最大値です。

9.1 Variant list validators
9.1 バリアントリストバリデーター

A variant list validator is an opaque value which acts as the cache validator of a variant list bound to a negotiable resource.

バリアントリストバリデーターは、交渉可能なリソースにバインドされたバリアントリストのキャッシュバリデーターとして機能する不透明な値です。

      variant-list-validator = <quoted-string not containing any ";">
        

If two responses contain the same variant list validator, a cache can treat the Alternates headers in these responses as equivalent (though the headers themselves need not be identical).

2つの応答に同じバリアントリストバリデーターが含まれている場合、キャッシュはこれらの応答のAlternatesヘッダーを同等のものとして扱うことができます(ただし、ヘッダー自体は同一である必要はありません)。

9.2 Structured entity tags
9.2 構造化エンティティタグ

A structured entity tag consists of a normal entity tag of which the opaque string is extended with a semicolon followed by the text (without the surrounding quotes) of a variant list validator:

構造化エンティティタグは、通常のエンティティタグで構成され、不透明な文字列がセミコロンで拡張され、その後にバリアントリストバリデーターのテキスト(前後の引用符なし)が続きます。

        normal      |  variant list  |   structured
        entity tag  |  validator     |   entity tag
       -------------+----------------+-----------------
         "etag"     |     "vlv"      |   "etag;vlv"
        W/"etag"    |     "vlv"      |  W/"etag;vlv"
        

Note that a structured entity tag is itself also an entity tag. The structured nature of the tag allows caching proxies capable of transparent content negotiation to perform some optimizations defined in section 10. When not performing such optimizations, a structured tag SHOULD be treated as a single opaque value, according to the general rules in HTTP/1.1. Examples of structured entity tags are:

構造化エンティティタグ自体もエンティティタグです。タグの構造化された性質により、透過的なコンテンツネゴシエーションが可能なキャッシングプロキシは、セクション10で定義されたいくつかの最適化を実行できます。このような最適化を実行しない場合、構造化タグは、HTTP / 1.1の一般的なルールに従って、単一の不透明な値として扱われる必要があります(SHOULD)。 。構造化エンティティタグの例は次のとおりです。

      "xyzzy;1234"  W/"xyzzy;1234"  "gonkxxxx;1234"  "a;b;c;;1234"
        

In the last example, the normal entity tag is "a;b;c;" and the variant list validator is "1234".

最後の例では、通常のエンティティタグは「a; b; c;」です。バリアントリストバリデータは「1234」です。

If a transparently negotiated response includes an entity tag, it MUST be a structured entity tag. The variant list validator in the structured tag MUST act as a validator for the variant list contained in the Alternates header. The normal entity tag in the structured tag MUST act as a validator of the entity body in the response and of all entity headers except Alternates.

透過的にネゴシエートされた応答にエンティティタグが含まれる場合、それは構造化エンティティタグである必要があります。構造化タグのバリアントリストバリデーターは、Alternatesヘッダーに含まれるバリアントリストのバリデーターとして機能する必要があります。構造化タグ内の通常のエンティティタグは、応答内のエンティティ本体および代替を除くすべてのエンティティヘッダーのバリデーターとして機能する必要があります。

9.3 Assigning entity tags to variants
9.3 エンティティタグをバリアントに割り当てる

To allow for correct revalidation of transparently negotiated responses by clients, origin servers SHOULD generate all normal entity tags for the neighboring variant resources of the negotiable resource in such a way that

クライアントによる透過的にネゴシエートされた応答の正しい再検証を可能にするために、オリジンサーバーは、交渉可能なリソースの隣接するバリアントリソースのすべての通常のエンティティタグを次のような方法で生成する必要があります(SHOULD)。

1. the same tag is never used by two different variants, unless this tag labels exactly the same entity on all occasions,

1. 同じタグが2つの異なるバリアントで使用されることはありません。ただし、このタグがすべての状況でまったく同じエンティティにラベルを付ける場合を除きます。

2. if one normal tag "X" is a prefix of another normal tag "XY", then "Y" must never be a semicolon followed by a variant list validator.

2. ある通常のタグ「X」が別の通常のタグ「XY」の接頭辞である場合、「Y」はセミコロンの後にバリアントリストバリデータが続くことはできません。

10 Content negotiation responses

10コンテンツ交渉応答

If a request on a transparently negotiated resource yields a response with a 2xx status code or any 3xx status code except 304, this response MUST always be either a list response, a choice response, or an adhoc response. These responses MUST always include a TCN header which specifies their type. Transparently negotiated responses with other status codes MAY also include a TCN header.

透過的にネゴシエートされたリソースに対する要求が、2xxステータスコードまたは304以外の3xxステータスコードを含む応答を生成する場合、この応答は常にリスト応答、選択応答、またはアドホック応答のいずれかである必要があります。これらの応答には常に、そのタイプを指定するTCNヘッダーが含まれている必要があります。他のステータスコードで透過的にネゴシエートされた応答には、TCNヘッダーも含まれる場合があります。

The conditions under which the different content negotiation responses may be sent are defined in section 12.1 for origin servers and in section 13 for proxies.

さまざまなコンテンツネゴシエーション応答が送信される条件は、オリジンサーバーの場合はセクション12.1で、プロキシの場合はセクション13で定義されています。

After having constructed a list, choice, or adhoc response, a server MAY process any If-No-Match or If-Range headers in the request message and shorten the response to a 304 (Not Modified) or 206 (Partial Content) response, following the rules in the HTTP/1.1 specification [1]. In this case, the entity tag of the shortened response will identify it indirectly as a list, choice, or adhoc response.

リスト、選択、またはアドホック応答を構築した後、サーバーは、要求メッセージ内のすべてのIf-No-MatchまたはIf-Rangeヘッダーを処理して、応答を304(Not Modified)または206(Partial Content)応答に短縮できます。 HTTP / 1.1仕様[1]のルールに従います。この場合、短縮された応答のエンティティタグは、それをリスト、選択、またはアドホック応答として間接的に識別します。

10.1 List response
10.1 リスト応答

A list response returns the variant list of the negotiable resource, but no variant data. It can be generated when the server does not want to, or is not allowed to, return a particular best variant for the request. If the user agent supports transparent content negotiation, the list response will cause it to select a best variant and retrieve it.

リスト応答は、交渉可能なリソースのバリアントリストを返しますが、バリアントデータは返しません。これは、サーバーが要求に対して特定の最良のバリアントを返すことを望まないか、または許可されない場合に生成されます。ユーザーエージェントが透過的なコンテンツネゴシエーションをサポートしている場合、リストレスポンスにより、最適なバリアントが選択されて取得されます。

A list response MUST contain (besides the normal headers required by HTTP) a TCN header which specifies the "list" response-type, the Alternates header bound to the negotiable resource, a Vary header and (unless it was a HEAD request) an entity body which allows the user to manually select the best variant.

リスト応答には、(HTTPで必要な通常のヘッダーのほかに)「リスト」応答タイプを指定するTCNヘッダー、交渉可能なリソースにバインドされた代替ヘッダー、Varyヘッダー、および(HEAD要求でない場合)エンティティを含める必要がありますユーザーが手動で最適なバリアントを選択できるようにするボディ。

An example of a list response is

リスト応答の例は

     HTTP/1.1 300 Multiple Choices
     Date: Tue, 11 Jun 1996 20:02:21 GMT
     TCN: list
     Alternates: {"paper.1" 0.9 {type text/html} {language en}},
                 {"paper.2" 0.7 {type text/html} {language fr}},
                 {"paper.3" 1.0 {type application/postscript}
                     {language en}}
     Vary: negotiate, accept, accept-language
     ETag: "blah;1234"
     Cache-control: max-age=86400
     Content-Type: text/html
     Content-Length: 227
        
     <h2>Multiple Choices:</h2>
     <ul>
     <li><a href=paper.1>HTML, English version</a>
     <li><a href=paper.2>HTML, French version</a>
     <li><a href=paper.3>Postscript, English version</a>
     </ul>
        

Note: A list response can have any status code, but the 300 (Multiple Choices) code is the most appropriate one for HTTP/1.1 clients. Some existing versions of HTTP/1.0 clients are known to silently ignore 300 responses, instead of handling them according to the HTTP/1.0 specification [2]. Servers should therefore be careful in sending 300 responses to non-negotiating HTTP/1.0 user agents, and in making these responses cacheable. The 200 (OK) status code can be used instead.

注:リスト応答には任意のステータスコードを含めることができますが、300(Multiple Choices)コードはHTTP / 1.1クライアントに最適です。 HTTP / 1.0クライアントの一部の既存のバージョンは、HTTP / 1.0仕様[2]に従って処理する代わりに、300応答を黙って無視することが知られています。したがって、サーバーは、ネゴシエーションを行わないHTTP / 1.0ユーザーエージェントに300の応答を送信し、これらの応答をキャッシュ可能にすることに注意する必要があります。代わりに、200(OK)ステータスコードを使用できます。

The Vary header in the response SHOULD ensure correct handling by plain HTTP/1.1 caching proxies. This header can either be

応答のVaryヘッダーは、プレーンなHTTP / 1.1キャッシングプロキシによる正しい処理を保証する必要があります(SHOULD)。このヘッダーは、

Vary: *

変化:*

or a more elaborate header; see section 10.6.1.

またはより複雑なヘッダー。セクション10.6.1を参照してください。

Only the origin server may construct list responses. Depending on the status code, a list response is cacheable unless indicated otherwise.

オリジンサーバーのみがリスト応答を作成できます。ステータスコードに応じて、特に指定のない限り、リスト応答はキャッシュ可能です。

According to the HTTP/1.1 specification [1], a user agent which does not support transparent content negotiation will, when receiving a list response with the 300 status code, display the entity body included in the response. If the response contains a Location header, however, the user agent MAY automatically redirect to this location.

HTTP / 1.1仕様[1]によると、透過的なコンテンツネゴシエーションをサポートしないユーザーエージェントは、ステータスコード300のリスト応答を受信すると、応答に含まれるエンティティボディを表示します。ただし、応答にLocationヘッダーが含まれている場合、ユーザーエージェントはこの場所に自動的にリダイレクトできます(MAY)。

The handling of list responses by clients supporting transparent content negotiation is described in sections 11.1 and 13.

透過的なコンテンツネゴシエーションをサポートするクライアントによるリスト応答の処理については、セクション11.1および13で説明します。

10.2 Choice response
10.2 選択応答

A choice response returns a representation of the best variant for the request, and may also return the variant list of the negotiable resource. It can be generated when the server has sufficient information to be able to choose the best variant on behalf the user agent, but may only be generated if this best variant is a neighboring variant. For request from user agents which do not support transparent content negotiation, a server may always generate a choice response, provided that the variant returned is a neighboring variant. The variant returned in a choice response need not necessarily be listed in the variant list bound to the negotiable resource.

選択応答は、リクエストに最適なバリアントの表現を返します。また、交渉可能なリソースのバリアントリストを返す場合もあります。これは、サーバーがユーザーエージェントに代わって最適なバリアントを選択できる十分な情報を持っている場合に生成できますが、この最良のバリアントが隣接するバリアントである場合にのみ生成できます。透過的なコンテンツネゴシエーションをサポートしないユーザーエージェントからのリクエストの場合、返されたバリアントが隣接するバリアントである場合、サーバーは常に選択応答を生成できます。選択応答で返されたバリアントは、交渉可能なリソースにバインドされたバリアントリストに必ずしもリストされている必要はありません。

A choice response merges a normal HTTP response from the chosen variant, a TCN header which specifies the "choice" response-type, and a Content-Location header giving the location of the variant. Depending on the status code, a choice response is cacheable unless indicated otherwise.

選択応答は、選択されたバリアントからの通常のHTTP応答、「choice」応答タイプを指定するTCNヘッダー、およびバリアントの場所を示すContent-Locationヘッダーをマージします。ステータスコードに応じて、特に指定のない限り、選択応答はキャッシュ可能です。

Origin servers and proxy caches MUST construct choice responses with the following algorithm (or any other algorithm which gives equal end results for the client).

オリジンサーバーとプロキシキャッシュは、次のアルゴリズム(またはクライアントに同じ最終結果を与える他のアルゴリズム)を使用して選択応答を構築する必要があります。

In this algorithm, `the current Alternates header' refers to the Alternates header containing the variant list which was used to choose the best variant, and `the current variant list validator' refers to the validator of this list. Section 10.4 specifies how these two items can be obtained by a proxy cache.

このアルゴリズムでは、「現在のAlternatesヘッダー」は最適なバリアントを選択するために使用されたバリアントリストを含むAlternatesヘッダーを指し、「現在のバリアントリストバリデーター」はこのリストのバリデーターを指します。セクション10.4では、これら2つのアイテムをプロキシキャッシュで取得する方法を指定しています。

The algorithm consists of four steps.

アルゴリズムは4つのステップで構成されます。

1. Construct a HTTP request message on the best variant resource by rewriting the request-URI and Host header (if appropriate) of the received request message on the negotiable resource.

1. 交渉可能なリソースで受信した要求メッセージの要求URIとホストヘッダー(該当する場合)を書き換えて、最適なバリアントリソースでHTTP要求メッセージを作成します。

2. Generate a valid HTTP response message, but not one with the 304 (Not Modified) code, for the request message constructed in step 1.

2. 手順1で作成された要求メッセージに対して、有効なHTTP応答メッセージを生成しますが、304(Not Modified)コードを含むものは生成しません。

In a proxy cache, the response can be obtained from cache memory, or by passing the constructed HTTP request towards the origin server. If the request is passed on, the proxy MAY add, modify, or delete If-None-Match and If-Range headers to optimize the transaction with the upstream server.

プロキシキャッシュでは、キャッシュメモリから、または作成されたHTTP要求をオリジンサーバーに渡すことによって、応答を取得できます。リクエストが渡されると、プロキシは、上流サーバーとのトランザクションを最適化するために、If-None-MatchヘッダーとIf-Rangeヘッダーを追加、変更、または削除できます(MAY)。

Note: the proxy should be careful not to add entity tags of non-neighboring variants to If-* (conditional) headers of the request, as there are no global uniqueness requirements for these tags.

注:これらのタグにはグローバルな一意性要件がないため、プロキシは、隣接しないバリアントのエンティティタグをリクエストのIf- *(条件付き)ヘッダーに追加しないように注意する必要があります。

3. Only in origin servers: check for an origin server configuration error. If the HTTP response message generated in step 2 contains a TCN header, then the best variant resource is not a proper end point in the transparent negotiation process, and a 506 (Variant Also Negotiates) error response message SHOULD be generated instead of going to step 4.

3. オリジンサーバーのみ:オリジンサーバーの設定エラーを確認します。ステップ2で生成されたHTTP応答メッセージにTCNヘッダーが含まれている場合、最適なバリアントリソースは透過的なネゴシエーションプロセスの適切なエンドポイントではなく、ステップ5に進む代わりに506(バリアントもネゴシエート)エラー応答メッセージを生成する必要があります4。

4. Add a number of headers to the HTTP response message generated in step 2.

4. 手順2で生成されたHTTP応答メッセージに多数のヘッダーを追加します。

a. Add a TCN header which specifies the "choice" response-type.

a. 「choice」応答タイプを指定するTCNヘッダーを追加します。

b. Add a Content-Location header giving the location of the chosen variant. Delete any Content-Location header which was already present.

b. 選択したバリアントの場所を示すContent-Locationヘッダーを追加します。すでに存在するContent-Locationヘッダーを削除します。

Note: According to the HTTP/1.1 specification [1], if the Content-Location header contains a relative URI, this URI is relative to the URI in the Content-Base header, if present, and relative to the request-URI if no Content-Base header is present.

注:HTTP / 1.1仕様[1]によると、Content-Locationヘッダーに相対URIが含まれている場合、このURIは、存在する場合はContent-BaseヘッダーのURIに関連し、存在しない場合はrequest-URIに関連します。 Content-Baseヘッダーが存在します。

c. If any Vary headers are present in the response message from step 2, add, for every Vary header, a Variant-Vary header with a copy of the contents of this Vary header.

c. 手順2の応答メッセージにVaryヘッダーが存在する場合は、すべてのVaryヘッダーに対して、このVaryヘッダーの内容のコピーを含むVariant-Varyヘッダーを追加します。

d. Delete any Alternates headers which are present in in the response. Now, the current Alternates header MUST be added if this is required by the Negotiate request header, or if the server returns "re-choose" in the TCN response header. Otherwise, the current Alternates header MAY be added.

d. 応答に存在するすべてのAlternatesヘッダーを削除します。現在、Negotiateリクエストヘッダーでこれが必要な場合、またはサーバーがTCN応答ヘッダーで「再選択」を返す場合、現在のAlternatesヘッダーを追加する必要があります。それ以外の場合、現在のAlternatesヘッダーが追加される場合があります。

Note: It is usually a good strategy to always add the current Alternates header, unless it is very large compared to the rest of the response.

注:他の応答と比較して非常に大きい場合を除き、通常は常に現在のAlternatesヘッダーを追加することをお勧めします。

e. Add a Vary header to ensure correct handling by plain HTTP/1.1 caching proxies. This header can either be

e. Varyヘッダーを追加して、プレーンなHTTP / 1.1キャッシングプロキシによる正しい処理を保証します。このヘッダーは、

Vary: * or a more elaborate header, see section 10.6.

Vary:*またはより複雑なヘッダー。セクション10.6を参照してください。

f. To ensure compatibility with HTTP/1.0 caching proxies which do not recognize the Vary header, an Expires header with a date in the past MAY be added. See section 10.7 for more information.

f. Varyヘッダーを認識しないHTTP / 1.0キャッシングプロキシとの互換性を確保するために、過去の日付のExpiresヘッダーが追加される場合があります。詳細については、セクション10.7を参照してください。

g. If an ETag header is present in the response message from step 2, then extend the entity tag in that header with the current variant list validator, as specified in section 9.2.

g. ステップ2の応答メッセージにETagヘッダーが含まれている場合は、そのヘッダーのエンティティタグを、セクション9.2で指定されている現在のバリアントリストバリデータで拡張します。

Note: Step g. is required even if the variant list itself is not added in step d.

注:ステップg。ステップdでバリアントリスト自体が追加されていない場合でも必要です。

h. Only in proxy caches: set the Age header of the response to

h. プロキシキャッシュのみ:応答のAgeヘッダーを

max( variant_age , alternates_age )

max(variant_age、alternates_age)

where variant_age is the age of the variant response obtained in step 2, calculated according to the rules in the HTTP/1.1 specification [1], and alternates_age is the age of the Alternates header added in step d, calculated according to the rules in section 10.4.

ここで、variant_ageは、HTTP / 1.1仕様[1]のルールに従って計算された、ステップ2で取得されたバリアントレスポンスの経過時間です。alternates_ageは、セクションdのルールに従って計算された、ステップdで追加されたAlternatesヘッダーの経過時間です。 10.4。

Note that a server can shorten the response produced by the above algorithm to a 304 (Not Modified) response if an If-None-Match header in the original request allows it. If this is the case, an implementation of the above algorithm can avoid the unnecessary internal construction of full response message in step 2, it need only construct the parts which end up in the final 304 response. A proxy cache which implements this optimization can sometimes generate a legal 304 response even if it has not cached the variant data itself.

元のリクエストのIf-None-Matchヘッダーで許可されている場合、サーバーは上記のアルゴリズムによって生成されたレスポンスを304(Not Modified)レスポンスに短縮できます。これが事実である場合、上記のアルゴリズムの実装は、ステップ2での完全な応答メッセージの不要な内部構成を回避でき、最終的な304応答で終わる部分を構成するだけで済みます。この最適化を実装するプロキシキャッシュは、バリアントデータ自体をキャッシュしていなくても、正当な304応答を生成することがあります。

An example of a choice response is:

選択応答の例は次のとおりです。

     HTTP/1.1 200 OK
     Date: Tue, 11 Jun 1996 20:05:31 GMT
     TCN: choice
     Content-Type: text/html
     Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT
     Content-Length: 5327
     Cache-control: max-age=604800
     Content-Location: paper.1
     Alternates: {"paper.1" 0.9 {type text/html} {language en}},
                 {"paper.2" 0.7 {type text/html} {language fr}},
                 {"paper.3" 1.0 {type application/postscript}
                     {language en}}
     Etag: "gonkyyyy;1234"
     Vary: negotiate, accept, accept-language
     Expires: Thu, 01 Jan 1980 00:00:00 GMT
        
     <title>A paper about ....
        
10.3 Adhoc response
10.3 アドホック応答

An adhoc response can be sent by an origin server as an extreme measure, to achieve compatibility with a non-negotiating or buggy client if this compatibility cannot be achieved by sending a list or choice response. There are very little requirements on the contents of an adhoc response. An adhoc response MUST have a TCN header which specifies the "adhoc" response-type, and a Vary header if the response is cacheable. It MAY contain the Alternates header bound to the negotiable resource.

アドホック応答は、リストまたは選択応答を送信することによってこの互換性を達成できない場合に、非交渉またはバグの多いクライアントとの互換性を実現するための極端な手段として、発信元サーバーによって送信できます。アドホック応答の内容に関する要件はほとんどありません。アドホック応答には、「アドホック」応答タイプを指定するTCNヘッダーと、応答がキャッシュ可能な場合はVaryヘッダーが必要です。交渉可能なリソースにバインドされた代替ヘッダーを含む場合があります。

Any Vary header in the response SHOULD ensure correct handling by plain HTTP/1.1 caching proxies. This header can either be

応答のVaryヘッダーは、プレーンなHTTP / 1.1キャッシングプロキシによる正しい処理を保証する必要があります(SHOULD)。このヘッダーは、

Vary: *

変化:*

or a more elaborate header, see section 10.6.1. Depending on the status code, an adhoc response is cacheable unless indicated otherwise.

またはより複雑なヘッダー、セクション10.6.1を参照してください。ステータスコードに応じて、アドホック応答は、特に明記されていない限りキャッシュ可能です。

As an example of the use of an adhoc response, suppose that the variant resource "redirect-to-blah" yields redirection (302) responses. A choice response with this variant could look as follows:

アドホック応答の使用例として、バリアントリソース "redirect-to-blah"がリダイレクト(302)応答を生成するとします。このバリアントの選択応答は次のようになります。

     HTTP/1.1 302 Moved Temporarily
     Date: Tue, 11 Jun 1996 20:02:28 GMT
     TCN: choice
     Content-location: redirect-to-blah
     Location: http://blah.org/
     Content-Type: text/html
     Content-Length: 62
        

This document is available <a href=http://blah.org/>here</a>.

このドキュメントは<a href=http://blah.org/>こちら</a>から入手できます。

Suppose that the server knows that the receiving user agent has a bug, which causes it to crash on responses which contain both a Content-Location and a Location header. The server could then work around this bug by performing a server-side override and sending the following adhoc response instead:

受信ユーザーエージェントにバグがあり、Content-LocationヘッダーとLocationヘッダーの両方を含む応答でサーバーがクラッシュすることをサーバーが認識しているとします。サーバーは、サーバー側のオーバーライドを実行し、代わりに次のアドホック応答を送信することにより、このバグを回避できます。

        HTTP/1.1 302 Moved Temporarily
        Date: Tue, 11 Jun 1996 20:02:28 GMT
        TCN: adhoc, keep
        Location: http://blah.org/
        Content-Type: text/html
        Content-Length: 62
        

This document is available <a href=http://blah.org/>here</a>.

このドキュメントは<a href=http://blah.org/>こちら</a>から入手できます。

10.4 Reusing the Alternates header
10.4 Alternatesヘッダーの再利用

If a proxy cache has available a negotiated response which is cacheable, fresh, and has ETag and Alternates headers, then it MAY extract the Alternates header and associated variant list validator from the response, and reuse them (without unnecessary delay) to negotiate on behalf of the user agent (section 13) or to construct a choice response (section 10.2). The age of the extracted Alternates header is the age of the response from which it is extracted, calculated according to the rules in the HTTP/1.1 specification [1].

プロキシキャッシュが、キャッシュ可能でフレッシュで、ETagヘッダーとAlternatesヘッダーを持つネゴシエートされた応答を利用できる場合は、Alternatesヘッダーと関連するバリアントリストバリデーターを応答から抽出し、それらを再利用して(不必要な遅延なしで)代わりにネゴシエーションを行うことができます(MAY)。ユーザーエージェント(セクション13)の選択、または選択応答の作成(セクション10.2)。抽出されたAlternatesヘッダーの経過時間は、HTTP / 1.1仕様[1]のルールに従って計算された、抽出元の応答の経過時間です。

10.5 Extracting a normal response from a choice response
10.5 選択応答から通常の応答を抽出する

If a proxy receives a choice response, it MAY extract and cache the normal HTTP response contained therein. The normal response can be extracted by taking a copy of the choice response and then deleting any Content-Location, Alternates, and Vary headers, renaming any Variant-Vary headers to Vary headers, and shortening the structured entity tag in any ETag header to a normal entity tag.

プロキシが選択応答を受け取った場合、プロキシはそこに含まれる通常のHTTP応答を抽出してキャッシュしてもよい(MAY)。通常の応答は、choice応答のコピーを取得してから、Content-Location、Alternates、およびVaryヘッダーを削除し、Variant-Varyヘッダーの名前をVaryヘッダーに変更し、ETagヘッダーの構造化エンティティタグを通常のエンティティタグ。

This normal response MAY be cached (as a HTTP response to the variant request as constructed in step 1. of section 10.2) and reused to answer future direct requests on the variant resource, according to the rules in the HTTP/1.1 specification [1].

この通常の応答は(セクション10.2のステップ1.で作成されたバリアント要求へのHTTP応答として)キャッシュされ、HTTP / 1.1仕様[1]のルールに従って、バリアントリソースに対する将来の直接要求に応答するために再利用できます(MAY)。 。

Note: The caching of extracted responses can decrease the upstream bandwidth usage with up to a factor 2, because two independent HTTP/1.1 cache entries, one associated with the negotiable resource URI and one with the variant URI, are created in the same transaction. Without this optimization, both HTTP/1.1 cache entries can only be created by transmitting the variant data twice.

注:抽出された応答のキャッシングにより、アップストリーム帯域幅の使用量が最大2倍減少する可能性があります。1つは交渉可能なリソースURIに関連付けられ、もう1つはバリアントURIに関連付けられた2つの独立したHTTP / 1.1キャッシュエントリが同じトランザクションで作成されるためです。この最適化を行わないと、両方のHTTP / 1.1キャッシュエントリを作成するには、バリアントデータを2回送信する必要があります。

For security reasons (see section 14.2), an extracted normal response MUST NEVER be cached if belongs to a non-neighboring variant resource. If the choice response claims to contain data for a non-neighboring variant resource, the proxy SHOULD reject the choice response as a probable spoofing attempt.

セキュリティ上の理由から(セクション14.2を参照)、抽出された通常の応答は、隣接しないバリアントリソースに属している場合は決してキャッシュしてはなりません。選択応答が非隣接バリアントリソースのデータを含むと主張している場合、プロキシは、可能性のあるなりすましの試みとして選択応答を拒否する必要があります(SHOULD)。

10.6 Elaborate Vary headers
10.6 精巧なVaryヘッダー

If a HTTP/1.1 [1] server can generate varying responses for a request on some resource, then the server MUST include a Vary header in these responses if they are cacheable. This Vary header is a signal to HTTP/1.1 caches that something special is going on. It prevents the caches from returning the currently chosen response for every future request on the resource.

HTTP / 1.1 [1]サーバーがいくつかのリソースの要求に対してさまざまな応答を生成できる場合、サーバーは、それらがキャッシュ可能であれば、これらの応答にVaryヘッダーを含める必要があります。このVaryヘッダーは、特別な処理が行われていることを示すHTTP / 1.1キャッシュへのシグナルです。これにより、リソースに対する今後のすべての要求に対して、キャッシュが現在選択されている応答を返すことがなくなります。

Servers engaging in transparent content negotiation will generate varying responses. Therefore, cacheable list, choice, and adhoc responses MUST always include a Vary header.

透過的なコンテンツネゴシエーションを行うサーバーは、さまざまな応答を生成します。したがって、キャッシュ可能なリスト、選択、およびアドホックの応答には、常にVaryヘッダーを含める必要があります。

The most simple Vary header which can be included is

含めることができる最も単純なVaryヘッダーは

Vary: *

変化:*

This header leaves the way in which the response is selected by the server completely unspecified.

このヘッダーは、サーバーが応答を選択する方法を完全に指定しません。

A more elaborate Vary header MAY be used to allow for certain optimizations in HTTP/1.1 caches which do not have specific optimizations for transparent content negotiation, but which do cache multiple variant responses for one resource. Such a more elaborate Vary header lists all request headers which can be used by the server when selecting a response for a request on the resource.

より複雑なVaryヘッダーを使用して、透過的なコンテンツネゴシエーションのための特定の最適化は行わないが、1つのリソースに対して複数のバリアント応答をキャッシュするHTTP / 1.1キャッシュの特定の最適化を許可できます。そのようなより精巧なVaryヘッダーは、リソースで要求に対する応答を選択するときにサーバーが使用できるすべての要求ヘッダーをリストします。

10.6.1 Construction of an elaborate Vary header
10.6.1 精巧なVaryヘッダーの作成

Origin servers can construct a more elaborate Vary header in the following way. First, start with the header

オリジンサーバーは、次の方法でより複雑なVaryヘッダーを作成できます。まず、ヘッダーから始めます

Vary: negotiate

変化:交渉

`negotiate' is always included because servers use the information in the Negotiate header when choosing between a list, choice, or adhoc response.

サーバーはリスト、選択、またはアドホック応答から選択するときにNegotiateヘッダーの情報を使用するため、「negotiate」は常に含まれます。

Then, if any of the following attributes is present in any variant description in the Alternates header, add the corresponding header name to the Vary header

次に、以下の属性のいずれかがAlternatesヘッダーのバリアントの説明に存在する場合、対応するヘッダー名をVaryヘッダーに追加します

         attribute  |   header name to add
         -----------+---------------------
          type      |   accept
          charset   |   accept-charset
          language  |   accept-language
          features  |   accept-features
        

The Vary header constructed in this way specifies the response variation which can be caused by the use of a variant selection algorithm in proxies. If the origin server will in some cases, for example if contacted by a non-negotiating user agent, use a custom negotiation algorithm which takes additional headers into account, these names of these headers SHOULD also be added to the Vary header.

この方法で作成されたVaryヘッダーは、プロキシーでバリアント選択アルゴリズムを使用することで発生する可能性がある応答のバリエーションを指定します。オリジンサーバーが、非交渉のユーザーエージェントから連絡される場合など、場合によっては、追加のヘッダーを考慮に入れるカスタムネゴシエーションアルゴリズムを使用します。これらのヘッダーのこれらの名前は、Varyヘッダーにも追加する必要があります(SHOULD)。

10.6.2 Caching of an elaborate Vary header
10.6.2 精巧なVaryヘッダーのキャッシュ

A proxy cache cannot construct an elaborate vary header using the method above, because this method requires exact knowledge of any custom algorithms present in the origin server. However, when extracting an Alternates header from a response (section 10.4) caches MAY also extract the Vary header in the response, and reuse it along with the Alternates header. A clean Vary header can however only be extracted if the variant does not vary itself, i.e. if a Variant-Vary header is absent.

プロキシキャッシュは、上記の方法を使用して複雑な可変ヘッダーを構築できません。この方法は、元のサーバーに存在するカスタムアルゴリズムの正確な知識を必要とするためです。ただし、応答(セクション10.4)からAlternatesヘッダーを抽出する場合、キャッシュは応答のVaryヘッダーも抽出して、Alternatesヘッダーと共に再利用できます(MAY)。ただし、バリアント自体が変化しない場合、つまりVariant-Varyヘッダーがない場合にのみ、クリーンなVaryヘッダーを抽出できます。

10.7 Adding an Expires header for HTTP/1.0 compatibility
10.7 HTTP / 1.0互換性のためのExpiresヘッダーの追加

To ensure compatibility with HTTP/1.0 caching proxies which do not recognize the Vary header, an Expires header with a date in the past can be added to the response, for example

Varyヘッダーを認識しないHTTP / 1.0キャッシングプロキシとの互換性を確保するために、過去の日付のExpiresヘッダーを応答に追加できます。

        Expires: Thu, 01 Jan 1980 00:00:00 GMT
        

If this is done by an origin server, the server SHOULD usually also include a Cache-Control header for the benefit of HTTP/1.1 caches, for example

これがオリジンサーバーによって行われる場合、サーバーは通常、HTTP / 1.1キャッシュの利点のためにCache-Controlヘッダーも含む必要があります。次に例を示します。

Cache-Control: max-age=604800

キャッシュ制御:max-age = 604800

which overrides the freshness lifetime of zero seconds specified by the included Expires header.

これは、含まれているExpiresヘッダーで指定されたゼロ秒の鮮度存続期間をオーバーライドします。

Note: This specification only claims downwards compatibility with the HTTP/1.0 proxy caches which implement the HTTP/1.0 specification [2]. Some legacy proxy caches which return the HTTP/1.0 protocol version number do not honor the HTTP/1.0 Expires header as specified in [2]. Methods for achieving compatibility with such proxy caches are beyond the scope of this specification.

注:この仕様は、HTTP / 1.0仕様[2]を実装するHTTP / 1.0プロキシキャッシュとの下位互換性のみを主張しています。 HTTP / 1.0プロトコルのバージョン番号を返すいくつかのレガシープロキシキャッシュは、[2]で指定されているHTTP / 1.0 Expiresヘッダーを受け入れません。このようなプロキシキャッシュとの互換性を実現する方法は、この仕様の範囲外です。

10.8 Negotiation on content encoding
10.8 コンテンツのエンコーディングに関する交渉

Negotiation on the content encoding of a response is orthogonal to transparent content negotiation. The rules for when a content encoding may be applied are the same as in HTTP/1.1: servers MAY content-encode responses that are the result of transparent content negotiation whenever an Accept-Encoding header in the request allows it. When negotiating on the content encoding of a cacheable response, servers MUST add the accept-encoding header name to the Vary header of the response, or add `Vary: *'.

応答のコンテンツエンコーディングに関するネゴシエーションは、透過的なコンテンツネゴシエーションと直交しています。コンテンツエンコーディングが適用される場合のルールはHTTP / 1.1と同じです。サーバーは、リクエストのAccept-Encodingヘッダーで許可されている場合は常に、透過的なコンテンツネゴシエーションの結果であるコンテンツエンコードレスポンスを返す場合があります。キャッシュ可能な応答のコンテンツエンコーディングをネゴシエートする場合、サーバーは、応答のVaryヘッダーにaccept-encodingヘッダー名を追加するか、 `Vary:* 'を追加する必要があります。

Servers SHOULD always be able to provide unencoded versions of every transparently negotiated response. This means in particular that every variant in the variant list SHOULD at least be available in an unencoded form.

サーバーは常に、透過的にネゴシエートされたすべての応答のエンコードされていないバージョンを提供できる必要があります(SHOULD)。これは、特に、バリアントリスト内のすべてのバリアントは、少なくともエンコードされていない形式で使用できる必要があることを意味します。

Like HTTP/1.1, this specification allows proxies to encode or decode relayed or cached responses on the fly, unless explicitly forbidden by a Cache-Control directive. The encoded or decoded response still contains the same variant as far as transparent content negotiation is concerned. Note that HTTP/1.1 requires proxies to add a Warning header if the encoding of a response is changed.

HTTP / 1.1と同様に、この仕様では、Cache-Controlディレクティブで明示的に禁止されていない限り、中継またはキャッシュされた応答をオンザフライでエンコードまたはデコードできます。エンコードまたはデコードされた応答には、透過的なコンテンツネゴシエーションに関する限り、同じバリアントが含まれています。 HTTP / 1.1では、応答のエンコーディングが変更された場合、プロキシが警告ヘッダーを追加する必要があることに注意してください。

11 User agent support for transparent negotiation

11透過的なネゴシエーションのためのユーザーエージェントサポート

This section specifies the requirements a user agent needs to satisfy in order to support transparent negotiation. If the user agent contains an internal cache, this cache MUST conform to the rules for proxy caches in section 13.

このセクションでは、透過的なネゴシエーションをサポートするためにユーザーエージェントが満たす必要がある要件を指定します。ユーザーエージェントに内部キャッシュが含まれている場合、このキャッシュはセクション13のプロキシキャッシュのルールに準拠する必要があります。

11.1 Handling of responses
11.1 応答の処理

If a list response is received when a resource is accessed, the user agent MUST be able to automatically choose, retrieve, and display the best variant, or display an error message if none of the variants are acceptable.

リソースがアクセスされたときにリスト応答を受信した場合、ユーザーエージェントは、最適なバリアントを自動的に選択、取得、および表示できなければなりません。

If a choice response is received when a resource is accessed, the usual action is to automatically display the enclosed entity. However, if a remote variant selection algorithm which was enabled could have made a choice different from the choice the local algorithm would make, the user agent MAY apply its local algorithm to any variant list in the response, and automatically retrieve and display another variant if the local algorithm makes an other choice.

リソースにアクセスしたときに選択応答を受け取った場合、通常のアクションは、囲まれたエンティティを自動的に表示することです。ただし、有効になっているリモートバリアント選択アルゴリズムがローカルアルゴリズムとは異なる選択を行う可能性がある場合、ユーザーエージェントはローカルアルゴリズムを応答のバリアントリストに適用して、別のバリアントを自動的に取得して表示する場合があります(MAY)。ローカルアルゴリズムは他の選択を行います。

When receiving a choice response, a user agent SHOULD check if variant resource is a neighboring variant resource of the negotiable resource. If this is not the case, the user agent SHOULD reject the choice response as a probable spoofing attempt and display an error message, for example by internally replacing the choice response with a 502 (bad gateway) response.

選択応答を受信すると、ユーザーエージェントは、バリアントリソースが交渉可能なリソースの隣接するバリアントリソースであるかどうかを確認する必要があります(SHOULD)。そうでない場合、ユーザーエージェントは、可能性のあるなりすましの試みとして選択応答を拒否し、たとえば、選択応答を502(不正なゲートウェイ)応答で内部的に置き換えるなどしてエラーメッセージを表示する必要があります(SHOULD)。

11.2 Presentation of a transparently negotiated resource
11.2 透過的に交渉されたリソースのプレゼンテーション

If the user agent is displaying a variant which is not an embedded or inlined object and which is the result of transparent content negotiation, the following requirements apply.

ユーザーエージェントが埋め込みオブジェクトまたはインラインオブジェクトではなく、透過的なコンテンツネゴシエーションの結果であるバリアントを表示している場合、次の要件が適用されます。

1. The user agent SHOULD allow the user to review a list of all variants bound to the negotiable resource, and to manually retrieve another variant if desired. There are two general ways of providing such a list. First, the information in the Alternates header of the negotiable resource could be used to make an annotated menu of variants. Second, the entity included in a list response of the negotiable resource could be displayed. Note that a list response can be obtained by doing a GET request which only has the "trans" directive in the Negotiate header.

1. ユーザーエージェントは、ユーザーが交渉可能なリソースにバインドされているすべてのバリアントのリストを確認し、必要に応じて別のバリアントを手動で取得できるようにする必要があります(SHOULD)。このようなリストを提供するには、2つの一般的な方法があります。まず、交渉可能なリソースの代替ヘッダーの情報を使用して、バリアントの注釈付きメニューを作成できます。次に、交渉可能なリソースのリスト応答に含まれるエンティティを表示できます。リスト応答は、Negotiateヘッダーに「trans」ディレクティブのみが含まれるGET要求を実行することで取得できることに注意してください。

2. The user agent SHOULD make available though its user interface some indication that the resource being displayed is a negotiated resource instead of a plain resource. It SHOULD also allow the user to examine the variant list included in the Alternates header. Such a notification and review mechanism is needed because of privacy considerations, see section 14.1.

2. ユーザーエージェントは、ユーザーインターフェイスを介して、表示されているリソースがプレーンリソースではなく、ネゴシエートされたリソースであることを示す必要があります(SHOULD)。また、ユーザーが代替ヘッダーに含まれるバリアントリストを確認できるようにする必要があります(SHOULD)。プライバシーを考慮して、このような通知と確認のメカニズムが必要です。セクション14.1を参照してください。

3. If the user agent shows the URI of the displayed information to the user, it SHOULD be the negotiable resource URI, not the variant URI that is shown. This encourages third parties, who want to refer to the displayed information in their own documents, to make a hyperlink to the negotiable resource as a whole, rather than to the variant resource which happens to be shown. Such correct linking is vital for the interoperability of content across sites. The user agent SHOULD however also provide a means for reviewing the URI of the particular variant which is currently being displayed.

3. ユーザーエージェントが表示された情報のURIをユーザーに表示する場合は、表示されるバリアントURIではなく、交渉可能なリソースURIにする必要があります(SHOULD)。これにより、自分のドキュメントに表示された情報を参照したい第三者が、たまたま表示されたバリアントリソースではなく、交渉可能なリソース全体へのハイパーリンクを作成することができます。このような正しいリンクは、サイト間のコンテンツの相互運用性にとって不可欠です。ただし、ユーザーエージェントは、現在表示されている特定のバリアントのURIを確認する手段も提供する必要があります(SHOULD)。

4. Similarly, if the user agent stores a reference to the displayed information for future use, for example in a hotlist, it SHOULD store the negotiable resource URI, not the variant URI.

4. 同様に、ユーザーエージェントが表示された情報への参照を将来の使用のために、たとえばホットリストに保存する場合、バリアントURIではなく交渉可能なリソースURIを保存する必要があります(SHOULD)。

It is encouraged, but not required, that some of the above functionality is also made available for inlined or embedded objects, and when a variant which was selected manually is being displayed.

上記の機能の一部は、インライン化されたオブジェクトや埋め込みオブジェクトでも使用できるようにすること、および手動で選択されたバリアントが表示されている場合に推奨されますが、必須ではありません。

12 Origin server support for transparent negotiation

12透過的な交渉のためのオリジンサーバーのサポート

12.1 Requirements
12.1 必要条件

To implement transparent negotiation on a resource, the origin server MUST be able to send a list response when getting a GET request on the resource. It SHOULD also be able to send appropriate list responses for HEAD requests. When getting a request on a transparently negotiable resource, the origin server MUST NEVER return a response with a 2xx status code or any 3xx status code, except 304, which is not a list, choice, or adhoc response.

リソースに透過的なネゴシエーションを実装するには、オリジンサーバーは、リソースでGET要求を取得するときにリスト応答を送信できる必要があります。また、HEADリクエストに対して適切なリスト応答を送信できる必要があります(SHOULD)。透過的にネゴシエート可能なリソースでリクエストを取得する場合、オリジンサーバーは、リスト、選択、アドホック応答ではない304を除いて、2xxステータスコードまたは3xxステータスコードを含む応答を決して返さないでください。

If the request includes a Negotiate header with a "vlist" or "trans" directive, but without any directive which allows the server to select a best variant, a list response MUST ALWAYS be sent, except when the server is performing a server-side override for bug compatibility. If the request includes a Negotiate header with a "vlist" or "guess-small" directive, an Alternates header with the variant list bound to the negotiable resource MUST ALWAYS be sent in any list, choice, or adhoc response, except when the server is performing a server-side override for bug compatibility.

リクエストに「vlist」または「trans」ディレクティブを含むNegotiateヘッダーが含まれているが、サーバーが最適なバリアントを選択できるようにするディレクティブがない場合、サーバーがサーバー側を実行している場合を除き、リスト応答を必ず送信する必要があります。バグの互換性のためにオーバーライドします。リクエストに「vlist」または「guess-small」ディレクティブを含むNegotiateヘッダーが含まれている場合、交渉可能なリソースにバインドされたバリアントリストを含むAlternatesヘッダーは、サーバーが例外である場合を除いて、常にリスト、選択、またはアドホック応答で送信する必要がありますバグの互換性のためにサーバー側のオーバーライドを実行しています。

If the Negotiate header allows it, the origin server MAY run a remote variant selection algorithm. If the algorithm has sufficient information to choose a best variant, and if the best variant is a neighboring variant, the origin server MAY return a choice response with this variant.

Negotiateヘッダーで許可されている場合、オリジンサーバーはリモートバリアント選択アルゴリズムを実行できます(MAY)。アルゴリズムに最適なバリアントを選択するための十分な情報があり、最適なバリアントが隣接するバリアントである場合、起点サーバーはこのバリアントを含む選択応答を返す場合があります。

When getting a request on a transparently negotiable resource from a user agent which does not support transparent content negotiation, the origin server MAY use a custom algorithm to select between sending a list, choice, or adhoc response.

透過的なコンテンツネゴシエーションをサポートしていないユーザーエージェントから透過的にネゴシエート可能なリソースのリクエストを取得する場合、オリジンサーバーはカスタムアルゴリズムを使用して、リスト、選択肢、アドホック応答のいずれを送信するかを選択できます。

The following table summarizes the rules above.

次の表は、上記のルールをまとめたものです。

     |Req on   |Usr agnt|server-  |         Response may be:         |
     |trans neg|capable |side     +------+------+------+------+------+
     |resource?|of TCN? |override?|list  |choice|adhoc |normal|error |
     +---------+--------+---------+------+------+------+------+------+
     |   Yes   |  Yes   |  No     |always|smt(*)|never |never |always|
     +---------+--------+---------+------+------+------+------+------+
     |   Yes   |  Yes   |  Yes    |always|always|always|never |always|
     +---------+--------+---------+------+------+------+------+------+
     |   Yes   |  No    |   -     |always|always|always|never |always|
     +---------+--------+---------+------+------+------+------+------+
     |   No    |   -    |   -     |never |never |never |always|always|
     +---------+--------+---------+------+------+------+------+------+
        (*) sometimes, when allowed by the Negotiate request header
        

Negotiability is a binary property: a resource is either transparently negotiated, or it is not. Origin servers SHOULD NOT vary the negotiability of a resource, or the variant list bound to that resource, based on the request headers which are received. The variant list and the property of being negotiated MAY however change through time. The Cache-Control header can be used to control the propagation of such time-dependent changes through caches.

交渉可能性はバイナリプロパティです。リソースは透過的にネゴシエートされるか、そうではありません。オリジンサーバーは、受信したリクエストヘッダーに基づいて、リソースの交渉可能性、またはそのリソースにバインドされたバリアントリストを変更するべきではありません。ただし、バリアントリストと交渉されるプロパティは、時間の経過とともに変化する場合があります。 Cache-Controlヘッダーを使用すると、キャッシュを介したこのような時間に依存する変更の伝播を制御できます。

It is the responsibility of the author of the negotiable resource to ensure that all resources in the variant list serve the intended content, and that the variant resources do not engage in transparent content negotiation themselves.

バリアントリストのすべてのリソースが意図したコンテンツを提供し、バリアントリソースが透過的なコンテンツネゴシエーション自体に関与しないようにすることは、交渉可能なリソースの作成者の責任です。

12.2 Negotiation on transactions other than GET and HEAD
12.2 GETおよびHEAD以外のトランザクションの交渉

If a resource is transparently negotiable, this only has an impact on the GET and HEAD transactions on the resource. It is not possible (under this specification) to do transparent content negotiation on the direct result of a POST request.

リソースが透過的に交渉可能である場合、これはリソースのGETおよびHEADトランザクションにのみ影響します。この仕様では、POSTリクエストの直接の結果に対して透過的なコンテンツネゴシエーションを行うことはできません。

However, a POST request can return an unnegotiated 303 (See Other) response which causes the user agent to do a GET request on a second resource. This second resource could then use transparent content negotiation to return an appropriate final response. The figure below illustrates this.

ただし、POST要求は、ネゴシエートされていない303(その他を参照)応答を返す可能性があり、これによりユーザーエージェントは2番目のリソースでGET要求を実行します。この2番目のリソースは、透過的なコンテンツネゴシエーションを使用して、適切な最終応答を返すことができます。次の図はこれを示しています。

      Server ______ proxy ______ proxy ______ user
      x.org         cache        cache        agent
        
        < -------------------------------------
        |     POST http://x.org/cgi/submit
        |     <form contents in request body>
        |
        -------------------------------------- >
              303 See Other                    |
              Location: http://x.org/result/OK |
                                               |
        < -------------------------------------
        |     GET http://x.org/result/OK
        |      small Accept- headers
        |
      able to choose on
      behalf of user agent
        |
         ------------------------------------- >
              choice response with             |
              ..result/OK.nl variant           |
                                           displays OK.nl
        

See the HTTP/1.1 specification [1] for details on the 303 (See Other) status code. Note that this status code is not understood by some HTTP/1.0 clients.

303(その他を参照)ステータスコードの詳細については、HTTP / 1.1仕様[1]を参照してください。このステータスコードは、一部のHTTP / 1.0クライアントでは認識されないことに注意してください。

13 Proxy support for transparent negotiation

13透過的ネゴシエーションのプロキシサポート

Transparent content negotiation is an extension on top of HTTP/1.x. It is designed to work through any proxy which only implements the HTTP/1.1 specification [1]. If Expires headers are added as discussed in section 10.7, negotiation will also work though proxies

透過的なコンテンツネゴシエーションは、HTTP / 1.xの拡張機能です。 HTTP / 1.1仕様[1]のみを実装するプロキシを介して動作するように設計されています。セクション10.7で説明されているようにExpiresヘッダーが追加された場合、ネゴシエーションはプロキシ経由でも機能します

which implement HTTP/1.0 [2]. Thus, every HTTP/1.0 or HTTP/1.1 proxy provides support for transparent content negotiation. However, if it is to be claimed that a HTTP/1.x proxy offers transparent content negotiation services, at least one of the specific optimizations below MUST be implemented.

HTTP / 1.0 [2]を実装しています。したがって、すべてのHTTP / 1.0またはHTTP / 1.1プロキシは透過的なコンテンツネゴシエーションをサポートします。ただし、HTTP / 1.xプロキシが透過的なコンテンツネゴシエーションサービスを提供すると主張する場合は、以下の特定の最適化のうち少なくとも1つを実装する必要があります。

An HTTP/1.x proxy MUST ONLY optimize (change) the HTTP traffic flowing through it in ways which are explicitly allowed by the specification(s) it conforms to. A proxy which supports transparent content negotiation on top of HTTP/1.x MAY perform the optimizations allowed for by HTTP/1.x. In addition, it MAY perform three additional optimizations, defined below, on the HTTP traffic for transparently negotiated resources and their neighboring variant resources.

HTTP / 1.xプロキシは、それが準拠する仕様で明示的に許可されている方法で、HTTPトラフィックフローのみを最適化(変更)する必要があります。 HTTP / 1.x上で透過的なコンテンツネゴシエーションをサポートするプロキシは、HTTP / 1.xで許可されている最適化を実行できます(MAY)。さらに、透過的にネゴシエートされたリソースとその隣接するバリアントリソースのHTTPトラフィックに対して、以下に定義する3つの追加の最適化を実行する場合があります。

First, when getting a request on a transparently negotiable resource from a user agent which supports transparent content negotiation, the proxy MAY return any cached, fresh list response from that resource, even if the selecting request headers, as specified by the Vary header, do not match.

まず、透過的なコンテンツネゴシエーションをサポートするユーザーエージェントから透過的にネゴシエート可能なリソースでリクエストを取得すると、Varyヘッダーで指定された選択リクエストヘッダーが合わない。

Second, when allowed by the user agent and origin server, a proxy MAY reuse an Alternates header taken from a previous response (section 10.4) to run a remote variant selection algorithm. If the algorithm has sufficient information to choose a best variant, and if the best variant is a neighboring variant, the proxy MAY return a choice response with this variant.

次に、ユーザーエージェントとオリジンサーバーで許可されている場合、プロキシは前の応答(セクション10.4)から取得したAlternatesヘッダーを再利用して、リモートバリアント選択アルゴリズムを実行できます(MAY)。アルゴリズムに最適なバリアントを選択するための十分な情報があり、最適なバリアントが隣接するバリアントである場合、プロキシはこのバリアントとともに選択応答を返す場合があります。

Third, if a proxy receives a choice response, it MAY extract and cache the normal response embedded therein, as described in section 10.5.

3番目に、セクション10.5で説明されているように、プロキシが選択応答を受信した場合、プロキシはそこに埋め込まれた通常の応答を抽出してキャッシュしてもよい(MAY)。

14 Security and privacy considerations

14セキュリティとプライバシーの考慮事項

14.1 Accept- headers revealing personal information
14.1 個人情報を明らかにするAccept-ヘッダー

Accept- headers, in particular Accept-Language headers, may reveal information which the user would rather keep private unless it will directly improve the quality of service. For example, a user may not want to send language preferences to sites which do not offer multi-lingual content. The transparent content negotiation mechanism allows user agents to omit sending of the Accept-Language header by default, without adversely affecting the outcome of the negotiation process if transparently negotiated multi-lingual content is accessed.

Accept-ヘッダー、特にAccept-Languageヘッダーは、サービスの品質を直接向上させない限り、ユーザーが非公開にしたい情報を明らかにする可能性があります。たとえば、ユーザーは、多言語コンテンツを提供しないサイトに言語設定を送信したくない場合があります。透過的なコンテンツネゴシエーションメカニズムにより、ユーザーエージェントはデフォルトでAccept-Languageヘッダーの送信を省略できます。透過的にネゴシエートされた多言語コンテンツにアクセスした場合、ネゴシエーションプロセスの結果に悪影響を与えることはありません。

However, even if Accept- headers are never sent, the automatic selection and retrieval of a variant by a user agent will reveal a preference for this variant to the server. A malicious service author could provide a page with `fake' negotiability on (ethnicity-correlated) languages, with all variants actually being the same English document, as a means of obtaining privacy-sensitive information. Such a plot would however be visible to an alert victim if the list of available variants and their properties is reviewed.

ただし、Accept-ヘッダーが送信されない場合でも、ユーザーエージェントによるバリアントの自動選択と取得により、このバリアントの設定がサーバーに明らかにされます。悪意のあるサービスの作成者は、プライバシーに敏感な情報を入手する手段として、すべての亜種が実際には同じ英語のドキュメントである(民族相関)言語での「偽の」交渉可能性を備えたページを提供する可能性があります。ただし、このようなプロットは、利用可能なバリアントとそのプロパティのリストを確認すると、アラートの被害者に表示されます。

Some additional privacy considerations connected to Accept- headers are discussed in [1].

Accept-ヘッダーに関連するプライバシーに関するその他の考慮事項については、[1]で説明しています。

14.2 Spoofing of responses from variant resources
14.2 バリアントリソースからの応答のなりすまし

The caching optimization in section 10.5 gives the implementer of a negotiable resource control over the responses cached for all neighboring variant resources. This is a security problem if a neighboring variant resource belongs to another author. To provide security in this case, the HTTP server will have to filter the Content-Location headers in the choice responses generated by the negotiable resource implementation.

セクション10.5のキャッシング最適化は、すべての隣接するバリアントリソースに対してキャッシュされた応答に対する交渉可能なリソース制御の実装を提供します。隣接するバリアントリソースが別の作成者に属している場合、これはセキュリティの問題です。この場合のセキュリティを提供するために、HTTPサーバーは、交渉可能なリソースの実装によって生成された選択応答のContent-Locationヘッダーをフィルタリングする必要があります。

14.3 Security holes revealed by negotiation
14.3 交渉により明らかになったセキュリティホール

Malicious servers could use transparent content negotiation as a means of obtaining information about security holes which may be present in user agents. This is a risk in particular for negotiation on the availability of scripting languages and libraries.

悪意のあるサーバーは、ユーザーエージェントに存在する可能性のあるセキュリティホールに関する情報を取得する手段として透過的なコンテンツネゴシエーションを使用する可能性があります。これは、特にスクリプト言語とライブラリの可用性について交渉する際のリスクです。

15 Internationalization considerations

15国際化に関する考慮事項

This protocol defines negotiation facilities which can be used for the internationalization of web content. For the internationalization of list response bodies (section 10.1), HTTP/1.0 style negotiation (section 4.2) can be used.

このプロトコルは、Webコンテンツの国際化に使用できる交渉機能を定義します。リスト応答本文の国際化(セクション10.1)には、HTTP / 1.0スタイルのネゴシエーション(セクション4.2)を使用できます。

16 Acknowledgments

16謝辞

Work on HTTP content negotiation has been done since at least 1993. The authors are unable to trace the origin of many of the ideas incorporated in this document. Many members of the HTTP working group have contributed to the negotiation model in this specification. The authors wish to thank the individuals who have commented on earlier versions of this document, including Brian Behlendorf, Daniel DuBois, Martin J. Duerst, Roy T. Fielding, Jim Gettys, Yaron Goland, Dirk van Gulik, Ted Hardie, Graham Klyne, Scott Lawrence, Larry Masinter, Jeffrey Mogul, Henrik Frystyk Nielsen, Frederick G.M. Roeber, Paul Sutton, and Klaus Weide and Mark Wood.

HTTPコンテンツネゴシエーションに関する作業は、少なくとも1993年から行われています。著者は、このドキュメントに組み込まれている多くのアイデアの起源をたどることができません。 HTTPワーキンググループの多くのメンバーが、この仕様の交渉モデルに貢献しています。著者は、ブライアン・ベーレンドルフ、ダニエル・デュボワ、マーティン・J・デュエルスト、ロイ・T・フィールディング、ジム・ゲティス、ヤロン・ゴランド、ダーク・ファン・グリク、テッド・ハーディ、グラハム・クライン、スコット・ローレンス、ラリー・マシンター、ジェフリー・モーグル、ヘンリック・フリスティク・ニールセン、フレデリックGM Roeber、Paul Sutton、Klaus Weide、Mark Wood。

17 References

17参考文献

[1] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, January 1997.

[1] Fielding、R.、Gettys、J.、Mogul、J.、Frystyk、H。、およびT. Berners-Lee、「Hypertext Transfer Protocol-HTTP / 1.1」、RFC 2068、1997年1月。

[2] Berners-Lee, T., Fielding, R., and H. Frystyk, "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996.

[2] Berners-Lee、T.、Fielding、R。、およびH. Frystyk、「Hypertext Transfer Protocol-HTTP / 1.0」、RFC 1945、May 1996。

[3] Holtman, K., and A. Mutz, "HTTP Remote Variant Selection Algorithm -- RVSA/1.0", RFC 2296, March 1998.

[3] Holtman、K。、およびA. Mutz、「HTTPリモートバリアント選択アルゴリズム-RVSA / 1.0」、RFC 2296、1998年3月。

[4] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[4] Bradner、S。、「RFCで使用して要件レベルを示すためのキーワード」、BCP 14、RFC 2119、1997年3月。

[5] Yergeau, F., "UTF-8, a transformation format of Unicode and ISO 10646", RFC 2044, October 1996.

[5] Yergeau、F。、「UTF-8、UnicodeおよびISO 10646の変換フォーマット」、RFC 2044、1996年10月。

18 Authors' Addresses

18著者のアドレス

Koen Holtman Technische Universiteit Eindhoven Postbus 513 Kamer HG 6.57 5600 MB Eindhoven (The Netherlands)

Koen Holtman Eindhoven University of Technology PO Box 513 Room HG 6.57 5600 MBアイントホーフェン(オランダ)

   EMail: koen@win.tue.nl
        

Andrew H. Mutz Hewlett-Packard Company 1501 Page Mill Road 3U-3 Palo Alto CA 94304, USA

Andrew H. Mutz Hewlett-Packard Company 1501 Page Mill Road 3U-3 Palo Alto CA 94304、USA

Fax +1 415 857 4691 EMail: mutz@hpl.hp.com

ファックス+1 415 857 4691 Eメール:mutz@hpl.hp.com

19 Appendix: Example of a local variant selection algorithm

19付録:ローカルバリアント選択アルゴリズムの例

A negotiating user agent will choose the best variant from a variant list with a local variant selection algorithm. This appendix contains an example of such an algorithm.

交渉ユーザーエージェントは、ローカルバリアント選択アルゴリズムを使用して、バリアントリストから最適なバリアントを選択します。この付録には、そのようなアルゴリズムの例が含まれています。

The inputs of the algorithm are a variant list from an Alternates header, and an agent-side configuration database, which contains

アルゴリズムの入力は、Alternatesヘッダーのバリアントリストと、次を含むエージェント側の構成データベースです。

- the feature set of the current request,

- 現在のリクエストの機能セット、

- a collection of quality values assigned to media types, languages, and charsets for the current request, following the model of the corresponding HTTP/1.1 [1] Accept- headers,

- 対応するHTTP / 1.1 [1] Accept-ヘッダーのモデルに従って、現在のリクエストのメディアタイプ、言語、および文字セットに割り当てられた品質値のコレクション

- a table which lists `forbidden' combinations of media types and charsets, i.e. combinations which cannot be displayed because of some internal user agent limitation.

- メディアタイプと文字セットの「禁止された」組み合わせ、つまり、内部ユーザーエージェントの制限のために表示できない組み合わせをリストした表。

The output of the algorithm is either the best variant, or the conclusion that none of the variants are acceptable.

アルゴリズムの出力は、最良のバリアントであるか、どのバリアントも許容できないという結論です。

19.1 Computing overall quality values
19.1 全体的な品質値の計算

As a first step in the local variant selection algorithm, the overall qualities associated with all variant descriptions in the list are computed.

ローカルバリアント選択アルゴリズムの最初のステップとして、リスト内のすべてのバリアントの説明に関連する全体的な品質が計算されます。

The overall quality Q of a variant description is the value

バリアントの説明の全体的な品質Qが値です

      Q = round5( qs * qt * qc * ql * qf * qa )
        

where rounds5 is a function which rounds a floating point value to 5 decimal places after the point. It is assumed that the user agent can run on multiple platforms: the rounding function makes the algorithm independent of the exact characteristics of the underlying floating point hardware.

ここで、rounds5は、浮動小数点値を小数点以下5桁に丸める関数です。ユーザーエージェントは複数のプラットフォームで実行できると想定されています。丸め機能により、アルゴリズムは、基盤となる浮動小数点ハードウェアの正確な特性から独立しています。

The factors qs, qt, qc, ql, qf, and qa are determined as follows.

係数qs、qt、qc、ql、qf、およびqaは、次のように決定されます。

qs Is the source quality factor in the variant description.

qsバリアントの説明におけるソースの品質係数です。

qt The media type quality factor is 1 if there is no type attribute in the variant description. Otherwise, it is the quality value assigned to this type by the configuration database. If the database does not assign a value, then the factor is 0.

qtバリアントの説明にタイプ属性がない場合、メディアタイプの品質係数は1です。それ以外の場合は、構成データベースによってこのタイプに割り当てられた品質値です。データベースが値を割り当てない場合、係数は0です。

qc The charset quality factor is 1 if there is no charset attribute in the variant description. Otherwise, it is the quality value assigned to this charset by the configuration database. If the database does not assign a value, then the factor is 0.

qcバリアントの説明に文字セット属性がない場合、文字セット品質係数は1です。それ以外の場合は、構成データベースによってこの文字セットに割り当てられた品質値です。データベースが値を割り当てない場合、係数は0です。

ql The language quality factor is 1 if there is no language attribute in the variant description. Otherwise, it is the highest quality value the configuration database assigns to any of the languages listed in the language attribute. If the database does not assign a value to any of the languages listed, then the factor is 0.

qlバリアントの説明に言語属性がない場合、言語品質係数は1です。それ以外の場合は、言語属性にリストされている言語のいずれかに構成データベースが割り当てる最高品質の値です。リストされているどの言語にもデータベースが値を割り当てない場合、係数は0になります。

qf The features quality factor is 1 if there is no features attribute in the variant description. Otherwise, it is the quality degradation factor computed for the features attribute using the feature set of the current request.

qfバリアントの説明にfeatures属性がない場合、features品質係数は1です。それ以外の場合は、現在のリクエストの機能セットを使用してfeatures属性に対して計算された品質低下係数です。

qa The quality adjustment factor is 0 if the variant description lists a media type - charset combination which is `forbidden' by the table, and 1 otherwise.

qaバリアントの説明にメディアタイプがリストされている場合の品質調整係数は0です。表で「禁止」されている文字セットの組み合わせです。それ以外の場合は1です。

As an example, if a variant list contains the variant description

例として、バリアントリストにバリアントの説明が含まれている場合

     {"paper.2" 0.7 {type text/html} {language fr}}
        

and if the configuration database contains the quality value assignments

構成データベースに品質値の割り当てが含まれている場合

     types:     text/html;q=1.0, type application/postscript;q=0.8
     languages: en;q=1.0, fr;q=0.5
        

then the local variant selection algorithm will compute the overall quality for the variant description as follows:

次に、ローカルバリアント選択アルゴリズムは、バリアントの説明の全体的な品質を次のように計算します。

     {"paper.2" 0.7 {type text/html} {language fr}}
                 |           |                 |
                 |           |                 |
                 V           V                 V
       round5 ( 0.7   *     1.0        *      0.5 ) = 0.35000
        

With same configuration database, the variant list

同じ構成データベースで、バリアントリスト

     {"paper.1" 0.9 {type text/html} {language en}},
     {"paper.2" 0.7 {type text/html} {language fr}},
     {"paper.3" 1.0 {type application/postscript} {language en}}
        

would yield the following computations:

次の計算が得られます。

       round5 ( qs  * qt  * qc  * ql  * qf  * qa ) = Q
                ---   ---   ---   ---   ---   ---
      paper.1:  0.9 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0  = 0.90000
      paper.1:  0.7 * 1.0 * 1.0 * 0.5 * 1.0 * 1.0  = 0.35000
      paper.3:  1.0 * 0.8 * 1.0 * 1.0 * 1.0 * 1.0  = 0.80000
        
19.2 Determining the result
19.2 結果の決定

Using all computed overall quality values, the end result of the local variant selection algorithm is determined as follows.

計算されたすべての品質値を使用して、ローカルバリアント選択アルゴリズムの最終結果は次のように決定されます。

If all overall quality values are 0, then the best variant is the fallback variant, if there is one in the list, else the result is the conclusion that none of the variants are acceptable.

すべての全体的な品質値が0の場合、リストに1つある場合、最適なバリアントはフォールバックバリアントです。それ以外の場合、結果はどのバリアントも許容できないという結論になります。

If at least one overall quality value is greater than 0, then the best variant is the variant which has the description with the highest overall quality value, or, if there are multiple variant descriptions which share the highest overall quality value, the variant of the first variant description in the list which has this highest overall quality value.

少なくとも1つの総合品質値が0より大きい場合、最適なバリアントは、総合品質値が最も高い説明を持つバリアントです。または、総合品質値が最も高いバリアントの説明が複数ある場合は、この最高の全体的な品質値を持つリストの最初のバリアントの説明。

19.3 Ranking dimensions
19.3 ランキングディメンション

Consider the following variant list:

次のバリアントリストを検討してください。

     {"paper.greek"   1.0 {language el} {charset ISO-8859-7}},
     {"paper.english" 1.0 {language en} {charset ISO-8859-1}}
        

It could be the case that the user prefers the language "el" over "en", while the user agent can render "ISO-8859-1" better than "ISO-8859-7". The result is that in the language dimension, the first variant is best, while the second variant is best in the charset dimension. In this situation, it would be preferable to choose the first variant as the best variant: the user settings in the language dimension should take precedence over the hard-coded values in the charset dimension.

ユーザーエージェントが「ISO-8859-7」よりも「ISO-8859-1」をレンダリングできる一方で、ユーザーが「en」よりも言語「el」を好む場合が考えられます。その結果、言語ディメンションでは、最初のバリアントが最適であり、2番目のバリアントは文字セットディメンションで最適です。この状況では、最初のバリアントを最適なバリアントとして選択することをお勧めします。言語ディメンションのユーザー設定は、文字セットディメンションのハードコードされた値よりも優先される必要があります。

To express this ranking between dimensions, the user agent configuration database should have a higher spread in the quality values for the language dimension than for the charset dimension. For example, with

ディメンション間のこのランキングを表現するために、ユーザーエージェント構成データベースは、文字セットディメンションよりも言語ディメンションの品質値のばらつきが大きい必要があります。たとえば、

languages: el;q=1.0, en-gb;q=0.7, en;q=0.6, da;q=0, ...

言語:el; q = 1.0、en-gb; q = 0.7、en; q = 0.6、da; q = 0、...

charsets: ISO-8859-1;q=1.0, ISO-8859-7;q=0.95, ISO-8859-5;q=0.97, unicode-1-1;q=0, ...

文字セット:ISO-8859-1; q = 1.0、ISO-8859-7; q = 0.95、ISO-8859-5; q = 0.97、unicode-1-1; q = 0、...

the first variant will have an overall quality of 0.95000, while the second variant will have an overall quality 0.70000. This makes the first variant the best variant.

最初のバリアントの全体的な品質は0.95000ですが、2番目のバリアントの全体的な品質は0.70000です。これにより、最初のバリアントが最良のバリアントになります。

20 Appendix: feature negotiation examples

20付録:機能ネゴシエーションの例

This appendix contains examples of the use of feature tags in variant descriptions. The tag names used here are examples only, they do not in general reflect the tag naming scheme proposed in [4].

この付録には、バリアントの説明での機能タグの使用例が含まれています。ここで使用されているタグ名は単なる例であり、一般に[4]で提案されているタグの命名方式を反映していません。

20.1 Use of feature tags
20.1 機能タグの使用

Feature tags can be used in variant lists to express the quality degradation associated with the presence or absence of certain features. One example is

機能タグをバリアントリストで使用して、特定の機能の有無に関連する品質低下を表すことができます。一例は

     {"index.html.plain" 0.7 },
     {"index.html"       1.0 {features tables frames}}
        

Here, the "{features tables frames}" part expresses that index.html uses the features tagged as tables and frames. If these features are absent, the overall quality of index.html degrades to 0. Another example is

ここで、「{features tables frames}」の部分は、index.htmlがテーブルとフレームとしてタグ付けされた機能を使用することを表しています。これらの機能がない場合、index.htmlの全体的な品質は0に低下します。別の例は

     {"home.graphics" 1.0 {features !textonly}},
     {"home.textonly" 0.7 }
        

where the "{features !textonly}" part expresses that home.graphics requires the absence of the textonly feature. If the feature is present, the overall quality of home.graphics degrades to 0.

ここで、「{features!textonly}」の部分は、home.graphicsがtextonly機能の欠如を必要とすることを表しています。機能が存在する場合、home.graphicsの全体的な品質は0に低下します。

The absence of a feature need not always degrade the overall quality to 0. In the example

機能がない場合、必ずしも全体的な品質が0に低下する必要はありません。例では

     {"x.html.1" 1.0 {features fonts;-0.7}}
        

the absence of the fonts feature degrades the quality with a factor of 0.7. Finally, in the example

フォント機能がないと、品質は0.7倍に低下します。最後に、例では

      {"y.html" 1.0 {features [blebber wolx] }}
        

The "[blebber wolx]" expresses that y.html requires the presence of the blebber feature or the wolx feature. This construct can be used in a number of cases:

「[blebber wolx]」は、y.htmlがblebber機能またはwolx機能の存在を必要とすることを表します。このコンストラクトは、多くの場合に使用できます。

1. blebber and wolx actually tag the same feature, but they were registered by different people, and some user agents say they support blebber while others say they support wolx.

1. blebberとwolxは実際には同じ機能にタグを付けていますが、別の人によって登録されており、一部のユーザーエージェントはblebberをサポートしていると言い、他のユーザーエージェントはwolxをサポートしていると言っています。

2. blebber and wolx are HTML tags of different vendors which implement the same functionality, and which are used together in y.html without interference.

2. blebberとwolxは、同じ機能を実装し、干渉することなくy.htmlで一緒に使用される異なるベンダーのHTMLタグです。

3. blebber and wolx are HTML tags of different vendors which implement the same functionality, and y.html uses the tags in a conditional HTML construct.

3. blebberとwolxは、同じ機能を実装する異なるベンダーのHTMLタグであり、y.htmlは条件付きHTML構成でタグを使用します。

4. blebber is a complicated HTML tag with only a sketchy definition, implemented by one user agent vendor, and wolx indicates implementation of a well-defined subset of the blebber tag by some other vendor(s). y.html uses only this well-defined subset.

4. blebberは、1つのユーザーエージェントベンダーによって実装された、大まかな定義のみを持つ複雑なHTMLタグであり、wolxは、他の一部のベンダーによる明確なblebberタグのサブセットの実装を示します。 y.htmlは、この明確に定義されたサブセットのみを使用します。

20.2 Use of numeric feature tags
20.2 数値機能タグの使用

As an example of negotiation in a numeric area, the following variant list describes four variants with title graphics designed for increasing screen widths:

数値領域でのネゴシエーションの例として、次のバリアントリストは、画面幅を広げるために設計されたタイトルグラフィックを持つ4つのバリアントを説明しています。

     {"home.pda"    1.0 {features screenwidth=[-199] }},
     {"home.narrow" 1.0 {features screenwidth=[200-599] }},
     {"home.normal" 1.0 {features screenwidth=[600-999] }},
     {"home.wide"   1.0 {features screenwidth=[1000-] }},
     {"home.normal"}
        

The last element of the list specifies a safe default for user agents which do not implement screen width negotiation. Such user agents will reject the first four variants as unusable, as they seem to rely on a feature which they do not understand.

リストの最後の要素は、画面幅ネゴシエーションを実装しないユーザーエージェントの安全なデフォルトを指定します。このようなユーザーエージェントは、理解できない機能に依存しているように見えるため、最初の4つのバリアントを使用不可として拒否します。

20.3 Feature tag design
20.3 機能タグのデザイン

When designing a new feature tag, it is important to take into account that existing user agents, which do not recognize the new tag will treat the feature as absent. In general, a new feature tag needs to be designed in such a way that absence of the tag is the default case which reflects current practice. If this design principle is ignored, the resulting feature tag will generally be unusable.

新しい機能タグを設計するときは、新しいタグを認識しない既存のユーザーエージェントがその機能を存在しないものとして扱うことを考慮することが重要です。一般に、新しい機能タグは、タグの不在が現在の慣行を反映するデフォルトのケースになるように設計する必要があります。この設計原則を無視すると、通常、結果の機能タグは使用できなくなります。

As an example, one could try to support negotiation between monochrome and color content by introducing a `color' feature tag, the presence of which would indicate the capability to display color graphics. However, if this new tag is used in a variant list, for example

例として、「カラー」機能タグを導入することにより、モノクロコンテンツとカラーコンテンツの間のネゴシエーションをサポートしようとすることができます。その存在は、カラーグラフィックスを表示する機能を示します。ただし、この新しいタグがバリアントリストで使用されている場合、たとえば

      {"rainbow.gif"      1.0 {features color} }
        
      {"rainbow.mono.gif" 0.6 {features !color}}
        

then existing user agents, which would not recognize the color tag, would all display the monochrome rainbow. The color tag is therefore unusable in situations where optimal results for existing user agents are desired. To provide for negotiation in this area, one must introduce a `monochrome' feature tag; its presence indicates that the user agent can only render (or the user prefers to view) monochrome graphics.

次に、カラータグを認識しない既存のユーザーエージェントは、すべてモノクロの虹を表示します。したがって、既存のユーザーエージェントの最適な結果が望まれる状況では、カラータグは使用できません。この分野での交渉に備えるには、「モノクロ」機能タグを導入する必要があります。その存在は、ユーザーエージェントがモノクログラフィックスのみをレンダリングできる(またはユーザーが表示することを好む)ことを示します。

21 Appendix: origin server implementation considerations

21付録:オリジンサーバーの実装に関する考慮事項

21.1 Implementation with a CGI script
21.1 CGIスクリプトによる実装

Transparent content negotiation has been designed to allow a broad range of implementation options at the origin server side. A very minimal implementation can be done using the CGI interface. The CGI script below is an example.

透過的なコンテンツネゴシエーションは、配信元サーバー側で幅広い実装オプションを許可するように設計されています。 CGIインターフェースを使用して、最小限の実装を行うことができます。以下のCGIスクリプトは一例です。

      #!/bin/sh
        
      cat - <<'blex'
      TCN: list
      Alternates: {"stats.tables.html" 1.0 {type text/html} {features
      tables}}, {"stats.html" 0.8 {type text/html}}, {"stats.ps" 0.95
      {type application/postscript}}
      Vary: *
      Content-Type: text/html
        
      <title>Multiple Choices for Web Statistics</title>
      <h2>Multiple Choices for Web Statistics:</h2>
      <ul>
      <li><a href=stats.tables.html>Version with HTML tables</a>
      <p>
      <li><a href=stats.html>Version without HTML tables</a>
      <p>
      <li><a href=stats.ps>Postscript version</a>
      </ul>
      blex
        

The Alternates header in the above script must be read as a single line. The script always generates a list response with the 200 (OK) code, which ensures compatibility with non-negotiating HTTP/1.0 agents.

上記のスクリプトのAlternatesヘッダーは、1行として読み取る必要があります。スクリプトは常に200(OK)コードでリスト応答を生成します。これにより、ネゴシエーションを行わないHTTP / 1.0エージェントとの互換性が保証されます。

21.2 Direct support by HTTP servers
21.2 HTTPサーバーによる直接サポート

Sophisticated HTTP servers could make a transparent negotiation module available to content authors. Such a module could incorporate a remote variant selection algorithm and an implementation of the algorithm for generating choice responses (section 10.2). The definition of interfaces to such modules is beyond the scope of this specification.

洗練されたHTTPサーバーにより、コンテンツ作成者が透過的な交渉モジュールを利用できるようになります。このようなモジュールには、リモートバリアント選択アルゴリズムと、選択応答を生成するためのアルゴリズムの実装を組み込むことができます(セクション10.2)。そのようなモジュールへのインターフェースの定義は、この仕様の範囲を超えています。

21.3 Web publishing tools
21.3 Webパブリッシングツール

Web publishing tools could automatically generate several variants of a document (for example the original TeX version, a HTML version with tables, a HTML version without tables, and a Postscript version), together with an appropriate variant list in the interface format of a HTTP server transparent negotiation module. This would allow documents to be published as transparently negotiable resources.

Web公開ツールは、HTTPのインターフェイス形式の適切なバリアントリストと共に、ドキュメントのいくつかのバリアント(たとえば、元のTeXバージョン、テーブル付きのHTMLバージョン、テーブルなしのHTMLバージョン、およびPostscriptバージョン)を自動的に生成できます。サーバー透過ネゴシエーションモジュール。これにより、ドキュメントを透過的に交渉可能なリソースとして公開できます。

22 Appendix: Example of choice response construction

22付録:選択応答構成の例

The following is an example of the construction of a choice response by a proxy cache which supports HTTP/1.1 and transparent content negotiation. The use of the HTTP/1.1 conditional request mechanisms is also shown.

以下は、HTTP / 1.1および透過的なコンテンツネゴシエーションをサポートするプロキシキャッシュによる選択応答の構成の例です。 HTTP / 1.1条件付き要求メカニズムの使用も示されています。

Assume that a user agent has cached a variant list with the validator "1234" for the negotiable resource http://x.org/paper. Also assume that it has cached responses from two neighboring variants, with the entity tags "gonkyyyy" and W/"a;b". Assume that all three user agent cache entries are stale: they would need to be revalidated before the user agent can use them. If http://x.org/paper accessed in this situation, the user agent could send the following request to its proxy cache:

ユーザーエージェントが、交渉可能なリソースhttp://x.org/paperのバリデータ「1234」を使用してバリアントリストをキャッシュしていると仮定します。また、エンティティタグが「gonkyyyy」とW / "a; b"の2つの隣接するバリアントからの応答をキャッシュしていると仮定します。 3つのユーザーエージェントキャッシュエントリがすべて古くなっていると想定します。ユーザーエージェントがそれらを使用する前に、それらを再検証する必要があります。この状況でhttp://x.org/paperにアクセスした場合、ユーザーエージェントは次のリクエストをプロキシキャッシュに送信できます。

     GET /paper HTTP/1.1
     Host: x.org
     User-Agent: WuxtaWeb/2.4
     Negotiate: 1.0
     Accept: text/html, application/postscript;q=0.4, */*
     Accept-Language: en
     If-None-Match: "gonkyyyy;1234", W/"a;b;1234"
        

Assume that the proxy cache has cached the same three items as the user agent, but that it has revalidated the variant list 8000 seconds ago, so that the list is still fresh for the proxy. This means that the proxy can run a remote variant selection algorithm on the list and the incoming request.

プロキシキャッシュがユーザーエージェントと同じ3つのアイテムをキャッシュしたものの、バリアントリストを8000秒前に再検証したため、リストはまだプロキシに対して新しいと仮定します。これは、プロキシがリストおよび着信要求に対してリモートバリアント選択アルゴリズムを実行できることを意味します。

Assume that the remote algorithm is able to choose paper.html.en as the best variant. The proxy can now construct a choice response, using the algorithm in section 10.2. In steps 1 and 2 of the algorithm, the proxy can construct the following conditional request on the best variant, and send it to the origin server:

リモートアルゴリズムが、paper.html.enを最適なバリアントとして選択できると仮定します。プロキシは、セクション10.2のアルゴリズムを使用して、選択応答を構築できます。アルゴリズムのステップ1と2で、プロキシは最適なバリアントに対して次の条件付きリクエストを作成し、それをオリジンサーバーに送信できます。

     GET /paper.html.en HTTP/1.1
     Host: x.org
     User-Agent: WuxtaWeb/2.4
     Negotiate: 1.0
     Accept: text/html, application/postscript;q=0.4, */*
     Accept-Language: en
     If-None-Match: "gonkyyyy", W/"a;b"
     Via: 1.1 fred
        

On receipt of the response

応答を受け取ったら

     HTTP/1.1 304 Not Modified
     Date: Tue, 11 Jun 1996 20:05:31 GMT
     Etag: "gonkyyyy"
        

from the origin server, the proxy can use its freshly revalidated paper.html.en cache entry to expand the response to a non-304 response:

起点サーバーから、プロキシは新しく検証されたpaper.html.enキャッシュエントリを使用して、応答を非304応答に拡張できます。

     HTTP/1.1 200 OK
     Date: Tue, 11 Jun 1996 20:05:31 GMT
     Content-Type: text/html
     Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT
     Content-Length: 5327
     Cache-control: max-age=604800
     Etag: "gonkyyyy"
     Via: 1.1 fred
     Age: 0
        
     <title>A paper about ....
        

Using this 200 response, the proxy can construct a choice response in step 4 of the algorithm:

この200応答を使用して、プロキシはアルゴリズムのステップ4で選択応答を作成できます。

     HTTP/1.1 200 OK
     Date: Tue, 11 Jun 1996 20:05:31 GMT
     TCN: choice
     Content-Type: text/html
     Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT
     Content-Length: 5327
     Cache-control: max-age=604800
     Content-Location: paper.html.en
     Alternates: {"paper.html.en" 0.9 {type text/html} {language en}},
                 {"paper.html.fr" 0.7 {type text/html} {language fr}},
                 {"paper.ps.en"   1.0 {type application/postscript}
                     {language en}}
        
     Etag: "gonkyyyy;1234"
     Vary: negotiate, accept, accept-language
     Expires: Thu, 01 Jan 1980 00:00:00 GMT
     Via: 1.1 fred
     Age: 8000
        
     <title>A paper about ....
        

The choice response can subsequently be shortened to a 304 response, because of the If-None-Match header in the original request from the user agent. Thus, the proxy can finally return

ユーザーエージェントからの元の要求のIf-None-Matchヘッダーのため、選択応答はその後304応答に短縮できます。したがって、プロキシは最終的に返すことができます

     HTTP/1.1 304 Not Modified
     Date: Tue, 11 Jun 1996 20:05:31 GMT
     Etag: "gonkyyyy;1234"
     Content-Location: paper.html.en
     Vary: negotiate, accept, accept-language
     Expires: Thu, 01 Jan 1980 00:00:00 GMT
     Via: 1.1 fred
     Age: 8000
        

to the user agent.

ユーザーエージェントに。

23 Full Copyright Statement

23完全な著作権表示

Copyright (C) The Internet Society (1998). All Rights Reserved.

Copyright(C)The Internet Society(1998)。全著作権所有。

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

このドキュメントとその翻訳はコピーして他のユーザーに提供することができ、コメントまたはその他の方法で説明したり、その実装を支援する二次的著作物は、いかなる種類の制限なしに、全体または一部を準備、コピー、公開、および配布することができますただし、上記の著作権表示とこの段落は、そのようなすべてのコピーと派生物に含まれています。ただし、このドキュメント自体は、著作権に関する通知を削除したり、インターネットソサエティや他のインターネット組織への参照を削除したりするなど、いかなる方法でも変更できません。ただし、インターネット標準を開発する目的で必要な場合は除きます。インターネット標準のプロセスに従うか、または必要に応じて、それを英語以外の言語に翻訳する必要があります。

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

上記で付与された制限付きのアクセス許可は永続的であり、インターネットソサエティまたはその後継者または譲受人によって取り消されることはありません。

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

このドキュメントとここに含まれる情報は「現状有姿」で提供され、インターネット社会およびインターネット技術タスクフォースは、明示または黙示を問わず、ここに記載されている情報の使用が保証するものに限定されない一切の保証を含みません。商品性または特定の目的への適合性に関する権利または黙示の保証を侵害すること。