私は簡単なクロスオリジンリクエストをしようとしています、そしてFirefoxはこのエラーでそれを一貫してブロックしています:
クロスオリジン要求がブロックされました:同じオリジンポリシーは[url]でのリモートリソースの読み取りを許可しません。これは、リソースを同じドメインに移動するかCORSを有効にすることで解決できます。 [URL]
ChromeとSafariでは問題なく動作します。
私が言うことができる限り、私はこれが機能することを可能にするために私のPHPにすべての正しいヘッダーを設定しました。これは私のサーバーが応答しているものです
HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
私はAngular、jQuery、そして基本的なXMLHTTPRequestオブジェクトを使ってみました。
var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
...そしてFirefox以外のすべてのブラウザで動作します。誰もがこれを手伝ってくれる?
これはCORSとは関係がないことがわかりました。セキュリティ証明書に問題がありました。誤解を招くエラー= 4時間の頭痛。
私の問題は、私がクロスリクエストを送信したサーバーに、信頼できない証明書があることであることがわかりました。
https
を使用してクロスドメインに接続したい場合は、まずこの証明書に例外を追加する必要があります。
これを行うには、ブロックされたリンクに1回アクセスして例外を追加します。
2日後に解決策が見つかりました:(。
重要な注意:認証された要求に応答するとき、サーバーはドメインを指定しなければならず、ワイルドカードを使用することはできません。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
警告の言葉。私はついにFirefoxとCORSの問題を回避しました。
私にとっての解決策はこの投稿でした
すべてを許可する正しい応答ヘッダーを使用したApacheでのCORS(クロスオリジンリソース共有)の設定| Benjamin Horn
ただし、Firefoxは、Apacheサーバー(.htaccessフォルダー内)でこれらのヘッダーを設定した後、本当に奇妙な動作をしていました。
何が起こっているのかを見るために、多くのconsole.log("Hi FF, you are here A")
などを追加しました。
最初はxhr.send()
でハングしたように見えました。しかし、その後、私はそれがこの声明に到達しなかったことを発見しました。直前に別のconsole.log
を配置し、そこに到達しませんでした-最後のconsole.log
と新しいものの間に何もありませんでした。 2つのconsole.log
の間で停止しました。
行を並べ替え、削除し、ファイルに奇妙な文字が含まれていないかどうかを確認します。何も見つかりませんでした。
Firefoxを再起動すると問題が解決しました。
はい、バグを報告する必要があります。それはとても奇妙だから、それを再現する方法がわからない。
注意:そして、ああ、私はHeader always set
の部分ではなく、Rewrite*
の部分だけをしました!
追加するだけ
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
接続しようとしているWebサイトのルートにある.htaccess
ファイルにアクセスします。
Firefoxでのリクエストがメッセージでブロックされていることがわかったため、この質問に出会いました。
理由:CORSリクエストが成功しませんでした
髪を抜いた後、新しくインストールされたFirefox拡張機能であるPrivacy Badgerがリクエストをブロックしていることがわかりました。
頭をかいてからこの質問に出くわした場合は、インストールされている拡張機能を確認して、それらの拡張機能のいずれかが要求をブロックしているかどうかを確認してください。
詳細については、MDNの 理由:CORS要求が成功しませんでした を参照してください。
デバッグするには、可能であればサーバーログを確認してください。 Firefoxはさまざまな理由でコンソールにCORSエラーを返します。
その理由の1つは、uMatrix(そして私はNoScriptやそれに似たものだと思う)プラグインでもあります。
これを試して、それはあなたの問題を解決するはずです
Config.phpのdomain.comにwww preを追加します。例えば:
HTTP define('HTTP_SERVER', 'http://domain name with www/');
HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
これをあなたの.htaccessファイルに追加してください。
RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]
私は同様の問題に直面しました、そして私はそれを修正した方法で登録されていることが有効であると思います:
私は基本的にSymfony 3の上に構築されたシステムを持っています。自己学習とパフォーマンスの目的のために、私はGoLangを使ってスクリプトを書くことを決めました。
My Go APIはJson形式のパラメータを期待し、またJson形式の応答を返します
私が使っているGoApiのものを呼ぶために、たいていの場合、$。ajax(jQuery)最初のテストは詐欺でした:(未)有名な "Cross-Origin Request Blocked"ポップアップ!それから、私は "Access-Control-Allow-Origin:*"をApacheのconf、htaccess、php、javascriptなどで設定してみました。
しかし、でも、同じイライラするエラー!
解決策は簡単でした:私は "GET"の代わりに "POST"リクエストをしなければなりませんでした。
そのためには、GoLangとJavaScriptの両方を調整してGETを使用する必要がありました。それが完了したら、もうクロスオリジン要求が私のためにブロックされたことはありません!
それが役に立てば幸い
シモンズ:
私は持っているディレクトリブロックで、私はApacheとVhostを使っています
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
覚えておいてください: "*"はあなたが誰かからの要求を受け入れることを意味します!!! (これはセキュリティの欠如かもしれません)私の場合は大丈夫です、なぜならそれは公のAPIになるからです
PS2:私のヘッダ
応答ヘッダー
Access-Control-Allow-Credentials true
Access-Control-Allow-Headers Authorization
Access-Control-Allow-Methods GET, POST, PUT
Access-Control-Allow-Origin http://localhost
Content-Length 164
Content-Type application/json; charset=UTF-8
Date Tue, 07 May 2019 20:33:52 GMT
リクエストヘッダ(469 B)
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
Content-Length 81
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host localhost:9003
Origin http://localhost
Referer http://localhost/fibootkt/MY_app_dev.php/MyTest/GoAPI
User-Agent Mozilla/5.0 (Macintosh; Intel …) Gecko/20100101 Firefox/66.0
私にとっては、Access-Control-Allow-Origin
レスポンスヘッダを特定の(そして正しい)Host.com
に設定していましたが、代わりにhttp://Host.com
として返さなければなりませんでした。 Firefoxは何をするのですか?それは静かにGETリクエストを飲み込み、警告を出力せずにXHRにステータス0を返しますが、他の同様の失敗では少なくとも何かを言います。あいあい。
後世のために、また要求されているリソースが200を返しているかどうか見るためにサーバーログをチェックしてください。
フライト前のAjaxリクエストで適切なヘッダがすべて返されるという同様の問題に遭遇しましたが、ブラウザは実際のリクエストが不正なCORSヘッダのためにブロックされていると報告しました。
結局のところ、要求されたページは不正なコードが原因で500エラーを返していましたが、それはCORSを介して取得された場合に限られます。ブラウザ(ChromeとFirefoxの両方)が、ページが500を返したのではなく、Access-Control-Allow-Originヘッダがないと誤って報告していました。
あなたが「本物の」証明書を持っていない(そしてそれ故に自己署名証明書を使う)なら、FireFoxであなたは以下に行くことができる
オプション>プライバシーとセキュリティ>(一番下までスクロールします)証明書の表示>例外の追加をクリックします。
そこに、場所を記入してください、例えば:https://wwww.myserver:myport