web-dev-qa-db-ja.com

HTTP GETリクエストにはcontent-typeヘッダーが必要ですか?

私の知る限り、コンテンツタイプを設定する場所は2つあります。

  1. クライアントは、サーバーに送信する本文のコンテンツタイプを設定します(例:投稿用)
  2. サーバーは、応答のコンテンツタイプを設定します。

これは、すべてのget要求(クライアント側)に対してコンテンツタイプを設定する必要がない、または設定すべきではないことを意味します。そして、もし私がそうすることができるか、またはそうすべきであるならば、それはどんなコンテンツタイプでしょうか?

また、クライアントのコンテンツタイプによって、クライアントが受信したいコンテンツのタイプが指定されることをいくつかの投稿で読みました。だから多分私のポイント1は間違っていますか?

131
Martin Flucka

RFC 7231セクション3.1.5.5 によると:

ペイロード本文を含むメッセージを生成する送信者囲まれた表現の目的のメディアタイプが送信者に不明な場合を除き、そのメッセージで[Content-Typeヘッダーフィールドを生成する必要があります]。 If Content-Typeヘッダーフィールドが存在しない場合、受信者は「application/octet-stream」のメディアタイプを想定することができます( [RFC2046]、セクション4.5.1 )またはデータを調べて、そのタイプを判別します。

つまり、Content-Type HTTPヘッダーは、PUTおよびPOST要求に対してのみ設定する必要があります。

87
Epoc

Getリクエストにはリクエストエンティティ(つまり、本文)がないため、コンテンツタイプを使用しないでください。

62
Dmitry Negoda

GETリクエストには、クライアントが理解するコンテンツの種類を示す「Accept」ヘッダーを含めることができます。サーバーはそれを使用して、どのコンテンツタイプを送り返すかを決定できます。

ただし、これらはオプションです。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1

32
Matthew Wilson

受け入れられた答えは間違っています。引用符は正しく、PUTおよびPOSTに含める必要があるという主張は誤りです。 PUTまたはPOSTが実際に追加のコンテンツを持っている必要はありません。実際にコンテンツを取得するGETに対する禁止事項もありません。

RFCは、その意味を正確に述べています.. IFF your side(clientOROrigin server)送信する追加コンテンツは、HTTPヘッダーを超えて、SHOULD Content-Typeヘッダーを指定します。ただし、Content-Typeを省略し、コンテンツを含めることは許可されていることに注意してください(たとえば、Content-Lengthヘッダーを使用して)。

23
user4157069