web-dev-qa-db-ja.com

CORSとAccess-Control-Allow-Headersはどのように機能しますか?

Domain.comからa.domain.comにCORSリクエストPOSTを作成しようとしています。

私のjavascriptは次のようになります

$('#fileupload').fileupload({
  xhrFields: {
    withCredentials: true
  },
  dataType: 'json',
  url: $('#fileupload').data('path'),
  singleFileUploads: true,
  add: function(e, data){
    data.submit();
  }
});

最初に、OPTIONSルートが次のように呼び出されるのを確認します。

Request URL: https://a.domain.com/some/route
Request Method:OPTIONS
Status Code:200 OK

オプションのリクエスト:

Access-Control-Request-Headers:Origin, content-type, accept
Access-Control-Request-Method:POST
Host:a.domain.com
Origin:http://domain.com:3000
Referer:http://domain.com:3000/home

オプション応答

Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:POST
Access-Control-Allow-Origin:http://domain.com:3000
Connection:keep-alive
Content-Length:0
Content-Type:text/html;charset=utf-8

その要求は、記載されているように200で返されます。私のサーバーでは、POSTメソッドと同じルートがあり、これはOPTIONSの後に返されるものです

Request URL:https://a.domain.com/some/route

POST REQUEST

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjwr5Pk7WBcfzMdbO
Origin:http://domain.com:3000
Referer:http://domain.com:3000/home

POSTリクエストはキャンセル/失敗します。

私の質問は、POSTコントローラーにもaccess-control-allow-Originが必要ですか?

ドメイン.domain.comを持つリクエスト用のCookieがあります。このCookieはリクエストで一度送信され、現在送信されていません。なぜそうなるのでしょうか?

62
Leo Correa

はい、OPTIONS応答とPOST応答の両方にヘッダーAccess-Control-Allow-Origin: http://domain.com:3000またはAccess-Control-Allow-Origin: *が必要です。 POST応答にもヘッダーAccess-Control-Allow-Credentials: trueを含める必要があります。

OPTIONSレスポンスには、リクエストされたヘッダーに一致するヘッダーAccess-Control-Allow-Headers: Origin, content-type, acceptも含める必要があります。

81
monsur