17

リクエストのOriginヘッダーの内容をコピーするAccess-Control-Allow-Originヘッダーを使用して、HTTPOPTIONSメソッドへの応答を提供しようとしています。

私が理解できない理由で、これは明らかに機能していません。

tl; dr: OPTIONSからの応答によると:

Access-Control-Allow-Origin: http://10.0.0.105:9294

後続のGETには次のものがあります。

Origin:http://10.0.0.105:9294

Chromeは言う:

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin

WTFではありませんか?

より詳しく...

Chromeの開発者ツールウィンドウを見ると、リクエストヘッダーは次のとおりです。

OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

応答ヘッダーは次のとおりです。

HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8

jQueryがOPTIONSリクエストを送信し、上記のレスポンスを取得した後、2つの奇妙なことが起こります。OPTIONS応答(200)は、開発者コンソールにエラーとして表示されます。

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK)

その後、GETリクエストは拒否されます。コンソールのエラー:

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin.

理由がわかりません。私は何が間違っているのですか?

4

2 に答える 2

31

わかりました、私はそれを手に入れたと思います。飛行前の OPTIONS リクエストを適切に処理する必要があるようですが、クロスサイト リソース リクエストが機能するには十分ではありません。

OPTIONS リクエストが満足のいくヘッダーで戻ってきた後、同じ URL への後続のリクエストに対するすべてのレスポンスにも必要な「Access-Control-Allow-Origin」ヘッダーが必要です。デバッガー ウィンドウに表示されます。

そのため、OPTIONS 応答に何らかの問題があるためにブラウザがリクエストをキャンセルしたように見えますが、実際には、ブラウザは実際のリクエストからのレスポンス ヘッダーを見て、それらを拒否しています。

于 2012-08-14T11:42:17.960 に答える
0

Access-Control-Allow-Methodsヘッダーも追加する必要がありますAccess-Control-Allow-Origin

ワイルドカードの場合、ヘッダーの下に追加にアクセスします

   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

特定のオリジンを許可するには、* の代わりにそれを追加します。

于 2021-08-22T11:22:04.937 に答える