Почему браузеры используют «Принять: * / *» для тегов вместо приложения/javascript?

#javascript #html #browser

Вопрос:

Firefox и Chrome заявили бы, что они предпочитают html или xml-документ при выполнении запроса на страницу, например (из Chrome):

 Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
 

и text/css для <link rel="stylesheet" type="text/css"> того , как:

 Accept: text/css,*/*;q=0.1
 

Но когда дело доходит до <script src> этого , это становится

 Accept: */*
 

не утверждая application/javascript , что, несмотря на это, он будет принимать только javascript.

Почему он так себя ведет ?

Комментарии:

1. developer.mozilla.org/en-US/docs/Web/HTML/Element/script#notes говорит использовать text/javascript , но отмечает, что блокируются только аудио-и видеоответы, потому что браузеры снисходительны, вероятно, потому, что используется несколько типов контента, и белый список нарушит работу Интернета, в чем пользователи обвинят браузер.

2. @дандавис да text/javascript или application/javascript , но это все равно не */* так.

3. @dandavis И нет ничего плохого в том, чтобы сделать это Accept: text/javascript, application/javascript, */*;q=0.1 так, как они делают для css.

4. Это правда, что в более конкретном заголовке нет никакого вреда, но также верно, что и реальной пользы тоже нет. Имеет смысл различать и отдавать предпочтение определенным медиа-форматам для оптимизации, но сценарий есть сценарий. Учитывая это, зачем ограничивать пакет запроса дополнительной длиной, которая не служит никакой цели для одного из (если не) наиболее распространенных вариантов http-запросов? Это пустая трата времени, пропускной способности, заряда батареи, циклов процессора сервера и т. Д.

5. Браузер знает, что это <script> тег, но сервер может и не знать. Тег может ссылаться, скажем, на https://deno.land/x/lodash@4.17.19/lodash.js то, что действительно не является файлом сценария, если вы откроете его в браузере. И в любом случае я не предлагаю этого делать. Я просто спрашиваю, почему нет, так как они уже сделали это для css.

Ответ №1:

Это уменьшает размер заголовка Accept и, таким образом, экономит некоторую пропускную способность, что приводит к повышению производительности.

Смотрите ошибку 170789

Кроме того, это помогает минимизировать ошибки на сайтах, ожидающих заголовков фиксированной максимальной длины.

Смотрите IE и заголовок «Принять» (блог MSDN IEInternals)