2013-08-01 4 views
4

У меня возникли проблемы со сбором значений json из URL-адреса в моем приложении. Когда я пытаюсь получить их, на консоли отображается сообщение об ошибке, в котором говорится, что происхождение не разрешено с помощью разрешения access-control-allow-origin.Настройка заголовка ответа с javascript

Я исследовал немного и обнаружил, что заголовки ответа должны быть установлены в Access-Control-Allow-Origin: *

Как я могу это сделать с помощью чистого JavaScript? Нет jquery или любой другой библиотеки.

Это мой текущий код:

<script type="text/javascript"> 
    var xmlHttp = null; 
    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", "http://example.com/id=69", false); 
    xmlHttp.send(null); 
    console.log("JSON values from URL: "); 
    console.log(xmlHttp.responseText); 
</script> 

ответ

5

Я исследовал немного и обнаружил, что заголовки ответа должны быть установлены в Access-Control-Allow-Origin: *

Как я могу это сделать с помощью чистого JavaScript? Нет jquery или любой другой библиотеки.

Вы не можете, не, если ваш сервер работает JavaScript (NodeJS и т.д.).

Сервер должен разрешить доступ к ресурсу из источника вашего документа. Как это работает:

  • браузер запрашивает разрешение на доступ к ресурсу (это называется «предполетный» запрос), сообщая сервер, что ресурс он хочет получить доступ и т.д.

  • сервер отвечает соответствующими заголовками, сообщающими браузеру, разрешен ли доступ.

  • Браузер отправляет фактический запрос.

  • Сервер отвечает на него (опять же, включая соответствующие заголовки).

Я считаю, что существуют ситуации, когда предварительный полет не требуется. Все это обрабатывается для вас объектом XMLHttpRequest.

Детали в the Cross-Origin Resource Sharing specification.

+0

Мой сервер работает NodeJS. Могу ли я настроить заголовки ответов? –

+0

@ MarkoĆilimković: Конечно, в коде на сервере, используя ['response.setHeader'] (http://nodejs.org/api/http.html#http_response_setheader_name_value). CORS довольно тонкий, вам нужно быть уверенным, что вы разрешаете все, что просит клиент, а это значит, что вы просматриваете заголовки запросов, отправленные браузером. –

+0

Спасибо за объяснения! –

2

Вы не можете сделать это на стороне клиента, сервер должен послать эти заголовки.

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