129

Chrome を使用してクロス ドメイン CORS リクエストを正しく機能させるのに問題があります。

リクエスト ヘッダー:

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4

応答ヘッダー:

Access-Control-Allow-Headers:*
Access-Control-Allow-Origin:*
Allow:GET, POST, OPTIONS
Content-Length:0
Date:Tue, 30 Oct 2012 20:04:28 GMT
Server:BaseHTTP/0.3 Python/2.7.3

エラー:

XMLHttpRequest cannot load domain. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.

また、オプション リクエストを処理する Python コードは次のとおりです。

self.send_response(200)
self.send_header('Allow', 'GET, POST, OPTIONS')
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Headers', '*')
self.send_header('Content-Length', '0')
self.end_headers()

Access-Control-Allow-Originワイルドカードが無視されているようですか?

4

6 に答える 6

191

Access-Control-Allow-Headersヘッダーでのワイルドカードのサポートが Living Standard に追加されたのは2016 年 5 月だけなので、すべてのブラウザーでサポートされているわけではありません。これをまだ実装していないブラウザーでは、完全に一致する必要があります: https://www.w3.org/TR/2014/REC-cors-20140116/#access-control-allow-headers-response-header

多数のヘッダーが予想される場合は、ヘッダーの値を読み取り、その値をAccess-Control-Request-Headersヘッダーにエコー バックできますAccess-Control-Allow-Headers

于 2012-10-30T21:03:41.570 に答える
1

モンスールより引用

Access-Control-Allow-Headers ヘッダーではワイルドカードを使用できません。完全に一致する必要があります: http://www.w3.org/TR/cors/#access-control-allow-headers-response-header

これが私のphpソリューションです。

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  header('Access-Control-Allow-Headers: ' . 
  $_SERVER['HTTP_ACCESS_CONTROL_ALLOW_HEADERS']);
}
于 2015-05-27T08:03:53.483 に答える