7

html データ型でクロスドメイン ajax リクエストを作成しています。私が含めているので、それらは問題なく動作します

Access-Control-Allow-Origin

サーバーからの応答で。問題は、サーバーの応答から特定のヘッダーを取得する必要があることです。何をしても、「コンテンツ タイプ」以外の応答ヘッダーは null を返します。

jQuery は要求を実行し、ヘッダーを含む応答を取得します (トラフィックから確認できます) が、解析しません。

使ってみました

crossDomain: true

役に立ちませんでした。サーバーからの応答の例を次に示します。

Access-Control-Allow-Origin:*
Cache-Control:private
Content-Encoding:gzip
Content-Length:514
Content-Type:text/html; charset=utf-8 
X-MYRESPONSEHEADER:1

要求元と応答元のドキュメントが同じサーバー上にある場合

 success: function (data, status, xhr) {
        totalRows = xhr.getResponseHeader("X-MYRESPONSEHEADER");

正常に動作します。$.ajax を次のような変数に割り当てようとしました

var jQxhr = $.ajax(.....

jQueryが実際にリクエストを作成してレスポンスを取得するため、解析されない理由がわかりません

何か案は?何か不足していますか?

更新またはドラゴンのコメント

リクエストに送信されるヘッダー

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-MYRESPONSEHEADER
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
X-MYRESPONSEHEADER: 24
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 29 Feb 2012 11:34:21 GMT

コンテンツの長さ: 514

4

4 に答える 4

2

サーバーの応答に別のCORS固有のヘッダーを追加する必要がありますAccess-Control-Allow-Headers。この場合、

Access-Control-Allow-Headers: X-MYRESPONSEHEADER

参照:https ://developer.mozilla.org/en/http_access_control#Access-Control-Allow-Headers

于 2012-02-28T16:06:40.930 に答える
2

サーバーの応答で content-type 以外のヘッダーを読み取るには、サーバーは次のように指定する必要がありますAccess-Control-Expose-Headers

Access-Control-Expose-Headers: X-MYRESPONSEHEADER 

@dragonの回答ではAccess-Control-Allow-Headers、サーバーにリクエストを送信するときにクライアントが送信できるヘッダーのみを制御するものについて言及しています。

ここの便利な CORS チュートリアル: http://www.html5rocks.com/en/tutorials/cors/

于 2016-03-15T06:54:15.970 に答える
2

aws s3 を使用している場合 (それ以外の場合も該当すると思います)、問題は CORS 構成タグの欠落である可能性があります。行方不明で同様の問題に遭遇しました。完成した構成は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://localhost:3000</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
        <ExposeHeader>*</ExposeHeader>
    </CORSRule>
</CORSConfiguration>

AllowedHeader はAccess-Control-Request-Headersヘッダーを設定し、ExposeHeader はAccess-Control-Expose-Headersヘッダーを設定します。これがないと、ブラウザは JavaScript が返されたヘッダーを使用することを許可しません。

于 2012-10-24T06:14:03.100 に答える
0

これが私のために働いた構成です。私はそれをJava Filter filterメソッドに入れました。一部のヘッダーは、プリフライト リクエスト (method = "OPTIONS") でのみ送信する必要があり、毎回送信する必要はありません。

「Authorization」ヘッダーには、「Access-Control-Allow-Credentials」も必要であることに注意してください。

 HttpServletResponse resp = (HttpServletResponse) res;
 resp.addHeader("Access-Control-Allow-Origin", "http://your_domain:your_port");
 resp.addHeader("Access-Control-Allow-Credentials", "true");
 if (((HttpServletRequest) req).getMethod().equals("OPTIONS")) {
       resp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
      resp.addHeader("Access-Control-Allow-Headers", "Authorization");
      return;
  }
于 2016-09-04T15:33:51.803 に答える