Загрузка файла: кто отвечает за настройку заголовков HTTP - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь понять, как работает загрузка файлов HTTP.

Например, мое приложение VueJS вызывает API REST (с Axios). При вызове axios.request заголовки не устанавливаются. Существует только FormData объект, содержащий файл для загрузки.

Когда запрос поступает на сервер, я вижу, что заголовок Content-Type: multipart/form-data; ... был добавлен к запросу.

В какой момент создается этот заголовок? Кто отвечает за создание заголовка?

1 Ответ

1 голос
/ 26 июня 2019

Если это Ajax-запрос на загрузку файла, в Axios это браузер, который устанавливает заголовок Content-Type: multipart/form-data;....

В исходном коде Axios lib / adapters / xhr.js (который отвечает за XMLHttpRequest) проверяются данные HTTP-запроса. Если это экземпляр FormData, тогда заголовок Content-Type будет удален, и браузер выполнит эту работу.

В lib / adapters / xhr.js (см. Комментарий в исходном коде):

if (utils.isFormData(requestData)) {
  delete requestHeaders['Content-Type']; // Let the browser set it
}

Для utils.isFormData() логика:

// code in lib/utils.js
function isFormData(val) {
  return (typeof FormData !== 'undefined') && (val instanceof FormData);
}
...