2016-09-24 3 views
1

Первый запрос Ajax получает ответ, но не второй, который включает заголовок. Как разрешить включение заголовков в кросс-доменный запрос Ajax.Разрешить заголовки в кросс-доменном ajax-запросе

Примечание. Я ожидаю, что мне нужно будет сменить сервер, и https://stackoverflow.com/a/32140436/1032531 также так говорит, но не говорит, как внести эти изменения. Кроме того, я не ищу решение только для jQuery.

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Testing</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.js" type="text/javascript"></script> 
     <script type="text/javascript"> 
      $(function(){ 
       $.ajax({ 
        type:'POST', 
        url:'http://otherdomain.example.com/ajax.php', 
       }) 
       $.ajax({ 
        type:'POST', 
        url:'http://otherdomain.example.com/ajax.php', 
        headers: {"X-Test-Header": "test-value"}, 
       }) 
      }); 
     </script> 
    </head> 

    <body></body> 
</html> 

ответ FF на второй запрос Ajax:

Cross-Origin Request Заблокировано: The Same Origin Policy запрещает чтение удаленный ресурс в http://otherdomain.example.com/ajax.php. (Причина: отсутствующий токен «x-test-header» в заголовке CORS «Access-Control-Allow-Headers» из канала предпросмотра CORS).

Chrome отвечает на второй как:

XMLHttpRequest не может загрузить http://otherdomain.example.com/ajax.php. Поле заголовка запроса X-Test-Header не допускается Контрольные заголовки Access-Control-Allow-Headers в предполетном ответе. Apache настроен в

следующим образом:

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" 
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, Client-Security-Token, Accept-Encoding" 

ответ

2

Кажется, что каждый заголовок должен быть конкретно перечислены и я добавил x-test-header к Access-Control-Allow-Headers.

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" 
Header set Access-Control-Allow-Headers "x-test-header, Origin, X-Requested-With, Content-Type, Accept" 
0

Вы можете избавиться от этой ошибки с помощью правила .htaccess. Просто создайте .htaccess file.on домашней директории (или добавьте эти строки к нему, если у вас уже есть)

Header set Access-Control-Allow-Origin "*" 

Это глобально позволит перекрестное orgin. Если вы хотите только одна страница вы можете использовать

<?php header("Access-Control-Allow-Origin: *"); ?> 

В верхней части страницы

+0

Спасибо, но, как видно из моего первоначального сообщения, я уже делал это. Это заголовок, который не проходит. – user1032531

Смежные вопросы