Firefox 'Cross-Origin Request Blocked' несмотря на заголовки
Я пытаюсь сделать простой запрос cross-origin, и Firefox последовательно блокирует его с этой ошибкой:
Cross-Origin Request Blocked: та же политика 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, сначала необходимо добавить исключение для этого сертификата.вы можете сделать это, посетив заблокированную ссылку один раз и добавив исключение.
Я нашел решение через 2 дня :(.
важное примечание: при ответе на авторизованный запрос сервер должен укажите домен, и не может использовать дикий кардинг.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
просто несколько предупреждений. Я, наконец, обошел проблему с Firefox и CORS.
решение для меня был этот пост
однако Firefox вел себя очень, очень странно после установки этих заголовков на сервере Apache (в папке .htaccess).
я добавил
console.log("Hi FF, you are here A")и т. д чтобы посмотреть, что происходит.сначала казалось, что он висел на
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файл в корне веб-сайта, с которым вы пытаетесь подключиться.
попробуйте это, это должно решить вашу проблему
в свой конфиг.php, добавьте www pre в свой domain.com например:
HTTP define('HTTP_SERVER', 'http://domain name with www/'); HTTPS define('HTTPS_SERVER', 'http://domain name with www/');добавить это к вашему .htaccess file
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 будет потребляться довольно быстро.
конечно, нет конца тому, что мы можем сделать, например, поместить данные в a таблица, отправка в базу данных и так далее.
Comments