Firefox "запрос Cross-Origin заблокирован", несмотря на заголовки

Я пытаюсь сделать простой запрос cross-origin, и Firefox последовательно блокирует его с помощью этой ошибки:

заблокирован запрос Cross-Origin: та же политика Origin запрещает чтение удаленного ресурса по адресу [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 и basic

9 ответов


оказывается, это не имеет ничего общего с CORS - это была проблема с сертификатом безопасности. Сообщают ошибок = 4 часа головной боли.


Я обнаружил, что моя проблема заключалась в том, что сервер, на который я отправил перекрестный запрос, имел сертификат, которому не доверяли.

Если вы хотите подключиться к домену крест с https, вы должны сначала добавить исключение для этого сертификата.

вы можете сделать это, посетив однажды заблокированной ссылке и addibng исключение.


Я нашел решение через 2 дня : (.

важное примечание: при ответе на запрос с удостоверением сервер должен укажите домен и не можете использовать wild carding.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials


просто слово предупреждения. Я, наконец, обошел проблему с Firefox и CORS.

решение для меня был этот пост

настройка CORS (cross-origin resource sharing) на Apache с правильными заголовками ответов, позволяющими все через / Benjamin Horn

однако Firefox вел себя очень, очень странно после установки этих заголовков на сервере Apache (в папке .реврайт).

я добавил console.log("Hi FF, you are here A") etc посмотреть, что происходит.

сначала казалось, что он висел на xhr.send(). Но потом я обнаружил, что до этого утверждения не дошло. Я поставил еще один console.log прямо перед ним и не попал туда - хотя между последними ничего не было console.log и новую. Он просто остановился между двумя console.log.

переупорядочивание строк, удаление, чтобы увидеть, был ли какой-либо странный символ в файле. Я ничего не нашел.

перезапуск Firefox исправил беда.

Да, я должен сообщить об ошибке. Просто это так странно, что я не знаю, как его воспроизвести.

обратите внимание: и, О, я только что сделал Header always set части, а не Rewrite* часть!


просто добавить

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

до .htaccess файл в корне веб-сайта, с которым вы пытаетесь подключиться.


попробуйте это, это должно решить вашу проблему

  1. в свой конфиг.php, добавьте www pre в свой domain.com - ... Например:

    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 ^(.*)$  [R=200,L]
    

для меня, оказывается, я сидел Access-Control-Allow-Origin к определенному (и правильному) host.com но это должно быть http://host.com вместо. Что делает firefox? Он молча проглатывает запрос GET и возвращает статус 0 в XHR, без вывода предупреждений на консоль javascript, тогда как для других подобных сбоев он, по крайней мере, что-то скажет. Ай-ай.


файлы не требуют пояснений. Сделайте файл, назовите его как угодно. В моем случае jq2.РНР.

<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>

теперь мы включим движок, сделаем файл, назовем его как угодно. В моем случае это ГС.РНР.

$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 будет потребляться довольно быстро.

конечно, нет конца вещам, которые мы можем сделать, например, поместить данные в таблица, отправка в базу данных и так далее.


похоже, это ошибка в Firefox 44, которая была исправлена в версии 45.