2017-02-08 12 views
0

Род занятий question.Почему мои запросы CORS отклоняются?

Я пытаюсь отправить запрос POST в API для целей тестирования. Я все время получаю

Ответ на запрос предполетной проверки не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Поэтому Origin '{my local IP}' не допускается. Ответ был HTTP код статуса 403.

Вот соответствующий код:

function searchSimilar2(){ 
var base_url = "{request url}" 
var send_url = base_url + "{inline arguments}" 
var params = '{"size":10, "mediaUrl":"https://cdn.yoox.biz/39/39706632kh_20_f.jpg2"}' 

function func(){ 
    console.log(this.response) 
} 

var hReq = new XMLHttpRequest(); 
hReq.open('POST', send_url) 
hReq.setRequestHeader('Content-Type', 'application/json') 
hReq.onload = func; 
hReq.send(params) 

Я опустил URL запроса и аргументы, так как я знаю, что проблема не связана с ними.

В соответствии с связанными вопросами ответы, я не использую JQuery, и я запускаю python SimpleHTTPServer, откуда я отправляю этот запрос. Я продолжаю получать эту ошибку.

+0

Сервер не отправляет требуемые заголовки CORS. Загружаете ли вы свою страницу через URL-адрес 'file: //'? Если это так, браузер считает страницу и сервер http: // localhost' двумя разными доменами. – Pointy

+0

Да, я прочитал это в связанном вопросе. Вот почему я запускаю simpleHTTPServer и открываю html-файл, который запускает javascript оттуда. – GreySage

+0

Поймите, что в зависимости от браузера нужно сопоставить «http» («http» или «https»), домен ** буква для буквы ** и номер порта. Они должны быть одинаковыми при сравнении с строкой, а не с одним и тем же IP-адресом. – Pointy

ответ

0

Изменяя настройки сервера, я получил эту работу.

Часть URL-адреса для запросов - «v1/api», и по какой-либо причине переключение на «api/v1» заставило все работать.

2

Необходимо задать значение заголовка «Access-Control-Allow-Origin» в ответе SimpleHttpServer. Значение заголовка должно содержать имя хоста или IP запрашивающего приложения. Кроме того, вы можете установить «*» значение подстановки, чтобы все корни:

//allow single origin 
self.send_header('Access-Control-Allow-Origin', 'http://yourapp.com') 
self.end_headers() 

-ИЛИ-

//allow all origins 
self.send_header('Access-Control-Allow-Origin', '*') 
self.end_headers()