そのため、Accept
ヘッダーは、ブラウザが探しているリソースのMIMEタイプをサーバーに伝えます。たとえば、サーバーはプレーンテキスト、HTML、JSONなどを送信できます。
OK、それは理にかなっていますが、Content-Type
ヘッダーを見ると、同じことをしているようです。たとえば、テキストまたはJSONが必要であることをサーバーに伝えます。
では、Accept
とContent-Type
HTTPヘッダーの違いは何ですか?
ご指摘のとおり、HTTPクライアントは Accept header を使用して、受け入れるコンテンツタイプをサーバーに通知します。その後、サーバーは応答を送り返します。応答には、返されるコンテンツのコンテンツタイプが実際に何であるかをクライアントに伝える Content-Typeヘッダー が含まれます。
ただし、お気づきかもしれませんが、HTTPリクエスト 含むこともできます Content-Typeヘッダー。どうして?さて、 POST または PUT リクエストについて考えてください。これらの要求タイプでは、クライアントは要求の一部として実際に大量のデータをサーバーに送信し、Content-Typeヘッダーはサーバーにデータが実際に何であるかを伝えます(したがって、サーバーがどのように解析するかを決定します)。
特に、HTMLフォームの送信から生じるPOSTリクエストの場合、リクエストのContent-Typeは(通常)指定された標準の フォームコンテンツタイプ のいずれかです。 <form>
タグのenctype
属性によって:
application/x-www-form-urlencoded
(デフォルト、古い、シンプル、少量のシンプルASCIIテキストのオーバーヘッドがわずかに少ない、ファイルアップロードサポートなし)multipart/form-data
(新しい、ファイルのアップロードのサポートを追加し、大量のバイナリデータまたは非ASCIIテキストにより効率的)受け入れるのは
ここに私のリクエストがあり、このレスポンス形式を(受け入れたい)
コンテンツタイプは
これが私の要求(または応答)であり、これ(Content-Type)は私の要求(または応答)で送信するコンテンツの形式です
これは要求と応答の会話なので、クライアント
Accept request HTTPヘッダーは、MIMEタイプとして表現される、クライアントが理解できるコンテンツタイプをアドバタイズします。サーバーは、コンテンツネゴシエーションを使用して、提案の1つを選択し、それを使用して、Content-Type応答ヘッダーでその選択をクライアントに通知します。ブラウザーは、要求が行われるコンテキストに応じてこのヘッダーに適切な値を設定します。CSSスタイルシートを取得する場合、画像、ビデオ、またはスクリプトを取得する場合とは異なる値が要求に設定されます。
Content-Typeエンティティヘッダーは、リソースのメディアタイプを示すために使用されます。
応答では、Content-Typeヘッダーは、返されたコンテンツのコンテンツタイプが実際に何であるかをクライアントに伝えます。ブラウザーは、場合によってはMIMEスニッフィングを行い、必ずしもこのヘッダーの値に従うとは限りません。この動作を防ぐために、ヘッダーX-Content-Type-Optionsをnosniffに設定できます。
リクエストでは(POSTやPUTなど)、クライアントは実際に送信されるデータのタイプをサーバーに伝えます。