17

次の手順に従いました。

  1. クロスドメイン呼び出しを許可するようにサーバーを取得します(すべてのヘッダーなどを使用)これは機能します
  2. いくつかのクロスドメイン呼び出しでサーバーをテストしますこれは機能します
  3. サーバーに証明書を強制するように取得します これは機能します
  4. ブラウザでサーバー上のファイルにアクセスし、適切な証明書を選択して、ファイルを確認します
  5. クロスドメイン呼び出しを証明書と組み合わせる<-- これは機能しません

問題

ブラウザから証明書要求を取得していますが、ブラウザを使用するときと同じ証明書を選択すると、呼び出しは行われますが、403 Forbidden が返されます。

コード

$.ajax({
     type: "POST",
     xhrFields: {withCredentials: true},
     dataType: "xml",
     contentType: "text/xml; charset=\"utf-8\"",
     url: "https://www.myOtherServer.com/testfile.asp",
});

何か案は?

編集

とが正しく設定されている Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin

追加情報

コンテンツタイプと関係があると思い始めています。に変更すると"text/html"エラー415が発生しますが、SOAP サーバーであるため xml を送信する必要があります。

応答ヘッダー

Access-Control-Allow-Cred...    true
Access-Control-Allow-Head...    Content-Type, Origin, Man, Messagetype, Soapaction, X-Test-Header
Access-Control-Allow-Meth...    GET,POST,HEAD,DELETE,PUT,OPTIONS
Access-Control-Allow-Orig...    https://www.mywebsite.com
Access-Control-Max-Age  1800
Cache-Control   private
Content-Length  5561
Content-Type    text/html; charset=utf-8
Date    Wed, 19 Dec 2012 15:06:46 GMT
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET

リクエストヘッダー

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language nl,en-us;q=0.7,en;q=0.3
Access-Control-Request-He...    content-type
Access-Control-Request-Me...    POST
Cache-Control   no-cache
Connection  keep-alive
Host    myhoast.com
Origin  https://www.mywebsite.com
Pragma  no-cache
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
4

2 に答える 2

10

私の推測では、これはJavascriptではなく、CORS構成の問題です。Access-Control-Allow-Credentials: trueヘッダーを使用してサーバーをセットアップしましたか?http://www.w3.org/TR/cors/#access-control-allow-credentials-response-header

また、allow-credentialsヘッダーが設定されている場合でも、Access-Control-Allow-Origin次のドキュメントによると、ブラウザは*の場合、資格のあるリクエストへの応答を許可しないことに注意してください:https ://developer.mozilla.org/en-US/docs/HTTP/ Access_control_CORS?redirectlocale = en-US&redirectslug = HTTP_access_control#Requests_with_credentials

編集:OPにはCORSヘッダーが適切に設定されているため、サーバーが403ステータスコードのOPTIONSリクエストを拒否していることが問題のようです。OPTIONSリクエスト(「プリフライトリクエスト」と呼ばれます)は、特定のクロスドメインリクエスト(application / xmlコンテンツタイプのPOSTなど)の前に送信され、サーバーが許可されているリクエストのタイプをブラウザに通知できるようにします。ブラウザはOPTIONSリクエストから期待される200の応答を認識しないため、実際のP​​OSTリクエストは発生しません。

于 2012-12-19T14:34:41.120 に答える
1

基本的にはhtaccessに書き込むだけです

Header set Access-Control-Allow-Origin “*”

ただし、Cookie などが必要な場合は、ajax コードと htaccess にスクリプトを追加する必要がありました

私のブログblog.imammubin.com/cross-domain-xhr/2014/05/28/でクロスドメイン XHR について書いています(編集: サイトはもう存在しません)

この助けを願っています..

于 2014-05-28T17:18:13.690 に答える