Прямо сейчас у меня проблема с CORS (совместное использование ресурсов между разными источниками), особенно при попытке отправить авторизацию на slim api. Я попытался удалить заголовок авторизации на jquery, он работает как шарм! Но мне нужна авторизация, чтобы передать ключ api, который я не знаю, как обойти режим предполета (OPTIONS). Вот код javascript.Заголовок заголовка предварительной проверки во время CORS на основе Slim
$.ajax({
type:'GET',
url:baseApi+'/code/account',
crossDomain:true,
xhrFields:{
withCredentials:true
},
beforeSend:function(xhr){
$overlay.css('display','block');
xhr.setRequestHeader("Authorization",boot._header);
},
complete:function(xhr){
// complete scope
}
});
На тонкой структуры, я поставил Access-Control-Allow-Origin
с белый список доменов происхождения (www.example.com). Вот полная конфигурация
if (isset($_SERVER['HTTP_ORIGIN'])) {
if($_SERVER['HTTP_ORIGIN'] == "http://www.example.com"){
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
}
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: Authorization, authorization, Content-Type");
}
А вот полный запрос и заголовки ответов
Response Headers
HTTP/1.1 404 Not Found
Date: Tue, 14 Feb 2017 14:44:34 GMT
Server: Apache/2.4.23 (Unix) OpenSSL/1.0.2h PHP/5.6.24 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.24
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Authorization, authorization
Content-Length: 514
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=UTF-8
Заголовки запросов
OPTIONS /code/account HTTP/1.1
Host: api.example.com
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://www.example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Access-Control-Request-Headers: authorization
Referer: http://www.example.com/account/payout
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,id;q=0.6,ms;q=0.4
Accept: */*
Я пробовал возможное решение от других, но у меня нет возможности исправить это. Всегда отображается 404 с вызовом метода OPTIONS, а не методом GET, как предполагалось.
Код, который вы использовали совместно. 'Allow-methods' и' Allow-headers' находятся в заголовках ответов. 404 не генерируется из-за общего кода. – apokryfos
Тонкая рамка по-прежнему воспринимает ее как метод «ОПЦИИ». И запрошенная конечная точка зарегистрирована методом 'GET'. проверьте этот ответ на консоли браузера 'ОПЦИИ http://api.example.com/code/account 404 (не найдено)'. И он продолжает показывать, что XMLHttpRequest не может загрузить http://api.example.com/code/account. Ответ на предполетный период имеет недопустимый код состояния HTTP 404' –
Как я понимаю, это не запрос 'GET', это запрос' OPTIONS', после чего последует запрос 'GET', поэтому вам может потребоваться зарегистрировать оба. – apokryfos