кросс-домен — пользовательские заголовки, дающие ошибку CORS в переполнении стека

Я пытаюсь запрос на основе домена REST. оба домена будут размещены на одном сервере.

domain1: Http: //testdata.local — для приложения, которое будет запрашивать REST API на domain2.

domain2: Http: //api.testdata.local — для обработки вызовов REST API от domain1

у каждого вызова API остальных есть свои пользовательские заголовки, которые требуются для domain2.

теперь, когда я вызываю запрос API отдыха к домену 2 через ajax, я получаю сообщение об ошибке CORS.

ниже мой код, который я пытаюсь:

PHP-код для примера API-запроса на domain2:

class mytest{

public function setOriginPolicy() {
if (isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] == 'http://testdata.local') {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');    // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
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:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}

exit(0);
}
}

public function testrequest(){
$this->setOriginPolicy
$result['config_status'] = 1;
$result['config_msg'] = "request ok";
echo json_encode($result);

}
}

AJAX Звонок с домена1:

var url = "http://api.testdata.local/mytest/testrequest";
$.ajax({
type: 'GET',
url: url,
async: true,
crossDomain:true,
//jsonpCallback: 'jsonCallback',
contentType: "application/x-www-form-urlencoded",
headers:{"API_KEY":"andapikey","APP_VERSION":"1.0","CONFIG_VERSION":"1.0","AUTH_TOKEN": "4a6b1e610e81fa19c76a557049e9fa19"},
/*beforeSend: function( xhr ) {
xhr.setRequestHeader("API_KEY", "andapikey");
xhr.setRequestHeader("APP_VERSION", "1.0");
xhr.setRequestHeader("CONFIG_VERSION", "1.0");
xhr.setRequestHeader("AUTH_TOKEN", "4a6b1e610e81fa19c76a557049e9fa19");
},*/
success: function(json) {
console.log(json);
},
error: function(e) {
console.log(e.message);
}
});

Если я отключаю заголовки, я получаю ответ.

Пожалуйста, предложите

2

Решение

решение:

Добавлен настраиваемый заголовок в заголовки разрешения происхождения в .htaccess.

Свернул ссылку http://benjaminhorn.io/code/setting-cors-cross-origin-resource-sharing-on-apache-with-correct-response-headers-allowing-everything-through/

Отдельное спасибо Бенджамину.

Ниже мой .htaccess

Header always set Access-Control-Allow-Origin "http://testdata.local"Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"Header always set Access-Control-Max-Age "1000"Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin,API_KEY,APP_VERSION,CONFIG_VERSION,AUTH_TOKEN"<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

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

# Redirect Trailing Slashes...
RewriteCond %{REQUEST_METHOD} !OPTIONS
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_METHOD} !OPTIONS
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
1

Другие решения

Других решений пока нет …