Chrome делает несколько запросов на один и тот же актив, если капитализация отличается - PullRequest
3 голосов
/ 12 декабря 2011

Я работаю над крупным веб-проектом asp.net, в котором за последние несколько лет несколько разработчиков и консультантов вносили в него изменения. Я заметил, что в зависимости от разработчика пути к изображениям и другому статическому контенту могут содержать правильный регистр, все строчные буквы или что-то совершенно случайное. Похоже, что браузер делает несколько запросов на один и тот же ресурс из-за разницы в корпусе. Например -

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <img src="http://cdn.sstatic.net/stackoverflow/img/sprites.png" />
    <img src="http://cdn.sstatic.net/stackoverflow/Img/sprites.png" />
</body>
</html>

Помимо поиска каждого изображения в проекте и нормализации корпуса, можно ли здесь что-нибудь сделать? Возможно, что-то, что я могу добавить в заголовки ответа на страницу, чтобы браузер игнорировал регистр и т. Д.

1 Ответ

0 голосов
/ 13 декабря 2011

Ну, браузер (это не только Chrome, который делает это, любой браузер, который не глючит) должен это делать, потому что у него нет никакого способа узнать, что вы используете отображение без учета регистра, поэтому<http://cdn.sstatic.net/stackoverflow/img/sprites.png> и <http://cdn.sstatic.net/stackoverflow/Img/sprites.png> - это совершенно разные URI.

Есть несколько вещей, которые вы можете сделать.

Сначала найдите и замените те, которые:

  1. Особеннообычно используется.
  2. Особенно тяжелые файлы.
  3. Особенно часто неправильно пишется.
  4. Скорее всего, вы не найдёте что-то заменяющее, что испортит несвязанный код.

Еще одна вещь, которую вы можете сделать, это принудительно канонизировать регистр в обработчике, который при вызове для URI, который не соответствует вашим правилам канонизации регистра, соответствует 301-му в форме, которая соответствует.Это означает, что вместо 3 разных 10-килобайтных изображений вы получите 1 10-килобайтное изображение и получите 2 или 3 перенаправления из пары сотен байтов.Тем не менее, ниже определенного размера файла стоимость дополнительного запроса перевешивает экономию.

Наконец, вы можете использовать фильтр (объект потока, для которого установлен Response.Filter, который записывает предыдущее значениеof Response.Filter) или код на шаге PreRender, который сканирует локальные URI (если вы измените регистр URI на других сайтах, вы можете получить 404) и правильно их выведет.

...