3

ご挨拶、

Safari のアプリケーションにCORS ( http://www.w3.org/TR/2009/WD-cors-20090317/#access-control-allow-methods-header ) を使用しようとしています。 XMLHTTPRequest からの応答ヘッダー、Content-Type のみを受け取ります。他の非常に標準的なヘッダーはどれも通過せず、これを機能させる方法がわかりません。

この問題を解決する方法を知っている人はいますか? これは WebKit のバグでしょうか?

編集

nGinxで使用する構成は次のとおりです。

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers Cache-Control,Pragma,Date;
add_header Access-Control-Allow-Methods GET,POST;
4

4 に答える 4

1

Access-Control-Expose-Headersヘッダーを JS に公開するには、ヘッダーを、公開するヘッダーのコンマ区切りリストに設定する必要があります。

残念ながら、このヘッダーは十分にサポートされていません。Mozilla は Firefox 4 でのみ実装しており、現時点では Webkit はまだ実装していません。IE8以降についてはわかりません(Googleは有用なものを何も見つけられませんでした。自分でテストするためにそれらを持っていません)。

(例えば、XMLHttpRequest の getResponseHeader()? の制限も参照してください)

于 2011-10-05T14:15:58.503 に答える
0

私も昨日同じ状況になりました。https://stackoverflow.com/users/713326/gijsで正しい答えが得られましたが、注意が必要な nginx 固有の別の部分があります。「ヘッダーの追加」は、サービスからの応答が成功した場合 (200、204、301、302、または 304) でのみ機能します。HttpHeadersMoreModule ( http://wiki.nginx.org/HttpHeadersMoreModule ) を含めるには、nginx のカスタム ビルドを行う必要があります。add_header を more_set_headers に置き換える必要がある場合。

例:

    more_set_headers 'Access-Control-Allow-Origin: $http_origin';
    more_set_headers 'Access-Control-Allow-Credentials: false';
    more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, HEAD, PUT, PATCH, DELETE';
    more_set_headers 'Access-Control-Allow-Headers:Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept,Authorization;
    more_set_headers 'Access-Control-Expose-Headers: Location';
于 2013-02-02T04:56:13.197 に答える
0

リクエスト:

$.ajax({
            url: "http://localhost:8079/students/add/",
            type: "POST",
            crossDomain: true,
            data: JSON.stringify(somejson),
            dataType: "json",
            success: function (response) {
                var resp = JSON.parse(response)
                alert(resp.status);
            },
            error: function (xhr, status) {
                alert("error");
            }
        });

応答:

response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")

return response
于 2013-12-30T10:49:22.780 に答える
0

サーバーが実際に Cache-Control、Pragma、および Date ヘッダーを発行していることを確認しましたか? おそらく、クライアントで Wireshark トレースをセットアップして、交換されている実際の HTTP ヘッダーを確認しますか?

于 2011-01-22T16:25:11.407 に答える