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.
решение для меня был этот пост
однако 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
файл в корне веб-сайта, с которым вы пытаетесь подключиться.
попробуйте это, это должно решить вашу проблему
-
в свой конфиг.php, добавьте www pre в свой domain.com - ... Например:
HTTP define('HTTP_SERVER', 'http://domain name with www/'); HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
-
добавить это к вашему .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 будет потребляться довольно быстро.
конечно, нет конца вещам, которые мы можем сделать, например, поместить данные в таблица, отправка в базу данных и так далее.