[2] [CODE(HTTP)@en[[[Prefer:]]]] [[ヘッダー]]の[[好み字句]]
[DFN[[CODE(HTTP)@en[[[return]]]]]] は、[[応答]]で返すべき[[表現]]の種類を表すものです。

* 仕様書

[REFS[
- [1] '''[CITE@en[RFC 7240 - Prefer Header for HTTP]] ([TIME[2014-07-26 04:24:01 +09:00]] 版) <https://tools.ietf.org/html/rfc7240#section-4.2>'''
- [15] [CITE@en[Linked Data Platform 1.0]] ([TIME[2014-10-27 09:56:06 +09:00]] 版) <https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp.html#prefer-parameters>
]REFS]

* 意味

[5] [[鯖]]は [CODE(HTTP)@en[[[POST]]]] や [CODE(HTTP)@en[[[PUT]]]] のような変更の[[要求]]を処理して成功した後に、
操作の状態を説明した[[表現]]を返すこともできますし、
変更後の[[資源]]自体の[[表現]]を返すこともできます。
どちらにするかは[[鯖]]が決めることですが、 [CODE(HTTP)@en[[[return]]]]
を指定することで[[クライアント]]の希望を伝えることができます。[SRC[>>1]]

* 構文

[3] [CODE(HTTP)@en[[[return]]]] には値が必要です。値には次のものがあります。
[FIG(short list)[
- [CODE(HTTP)@en[[[representation]]]]
- [CODE(HTTP)@en[[[minimal]]]]
- [CODE(HTTP)@en[[[secure-representation]]]]
- [CODE(HTTP)@en[[[return-no-content]]]]
- [CODE(HTTP)@en[[[return-content]]]]
]FIG]

[7] 値は[[大文字・小文字不区別]]です [SRC[>>1]]。

* 引数

[16] [[RFC]] では[[引数]]は定義されていませんが、 [[LDP]] が2つの[[引数]]を追加しています
[SRC[>>15]]。

[FIG(short list)[
- [CODE(HTTP)@en[[[include]]]]
- [CODE(HTTP)@en[[[omit]]]]
]FIG]

[17] どちらも値は [[URL]] のリストとなっています [SRC[>>15]]。

;; [18] しかし [[LDP]] 以外で使えなそうな[[引数]]を一般的な名前で追加しちゃって好き放題ですね... 他ではそうそう使われないでしょうから、現実的には衝突の虞もないでしょうが...

* 処理モデル

[6] [CODE(HTTP)@en[[[Prefer:]] [[return]]]] に対応する[[起源鯖]]は、
指定された値に従って[[応答]]をどのような内容にするか決定することになります。

[8] [CODE(HTTP)@en[[[return]]=[[minmal]]]] と [CODE(HTTP)@en[[[return]]=[[representation]]]]
は排他的で、両方が適用できる場面はないはずです。両方が指定された場合、
両方共指定されなかったものとして処理することができます。 [SRC[>>1]]

;; [9] これは [CODE(HTTP)@en[[[Prefer:]]]] [[ヘッダー]]全体の処理モデル、
すなわち同じ[[好み字句]]が複数指定された場合に最初のもの以外は無視される、
というものと矛盾するようですが・・・。

[4] どちらを採用したかは、[[応答]]の [CODE(HTTP)@en[[[Preference-Applied:]]]]
[[ヘッダー]]で明示できます。

* 歴史

[12] [[Microsoft]] の [[OData]] は [CODE(HTTP)@en[[[return=minimal]]]] ではなく
[DFN[[CODE(HTTP)@en[[[return-no-content]]]]]]、
[CODE(HTTP)@en[[[return=representation]]]] ではなく
[DFN[[CODE(HTTP)@en[[[return-content]]]]]] を使っています。

;; [13] こちらの方がよりわかりやすい名前ですね。

[14] [[OASIS]] の [[OData]] 仕様は [[RFC]] の [CODE(HTTP)@en[[[return]]]]
を採用しています [SRC[>>10]]。

[REFS[
- [11] [CITE@en[2.2.5.9 Prefer]] ([TIME[2014-10-27 09:40:54 +09:00]] 版) <http://msdn.microsoft.com/en-us/library/hh537533.aspx>
- [10] [CITE[OData Version 4.0 Part 1: Protocol Plus Errata 01]]
( ([TIME[2014-09-04 16:00:00 +09:00]] 版))
<http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html#_Toc370374818>
]REFS]

[19] [CITE@en[draft-murchison-webdav-prefer-07 - Use of the Prefer Header Field in Web Distributed Authoring and Versioning (WebDAV)]]
( ([TIME[2014-10-16 14:20:11 +09:00]] 版))
<http://tools.ietf.org/html/draft-murchison-webdav-prefer-07>

[20] [CITE@en[draft-daboo-caldav-attachments-03 - CalDAV Managed Attachments]]
( ([TIME[2014-10-16 11:57:42 +09:00]] 版))
<http://tools.ietf.org/html/draft-daboo-caldav-attachments-03>