2016-10-31 3 views
-2

Почему Request и Fetch возвращают разные заголовки?Почему Request и Fetch возвращают разные заголовки?

Являются ли заголовки объектов Response всегда ограниченными с помощью Fetch? Несмотря на то, что он используется на сервере, используются различные режимы?

Запрос, кажется, возвращает богатый набор заголовков, а Fetch - нет.

За исключением различий в механизме языка (Promise based, Callback, etc..etc ..) Как эти два отличаются друг от друга? Почему один не возвращает богатый набор заголовков, а другой?

fileURL, используемый в обоих примерах, является перекрестным доменом. На сервере Node/Express выполняется вызов в CDN Google.

с помощью запроса
https://github.com/request/request

request(fileURL, (err, res, body) => { 
    //headers in res 
    //are pretty rich 
}); 

Использование Fetch
https://github.com/matthew-andrews/isomorphic-fetch

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

const reqConfig = { method: 'POST', 
        headers: myHeaders, 
        body: data, 
        mode: 'cors', //or 'no-cors', or this field blank.. 
        cache: 'default' }; 

fetch(fileURL, reqConfig).then(res => { 
    //headers in res 
    //are not very complete 
}) 

// У меня нет доступа к политике CORS на сервере, так что это не вариант ..

редактировать Даже если не работает в режиме {: «Нет-CORS»} заголовки не полностью. .

+0

Если это для 'node', то какой полис заполнения' fetch' вы используете для 'node'? – Jack

+1

Почему downvote? Если downvote, PLZ сделать все одолжение и объяснить, почему. Спасибо .. –

+0

Я не спускал вниз, но я думаю, что вопрос немного странный ... если вам действительно нужны все «заголовки» в «узле», тогда «выборка» почти наверняка является неправильным выбором ... поскольку это было предназначенный для браузера, который будет контролировать заголовки для обеспечения безопасности.Единственная причина, по которой я могу думать, что имеет смысл использовать 'fetch' в узле, - это если у вас есть универсальное приложение, и тот же код нужно запускать в обоих местах (клиент + сервер) ... но если вам нужно все эти заголовки тогда не могут быть. Короче говоря, почему вы используете 'fetch' в' node'? – Jack

ответ

1

Поскольку вы работаете в режиме cors, запрашиваемый вами сервер имеет значение white list the headers you can see.

По умолчанию при выполнении CORS запросов только эти заголовки доступны:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Истекает
  • Last-Modified
  • Pragma
+0

Даже при работе не в '{mode: 'no-cors'}' заголовки не заполнены. –

+0

@ GN. Как насчет 'res.headers.raw()'? – Jack

0

fetch, вероятно, не то, что вы хотите для node, если у вас нет универсального приложения и ему нужен тот же код для работы как на клиенте, так и на сервере. fetch был создан для браузера, поэтому он будет - по крайней мере, в браузере - заблокировать ваши заголовки (см. Мой другой ответ), поэтому, если ваше желание состоит в том, чтобы иметь полный доступ к заголовкам, тогда что-то конкретное для node было бы лучше.

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