ヘッダーにもかかわらずFirefoxの「クロスオリジン要求がブロックされました」


119

単純なクロスオリジンリクエストを作成しようとしていますが、Firefoxは常に次のエラーでブロックしています。

Cross-Origin Request Blocked:Same Origin Policyは、[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を除くすべてのブラウザで動作します。誰かがこれを手伝ってくれる?


すべてのリクエストとレスポンスの完全なトレースを提供できますか?または、少なくともテストサイトを提供しますか?Webサイトがリモートオリジンhttp、https、ファイルにアクセスしている場合 mozSystemは、Firefox-osアプリをパッケージ化しただけの通常のWebサイトではサポートされていないため、そのオプションをドロップします。
nmaier 2014年

1
GETではなくPOSTとして送信するときの@nmaierヘッダー: Accept application/json, text/plain, */* Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Content-Length 35 Content-Type application/x-www-form-urlencoded; charset=UTF-8 Host [url] Origin [url] Referer [referrer url] User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0 エラー: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [url]. This can be fixed by moving the resource to the same domain or enabling CORS. [url]
Godwhacker

2
@nmaier実際、これは私がアクセスしているサイトのセキュリティ証明書に何らかの問題があるようです。Firefoxが誤ったエラーを出しているだけです。例外のリストにサイトを追加すると、正常に機能します。
Godwhacker 2014年

回答:


121

これはCORSとは関係がないことが判明しました。これはセキュリティ証明書の問題でした。誤解を招くエラー= 4時間の頭痛。


3
ちょうどこの正確な問題がありました。エラーは一般的すぎて、ChromeとFirefoxは異なる証明書ストアを使用しているため、デバッグが困難です。私のプロキシがOPTIONSリクエストをキャプチャしなかったとき(SSLハンドシェイクで壊れていた)と思ったはずです。
Daniel Correia 14年

4
ゴッドハッカー、私はおそらく同じ問題に直面しています。それがセキュリティ証明書であることをどのようにして知りましたか?これはどこにありますか?
Leo

9
私の場合、内部で署名された証明書を使用して、別のサーバーを呼び出す角度のあるアプリを使用していました。ただし、Firefoxは公的機関によって認識されないため、証明書を自動的に信頼しません。したがって、この問題が解決する前に、両方のサーバーの証明書がFirefoxの例外として追加されていることを確認する必要がありました。
Sam Storie 2015年

3
私にとっての修正はwithCredentials=true、XHRインスタンスに設定することでした。それ以外の場合、Firefoxはリクエスト時にクライアント証明書を使用できませんでした(ただし、Chromeでは問題なく動作しました)。
クリントハリス

1
@SamStorieのコメントは、この回答よりも回答のように聞こえます。ありがとう
ナガ

26

私の問題は、クロスリクエストを送信したサーバーが、信頼されていない証明書を持っていることでした。

を使用してクロスドメインに接続するhttps場合は、最初にこの証明書の例外を追加する必要があります。

これを行うには、ブロックされたリンクに一度アクセスして、例外を追加します。


5
それはあなたのサイトを訪問し、特にヘルプ誰もが、あなたがいる幸せがあると言っにメッセージを入れない限り、「Firefoxを使用している場合、このサイトにアクセスして、例外のリストに追加してください」しない
Godwhacker

@ Cracker0dks「ブロックされたリンクに一度アクセスして例外を追加してください」例外を追加する場所について詳しく説明してください。Firefox Quantumを使用しています。TIA
ポール・

1
あなたはFirefoxが悲惨に不平を言っているリンクにサーフィンします。次に、証明書の警告が表示されます。証明書を許可します。もう一度プライマリサイトにアクセスします。
Cracker0dks

26

Firefoxでのリクエストが次のメッセージでブロックされているのを発見したので、この質問に遭遇しました:

理由:CORSリクエストが成功しなかった

髪の毛を抜いた後、新しくインストールされたFirefox拡張機能であるプライバシーバッジがリクエストをブロックしていることがわかりました。

頭をひっかいた後でこの質問にたどり着いた場合は、インストールした拡張機能をチェックして、それらのいずれかがリクエストをブロックしていないか確認してください。

詳しくは、理由:CORSリクエストが MDNで成功なかったをご覧ください。


どの拡張機能がリクエストをブロックしているのか、どのようにしてわかりましたか?リクエストが新しいプロファイル(
つまり

1
各拡張機能をクリックして、問題が発生していた特定のサイトのコンテンツのブロックについて言及がないか確認しました。Ghosteryにエントリがあったため、サイトを信頼できるものとしてマークし、ページをリロードし、リクエストは成功しました。
プログラミングの教授

1
ありがとうございました!すべての拡張機能の権限の概要を示す拡張機能Project Insightも発見しました。addons.mozilla.org/en-US/firefox/addon/project-insight
CiprianTomoiagă19年

1
@awendt Oof。私にとってもプライバシーバッジ。ありがとう。
ジェイソンリーチ


12

「実際の」証明書がない場合(したがって、自己署名証明書を使用している場合)、FireFoxで次の場所に移動できます。

Options > Privacy & Security > (scroll to the bottom) View Certificates > Add Exception.

そこで、場所を入力します。例:https://wwww.myserver:myport


これは、CORSがFirefoxを除く他のすべてのブラウザーでエラー->クロスオリジン要求のブロック:同じホストポリシーがlocalhost:44304 / v1 / searchのリモートリソースの読み取りを許可しない場合に機能しました。(理由:CORSリクエストが成功しなかった)。
JGilmartin

5

警告の一言。私はついにFirefoxとCORSの問題を回避しました。

私のための解決策はこの投稿でした

正しい応答ヘッダーを使用してApacheにCORS(クロスオリジンリソースシェアリング)を設定すると、すべてを通過できます。ベンジャミンホーン

ただし、Apacheサーバー(.htaccessフォルダー内)でこれらのヘッダーを設定した後、Firefoxは本当に奇妙な動作をしていました。

console.log("Hi FF, you are here A")何が起こっているのかを確認するために、私はたくさんのその他を追加しました。

最初はそれが絞首刑にされたように見えましたxhr.send()。しかし、私はそれがこの声明に達していないことを発見しました。私はそのconsole.log直前に別のものを置き、そこに到達しませんでした-最後のものconsole.logと新しいものの間に何もなかったにもかかわらず。それはちょうど2つの間に停止しましたconsole.log

行を並べ替え、削除して、ファイルに奇妙な文字がないか確認します。何も見つかりませんでした。

Firefoxを再起動すると問題が解決しました。

はい、バグを報告する必要があります。それはそれがとても奇妙なだけなので、それを再現する方法がわかりません。

注意:そして、ああ、私はそのHeader always set部分ではなく、Rewrite*部分をやっただけです!


本質的に、今日も同じ話です。Firefoxを再起動すると修正されました。5年以上後。
セーレン・モーテンセン

3

追加するだけ

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

.htaccess接続しようとしているWebサイトのルートにあるファイルに。


どこからでもリクエストを受け付けるように設定したい場合は問題ありません。そうでない場合は問題ありません。これがヘッダーのすべてのポイントです。
Godwhacker

2

後世については、サーバーログをチェックして、リクエストされているリソースが200を返しているかどうかを確認してください。

私は同様の問題に遭遇しました。そこでは、適切なヘッダーのすべてが飛行前のajaxリクエストで返されていましたが、ブラウザーは、実際のリクエストがCORSヘッダーの不良のためにブロックされたと報告しました。

結局のところ、リクエストされたページは不正なコードが原因で500エラーを返していましたが、それはCORSを介してフェッチされた場合に限られていました。ブラウザ(ChromeとFirefoxの両方)は、ページが500を返したと言うのではなく、Access-Control-Allow-Originヘッダーが欠落していると誤って報告しました。


1

これを試してください、それはあなたの問題を解決するはずです

  1. config.phpで、domain.comにwww preを追加します。例えば:

    HTTP define('HTTP_SERVER', 'http://domain name with www/');
    HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
  2. これを.htaccessファイルに追加します

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]

1

私にとっては、Access-Control-Allow-Origin応答ヘッダーを特定の(そして正しい)に設定しhost.comていたことがわかりましたが、http://host.com代わりにそれを返す必要がありました。Firefoxは何をしますか?GETリクエストを黙って飲み込み、ステータス0をXHRに返します。警告はJavaScriptコンソールに出力されませんが、他の同様の失敗の場合は少なくとも何かを言っています。あいあい。


1
w3.org/TR/corsの例を見て、スキームは予想されているようですが、とにかく感謝します。私も間違ったことを行っていました。そうです、Firefoxのエラーメッセージはありません。
リチャードグリーン

1

デバッグするには、可能であればサーバーのログを確認してください。Firefoxは、さまざまな理由でコンソールにCORSエラーを返します。

理由の1つは、uMatrix(および私もNoScriptと同様のものと思われます)プラグインです。


0

私は同様の問題に直面しました、そして私がそれをどのように修正したかを登録することは有効だと思います:

私は基本的にSymfony 3上に構築されたシステムを持っています。自己学習とパフォーマンスの目的で、GoLangを使用していくつかのスクリプトを作成することに決めました。また、パブリックアクセスのAPIを使用します。

私のGo APIはJson形式のパラメーターを期待し、Json形式の応答も返します

私が使用しているGoApiを呼び出すには、ほとんどの場合、$。ajax(jQuery)です。次に、「Access-Control-Allow-Origin:*」をapache conf、htaccess、php、javascript、およびGoogleで見つけられる場所に設定しようとしました。

しかし、同じイライラするエラー!!!

解決策は簡単でした。「GET」ではなく「POST」リクエストを作成する必要がありました。

これを実現するには、GoLangとJavaScriptの両方を調整してGETを使用する必要がありました。完了すると、Cross-Origin Requestがブロックされなくなりました!!!

それが役に立てば幸い

PS:

私は私が持っているディレクトリブロックで、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

0

上記の回答が役に立たない場合は、バックエンドサーバーが稼働中であるかどうかを確認します。私の場合と同様に、サーバーがクラッシュし、このエラーは完全に誤解を招くことがわかりました。


0

私の場合、それは私のADBLOCKERでした!何らかの理由で私のローカルホストで有効になっていて、Firefoxでこのエラーが発生しました。

これを無効にするか、プラグインアンインストールすると、これが修正されます。

あなたの場合、それはadblockerではなく別のFirefoxプラグインかもしれません。まずプラグインを使用せずにシークレットモードでテストし、それが問題であるかどうかを判断してから、犯人が見つかるまで体系的にプラグインを無効にします。


-3

ファイルは自明です。ファイルを作成し、任意の名前を付けます。私の場合はjq2.phpです。

<html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
    // document is made ready so that the program starts when we load this page       
    $(document).ready(function(){

        // it tells that any key activity in the "subcat_search" filed will execute the query.
        $("#subcat_search").keyup(function(){

            // we assemble the get link for the direction to our engine "gs.php". 
            var link1 = "http://127.0.0.1/jqm/gs.php?needle=" + $("#subcat_search").val();

            $.ajax({
                url: link1,
                // ajax function is called sending the input string to "gs.php".
                success: function(result){
                    // result is stuffed in the label.
                    $("#search_val").html(result);
                }
            });
        })   

    });
</script>
</head>

<body>

<!-- the input field for search string -->
<input type="text" id="subcat_search">
<br>
<!-- the output field for stuffing the output. -->
<label id="search_val"></label>

</body>
</html>

エンジンを組み込み、ファイルを作成し、好きな名前を付けます。私の場合はgs.phpです。

$head = "https://maps.googleapis.com/maps/api/place/textsearch/json?query="; //our head
$key = "your key here"; //your key
$hay = $_GET['needle'];

$hay = str_replace(" ", "+", $hay); //replacing the " " with "+" to design it as per the google's requirement 
$kill = $head . $hay . "&key=" . $key; //assembling the string in proper way . 
print file_get_contents($kill);

私はこの例をできるだけ単純にするように努めました。また、キーを押すたびにリンクが実行されるため、APIの割り当てはかなり速く消費されます。

もちろん、データをテーブルに配置したり、データベースに送信したりするなど、私たちができることには終わりがありません。


同じ回答を複数回投稿しないでください。そして、あなたの答えが実際に質問に答えることを確認してください。詳細について他の人に指示する必要がある場合、それは良い答えではありません。
elixenide 2015

こんにちは私はリンクが前提条件などのようないくつかの情報を持っているので使用しました。もしそれが適切だと感じたら、私はそれを削除します。
Harsh Mehta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.