267

JQuery およびその他のフレームワークは、次のヘッダーを追加します。

X-Requested-With: XMLHttpRequest

なぜこれが必要なのですか?サーバーが AJAX リクエストを通常のリクエストとは異なる方法で処理する必要があるのはなぜですか?

更新: このヘッダーを使用した実際の例を見つけました: https://core.spreedly.com/manual/payment-methods/adding-with-js。支払い処理業者が AJAX なしで要求された場合、処理が完了すると元の Web サイトにリダイレクトされます。AJAX で要求された場合、リダイレクトは行われません。

4

3 に答える 3

33

SilverlightFox の回答を必ずお読みください。それは、より重要な理由を強調しています。

その理由は主に、リクエストのソースがわかっている場合は、それを少しカスタマイズしたい場合があるためです。

たとえば、多くのレシピを掲載している Web サイトがあるとします。また、カスタム jQuery フレームワークを使用して、クリックしたリンクに基づいてレシピをコンテナーにスライドさせます。リンクはwww.example.com/recipe/apple_pie

通常は、ページ全体、ヘッダー、フッター、レシピ コンテンツ、および広告が返されます。しかし、誰かがあなたの Web サイトを閲覧している場合、それらのパーツの一部は既に読み込まれています。したがって、AJAX を使用してユーザーが選択したレシピを取得できますが、時間と帯域幅を節約するために、ヘッダー/フッター/広告を読み込まないでください。

これで、次のようなデータのセカンダリ エンドポイントを作成できますがwww.example.com/recipe_only/apple_pie、それを維持して他の人と共有するのは難しくなります。

しかし、リクエストを作成してデータの一部のみを返す ajax リクエストであることを検出する方が簡単です。こうすることで、ユーザーが無駄にする帯域幅が減り、サイトの応答性が向上します。

どのリクエストが ajax でどのリクエストがそうでないかを追跡することが役立つ場合があるため、フレームワークはヘッダーを追加するだけです。しかし、そのような手法を使用するかどうかは、開発者に完全に依存しています。

実際、Accept-Languageヘッダーに似ています。ブラウザーは、URL に /ru/ などを挿入することなく、この Web サイトのロシア語版を表示してくださいという Web サイトを要求できます。

于 2013-07-04T22:48:41.793 に答える
13

一部のフレームワークは、このヘッダーを使用して xhr リクエストを検出しています。たとえば、grails spring security はこのヘッダーを使用して xhr リクエストを識別し、json レスポンスまたは html レスポンスをレスポンスとして提供しています。

ほとんどの Ajax ライブラリ (v2.1 の Prototype、JQuery、および Dojo) には、通常のハイパーリンクまたはフォーム送信ボタンをクリックしてトリガーされるのではなく、XMLHttpRequest によって要求が行われたことを示す X-Requested-With ヘッダーが含まれています。

ソース: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html

于 2015-01-28T09:00:02.440 に答える