Почему Chrome рассматривает этот файл как документ, а Firefox как изображение? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть конечная точка загрузки GET в моем экспресс-приложении.На данный момент он просто читает файл из файловой системы и передает его после установки некоторых заголовков.

Когда я открываю конечную точку в Chrome, я вижу, что это рассматривается как «документ», а в Firefox -рассматривается как тип png.

Я не могу понять, почему он обрабатывается по-разному.

Chrome: строка заголовка - «загрузить» Firefox: строка заголовка - «имя изображения»

В Chrome это также приводит к отсутствию кэширования изображения, если я обновляю адресную строку.В Firefox он кешируется очень хорошо.

Это мой экспресс-код:

app.get("/download", function(req, res) {
  let file = `${__dirname}/graph-colors.png`;
  var mimetype = "image/png";

  res.set("Content-Type", mimetype);
  res.set("Cache-Control", "public, max-age=1000");
  res.set("Content-Disposition", "inline");
  res.set("Vary", "Origin");
  var filestream = fs.createReadStream(file);
  filestream.pipe(res);
});

Также прикрепление изображений для вкладок сети браузера.

enter image description here enter image description here

1 Ответ

1 голос
/ 05 июля 2019

Это все, что связано с поведением Chrome, вы можете проверить на другом сайте, например Example.png в Википедии .

Chrome всегда обрабатывает «вещь», которую вы открыли вадресная строка как документ, игнорируя, что это на самом деле.Вы даже можете протестировать загрузку css , и он будет читать документ.

Для заголовка он читает загрузку, потому что ваш путь - / download, вы не можете изменить его в соответствии с этой темой SO.

Для кэширования Chrome, по-видимому, игнорирует кэш при перезагрузке чего-либо, страницы или изображения.Вы можете попробовать использовать Wiki example.png, вы получите 304 вместо «(из кэша)».(304 означает, что запрос отправлен, и сервер внедрил ETag, if-none-match или подобный метод)

...