2017-02-23 10 views
0

У меня есть сервер, исходный код которого недоступен, поэтому я не знаю, что там происходит.Как получить поля заголовка в запросе CORS с использованием Fetch api

Я пытаюсь отправить запрос CORS, и запрос будет успешным. В ответе должен быть заголовок Location, и я могу подтвердить, что он присутствует, используя cURL, а также вкладку Network Monitor Firefox в Dev Tools. Но я не могу получить доступ к этому в JavaScript с помощью XMLHttpRequest или получить api.

Мой код с использованием fetch api выглядит следующим образом.

fetch(url, { 
    method: 'post', 
    mode: 'cors', 
    credentials: 'include', 
    body: 'creating a new session', 
    headers: { 
    'Access-Control-Request-Headers': 'Location', 
    'Content-Type': 'text/html', 
    }, 
}). 
then((res) => { 
    if (res.status >= 200 && res.status < 300) { 
    console.log('Location:', res.headers.get('Location')); 
    } else { 
    throw new Error('Ooops...something went wrong.'); 
    } 
}) 
.catch(e => console.log(e.message)); 

На вкладке Сетевой монитор Firefox я получаю следующие данные.

[Response Headers] 
Access-Control-Allow-Credentials: "true" 
Access-Control-Allow-Origin: "http://localhost:8081" 
Content-Length: <some length> 
Date: <some date> 
Location: <required info is shown> 
Server: <some info> 

[Request Header] 
Host: <host name> 
User Agent: <user agent info for Firefox> 
Accept: <a lot of stuff> 
Accept-Language: "en-US,en;q=0.5" 
Accept-Encoding: "gzip, deflate" 
Content-Type: "text/plain;charset=UTF-8" 
Referer: "http://localhost:8081" 
Origin: <same as Referer> 
Content-Length: "22" 
Authorization: <some string> 
Connection: "keep-alive" 

Что нужно сделать, чтобы извлечь заголовок местоположения?

+0

так, ваш статус 2xx? и 'console.log ('Location:', res.headers.get ('Location'));' ничего не регистрирует? –

+0

@JaromandaX Status is 201, и он печатает «Location: null». –

+0

Вы видите, что заголовок 'Access-Control-Request-Headers: Location' не находится в заголовках запроса - это было бы в предполетном запросе' OPTIONS', и, честно говоря, я думаю, что вы неправильно делаете CORS - вы хотите ПОЛУЧИТЬ местоположение, так почему бы вам установить местоположение в качестве заголовка запроса? –

ответ

1

Так как @JaromandaX указал, что в ответе сервера было отсутствие 'Access-Control-Expose-Headers': 'Location', что привело к тому, что заголовок местоположения был недоступен из объекта ответа. Пришлось исправить это на сервере, и теперь все работает отлично.

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