2017-01-25 6 views
6

Я делаю запрос GET на свой локальный веб-сервис, который я ожидаю, когда ответ будет возвращен с указанием местоположения в заголовке. Тем не менее, я получаю неопределенный ответ назад и сетевую ошибку, хотя я вижу локально, что запрос обслуживается, и создается ответ без каких-либо ошибок в веб-сервисе.302 Ошибка ответа

Я пробовал в Postman и Chrome, и он получает ответ перенаправления и перенаправляет соответственно.

Я не уверен, что это проблема CORS, и если да, то как я могу это решить?

Я уже добавил в заголовке ответа на CORS фильтр

Access-Control-Expose-Headers: Location, [own headers] 
Access-Control-Allow-Origin: '*' 
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE 
Access-Control-Max-Age: [some age] 
Access-Control-Allow-Headers: [own headers] 

И место присутствует в заголовке, когда я использую Почтальон

Запрос я делаю с помощью Вардар и конфигурации является

const config = { 
    url: [someURL], 
    method: 'GET', 
    headers: { 
    'customHeader':'token', 
    }, 
    params: { 
    [params] 
    }, 
    maxRedirects: 0, 
    validateStatus: status => (status >= 200 && status < 300) || status === 302, 
}; 

Любая помощь будет действительно оценили, почему ответ не определен, когда он достигает моего JS кода, но прекрасно работает в Почтальон и Chrome.

Способ, которым я могу решить, это использовать код состояния HTTP 200 и перенаправить заголовок местоположения, но я хочу избежать этого, потому что это технически ответ перенаправления.

+0

Возможно, вы можете попробовать проверить статус "readyState" и выполнить поиск 'HEADERS_RECEIVED' (https://xhr.spec.whatwg.org/). Проверьте этот ответ http://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest. –

+0

Но я получаю неопределенный ответ, который не включает в себя какой-либо статус или тело ответа или заголовки. – diepjy

ответ

2

'customHeader':'token' часть вашего запроса triggers your browser to first send a CORS preflight OPTIONS request. Любые заголовки, которые вы добавляете к запросу, кроме заголовков, определяемых как CORS-safelisted request-headers триггерные браузеры для отправки запроса предварительной проверки CORS.

Причина, по которой вы не получаете это от Postman, заключается в том, что в отличие от движков браузера Postman не реализует CORS, поэтому он не отправляет запрос OPTIONS. (Почтальон не работает в рамках модели Web-безопасности того же происхождения, которую браузеры применяют для веб-приложений.)

Если сервер не отвечает в правильном порядке запросами OPTIONS перед запросом CORS, ваш запрос будет терпеть неудачу, и только обходной путь заключается в том, чтобы не добавить эту часть 'customHeader':'token' к вашему запросу или каким-либо иным образом создать ваш запрос каким-либо образом, который заставит ваш браузер выполнять предпросмотр CORS.

+0

У меня есть другие конечные точки, которые отлично работают (GET, POST, DELETE, PUT и OPTION) вместе с запросами CORS preflight OPTIONS, за исключением конечных точек, которые верните ответ 302. Я не слишком уверен, что вы подразумеваете под «созданием вашего запроса каким-либо образом, который запускает ваш браузер для предпросмотра CORS». Значит ли это, что я должен добавить заголовок местоположения в свой запрос? – diepjy