Как браузер работает с заголовками истечения срока действия, заголовками управления кешем, заголовком последнего изменения?

Я веб-разработчик, работал как с PHP, так и с .NET. имея более года опыта работы в Интернете, я не смог полностью понять функции кэширования браузера, я надеюсь, что веб-гуру могут помочь мне с этим. Вопросы, которые у меня есть в моей голове:

  • Как браузер на самом деле кеширует данные, запрашивает ли он, изменился ли кешированный файл на сервере или нет,
  • Каков идеальный способ для разработчика использовать кеширование браузера в полной мере, а также иметь возможность вносить новые изменения на сайт без каких-либо проблем. Я думаю, что если браузер каким-то образом кэширует мои CSS, JS и изображения, а затем просто каждый раз проверяет их модификацию на сервере, это может решить проблему. но я не уверен, как это сделать.

person Umair Jabbar    schedule 22.04.2010    source источник
comment
http://www.enhanceie.com/redir/?id=httpperf   -  person EricLaw    schedule 22.04.2010


Ответы (3)


Эта запись в блоге может помочь:

http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/

В нем объясняется, как использовать кэширование, сохраняя при этом возможность вносить изменения при необходимости.

person HttpWatchSupport    schedule 22.04.2010
comment
Я прочитал этот пост в блоге, прежде чем задать этот вопрос, но он не отвечает на мои вопросы, потому что он хочет, чтобы я снова и снова добавлял строку запроса, когда я меняю свои файлы, и на большинстве сайтов в наши дни у нас загружается много файлов css и JS. , и многие изображения, тогда мне придется нанять еще один выделенный ресурс для ежедневной проверки и изменения строки запроса. :) - person Umair Jabbar; 22.04.2010
comment
Если у вас есть много ресурсов, которые меняются, вам понадобится какая-то автоматизированная система, которая обновляет встроенные URL-адреса перед развертыванием. - person HttpWatchSupport; 22.04.2010

Для файлов CSS стандартным «обходным решением» является постепенное добавление параметра к ссылке:

<link rel="stylesheet" href="http://mysite.com/styles.css?v=1">
<link rel="stylesheet" href="http://mysite.com/styles.css?v=2">
...

Это заставит браузер перезагрузить файл.

person Community    schedule 22.04.2010
comment
он хочет, чтобы я снова и снова добавлял строку запроса, когда я меняю свои файлы, и с большинством сайтов в наши дни у нас загружается много файлов css и JS и много изображений, мне придется нанять еще один выделенный ресурс для проверки и изменения тогда строка запроса ежедневно. :) - person Umair Jabbar; 22.04.2010
comment
@Umair: вы должны быть в состоянии полностью автоматизировать строку запроса, если вы работаете на PHP или .NET. Если вы жестко кодируете полный URL-адрес в статические HTML-файлы, это будет сложнее сделать, но в любом случае ваш сайт не будет таким динамичным. - person Avi; 22.04.2010
comment
не будет ли использование заголовка expires, кэширования браузера и last-modified, поскольку избавит меня от необходимости автоматизировать строки запроса - person Umair Jabbar; 22.04.2010
comment
Я думал, вы хотите использовать кеш браузера? Помните, что вы хотите делать это только каждый раз, когда вы меняете css и хотите принудительно обновить. Обычно вы хотите, чтобы браузер использовал кэшированную копию для более быстрой загрузки. - person matt burns; 03.06.2013

Если вы используете серверный язык, вы можете заставить браузер снова загрузить файл.

<script src="script.js?<?= uniqid(); ?>">
<img src="myfile.jpg?<?= uniqid(); ?>">

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

Существует еще один способ управлять тем, что необходимо кэшировать: кеш приложений HTML5, кешировать логику в файле манифеста. Таким образом, каждый файл в вашем манифесте не будет загружаться снова, пока не будет изменен сам файл манифеста.

Просто помните, что если вы что-то изменили в JS, CSS, файле изображения и вам нужно передать это изменение повторяющимся посетителям, вам также необходимо обновить файл манифеста. Вы можете добавить дату публикации, чтобы браузер знал, что это новый манифест, и загружал все заново.

person meltix    schedule 13.03.2013