5

Web サイトからサードパーティのドメイン/サーバーへの Web サービス呼び出しを行う必要があります。content-type:text/plain の Post メソッドで jQuery Ajax を使用してこの呼び出しを行っていますが、正常に動作しています。

しかし、私は content-type: text/xml に変更していますが、それは投げています:

プリフライト要求への応答がアクセス制御チェックに合格しません: 要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません。

サードパーティのサーバーに設定して、当社のウェブサイトへのアクセスを許可します。そして、content-type:text/plain で呼び出しを行っているときに、このヘッダーを取得しています。

また、サードパーティのサーバーに以下を追加しました。

Access-Control-Allow-Methods : Get , Post , Options ,PUT

Access-Control-Allow-Headers: Authorization,origin, content-type, accept

プリフライト リクエストが応答で「Access-Control-Allow-Origin」を取得しない理由を教えてください。

4

2 に答える 2

1

スクリプトが text/plain で機能する理由は、それが単純な要求であるためです。この回答を見ると、テキスト/プレーン リクエストが単純なリクエストの要件を満たしていることがわかります。ただし、コンテンツ タイプを text/xml に変更すると、「単純でない」リクエストに変更されます。

「単純ではない」リクエストを機能させるには、プリフライト リクエストの作成方法を確認する必要があります。この Web サイトでは、「それほど単純ではないリクエストの処理」でその方法を説明しています。

アップデート

注意:Access-Control-Allow-Methodsはキャストに依存し (すべて大文字)、単純な要求 (GET、HEAD、POST) に使用されるメソッドをリストする必要はありません。-ソース

Access-Control-Allow-Methods: OPTIONS, PUT
Access-Control-Allow-Headers: Authorization, Origin, Content-Type, Accept

Firefox は、同じオリジンのリクエストに Origin ヘッダーを含めません。ただし、Chrome と Safari には、同じオリジンの POST/PUT/DELETE リクエストに Origin ヘッダーが含まれています (同じオリジンの GET リクエストには Origin ヘッダーがありません)。

元が同じという可能性はありますか?

キャッシュに問題がある可能性はありますか?

jquery ajax 呼び出しに次の設定があることを確認してください。

crossDomain: true // Will force a cross domain request
cache: false
于 2016-04-04T16:34:28.303 に答える
0

との違いはcontent-type:text/plaincontent-type: text/xml「text/xml」には「preflight」が必要ですが、「text/plain」には必要ありません。

MDNから:

特に、次の場合、リクエストはプリフライトされます。

GET、HEAD、または POST 以外のメソッドを使用します。また、POST を使用して、application/x-www-form-urlencoded、multipart/form-data、または text/plain 以外の Content-Type を持つリクエスト データを送信する場合 (たとえば、POST リクエストが XML ペイロードをサーバーに送信する場合) application/xml または text/xml を使用すると、リクエストがプリフライトされます。

これらがプリフライト リクエストの失敗を引き起こす可能性があるいくつかの潜在的な理由:

  1. CORS がサーバーによって有効にされていません。サーバー テクノロジで CORS を有効にする方法を検索します。
  2. サーバーは「text/plain」以外のリクエストを消費しません。例えば; Spring には、受け入れ可能な content-type を定義する消費オプションがあります。
  3. 投稿に「Authorization」ヘッダーがあります。認証情報を含むリクエストを送信する場合は、Access-Control-Allow-Credentials: trueヘッダーも追加する必要があります。再びMDNから。
于 2016-04-10T21:13:12.547 に答える