Как правильно отключить локальный кеш в браузере?
Я устраняю проблему на моем сайте, когда пользователь успешно проходит аутентификацию, но браузер загружает (я полагаю) локальный кэш страницы, на которую перенаправляется пользователь. Поскольку это локальный кеш, страница выглядит так, как будто они не вошли в систему. Как только вы обновите страницу вручную (используя кнопку обновления в вашем браузере), на странице отобразится информация о том, что вы вошли в систему.
Это происходит (периодически) для обычных событий входа в Drupal, (часто) для событий входа в Facebook и (периодически) для запросов страниц после того, как они вошли в систему и нормально загрузили страницы. Я воспроизвел ошибку на Firefox и Chrome на Mac.
Сайт работает на Drupal 7 и использует Varnish (размещен в Пантеоне).
Пример шагов воспроизведения для просмотра проблемы с входом в Facebook: 1. Выйдите из Facebook и моего сайта 2. Войдите на мой сайт с помощью кнопки входа Facebook 3. Выйдите из моего сайта (используя ссылку выхода из сайта). Я все еще вошел в FB 4. Используйте кнопку входа FB на моем сайте, чтобы войти
Я ожидал, что попаду на домашнюю страницу, вошедшую в систему. Вместо этого меня перенаправляют на домашнюю страницу, но ее кэшированная версия (так что, похоже, я не вошел в систему). Обновление браузера приводит к перезагрузке домашней страницы, вошедшей в систему, и я настроен отсюда.
Я рассмотрел заголовки (ниже) из шагов воспроизведения, приведенных выше, и, если я правильно понимаю, я думаю, они указывают, что браузер загружает локальный кэш, когда он должен сделать новый запрос страницы. Я не эксперт по кешированию, поэтому это может быть проблема с заголовками или что-то еще. Я просто не знаю, в чем причина.
Вот заголовки от первого нажатия кнопки входа в FB. Поскольку я уже вошел в Facebook, я сразу же перенаправлен обратно на мой сайт (это ожидается).
Request URL:https://www.facebook.com/dialog/oauth?client_id=407390309287595&redirect_uri=http%3A//www.zujava.com/fboauth/connect&scope=email%2Cuser_about_me%2Cuser_website
Request Method:GET
Status Code:302 Found
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:c_user=3413203; csm=2; datr=bq8bT_JILi0PrW8H9GZ5BMy6; fr=0MYU2YYrkDuegxlUi.AWVgxOkdsHe9zhvPJdDW7h70n48; lu=RgWtdyxDRmUr6dOIqyRyPhtg; s=Aa45lsbBS4F1Oll2.BQBsO2; xs=67%3AuZMhOYBden1YIw%3A2%3A1342620598; p=5; act=1342620710713%2F3%3A0; presence=EM342620710EuserFA23413203A2EstateFDutF0EsndF1EnotF0Et2F_5b_5dEuct2F134262011B0Elm2FnullEtrFnullEtwF2196532340EatF1342620710745Esb2F0CEchFDp_5f3413203F1CC; locale=en_US
Host:www.facebook.com
Referer:http://www.zujava.com/user/login
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
Query String Parametersview URL encoded
client_id:407390309287595
redirect_uri:http://www.zujava.com/fboauth/connect
scope:email,user_about_me,user_website
Response Headers
Cache-Control:private, no-cache, no-store, must-revalidate
Connection:keep-alive
Content-Length:0
Content-Type:text/html; charset=utf-8
Date:Wed, 18 Jul 2012 14:18:46 GMT
Expires:Sat, 01 Jan 2000 00:00:00 GMT
Location:http://www.zujava.com/fboauth/connect?code=AQBbeDeOf-cd6HCy6GALaDqESzcfgTJNmh_i5iIx2IpG-KOWBTJHcylhigo82ZGR_X2SOJVzkwcvIKa7rD4dxcg2CLLDa3eZJMkDlP6D3UIU6c-iCFu_TZg6LkfLM4cOGKtu5HraaQUrLUPJd96hOsmpDuW9lzTLuBeMH4fwI7m7p3Jybig1GE06098OJCGuGos#_=_
P3P:CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma:no-cache
Set-Cookie:locale=en_US; expires=Wed, 25-Jul-2012 14:18:46 GMT; path=/; domain=.facebook.com
X-Content-Type-Options:nosniff
X-FB-Debug:GPh2t018FPktnIalVO4RrxjZAQ3onlvvFyAEgI6g08U=
X-Frame-Options:DENY
X-XSS-Protection:0
Далее идут заголовки, которые завершают вход в FB на стороне моего сайта. Вы можете видеть, что cookie-файл сеанса создается в заголовках ответа:
Request URL:http://www.zujava.com/fboauth/connect?code=AQBbeDeOf-cd6HCy6GALaDqESzcfgTJNmh_i5iIx2IpG-KOWBTJHcylhigo82ZGR_X2SOJVzkwcvIKa7rD4dxcg2CLLDa3eZJMkDlP6D3UIU6c-iCFu_TZg6LkfLM4cOGKtu5HraaQUrLUPJd96hOsmpDuW9lzTLuBeMH4fwI7m7p3Jybig1GE06098OJCGuGos#_=_
Request Method:GET
Status Code:302 Moved Temporarily
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:ctools-collapsible-state=views-ui-advanced-column-petting_zu_graduates%3A1%2Cviews-ui-advanced-column-newly_published_content%3A1%2Cviews-ui-advanced-column-test%3A1%2Cviews-ui-advanced-column-html_sitemap%3A1; Drupal.tableDrag.showWeight=0; __atuvc=31%7C25%2C4%7C26%2C0%7C27%2C5%7C28%2C5%7C29; has_js=1; __utma=249598093.1349651830.1327187978.1342578105.1342618991.600; __utmb=249598093.64.9.1342621126771; __utmc=249598093; __utmz=249598093.1341848548.567.26.utmcsr=facebook.com|utmccn=(referral)|utmcmd=referral|utmcct=/l.php
Host:www.zujava.com
Referer:http://www.zujava.com/user/login
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
Query String Parametersview URL encoded
code:AQBbeDeOf-cd6HCy6GALaDqESzcfgTJNmh_i5iIx2IpG-KOWBTJHcylhigo82ZGR_X2SOJVzkwcvIKa7rD4dxcg2CLLDa3eZJMkDlP6D3UIU6c-iCFu_TZg6LkfLM4cOGKtu5HraaQUrLUPJd96hOsmpDuW9lzTLuBeMH4fwI7m7p3Jybig1GE06098OJCGuGos
URL fragment
#:_=_
Response Headers
Age:0
Connection:keep-alive
Content-Length:0
Date:Wed, 18 Jul 2012 14:18:47 GMT
Location:http://www.zujava.com/
Via:1.1 varnish
X-Pantheon-Edge-Server:10.183.199.123
X-Varnish:181771624
cache-control:no-cache, must-revalidate, post-check=0, pre-check=0
content-type:text/html
etag:"1342621126"
expires:Sun, 19 Nov 1978 05:00:00 GMT
last-modified:Wed, 18 Jul 2012 14:18:46 +0000
server:nginx/1.0.15
set-cookie:SESS650d63be2a9c0113cd1740e78b8184ed=961WQoY1iwAJSjEBiuglfI_TDsz3VA8BReyLK2wnz44; expires=Fri, 10-Aug-2012 17:52:07 GMT; path=/; domain=.zujava.com; HttpOnly
x-drupal-cache:MISS
Окончательный запрос домашней страницы:
Request URL:http://www.zujava.com/#_=_
Request Method:GET
Status Code:200 OK (from cache)
URL fragment
#:_=_
Я полагаю, это указывает на то, что домашняя страница загружается из кэша локального браузера, и на самом деле к серверу не делается никаких запросов. Если это так, я не понимаю, почему. Я предполагаю, что проблема заключается в том, как я говорю браузерам кэшировать домашнюю страницу?
Вот заголовки ответа для загруженной страницы загрузки домашней страницы:
HTTP/1.1 200 OK
Server: nginx/1.0.15
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
x-drupal-cache: HIT
Etag: "1342622308-0"
Content-Language: en
x-generator: Drupal 7 (http://drupal.org)
Cache-Control: public, max-age=10800
Last-Modified: Wed, 18 Jul 2012 14:38:28 +0000
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Content-Encoding: gzip
Content-Length: 8686
Date: Wed, 18 Jul 2012 14:50:55 GMT
X-Varnish: 658648930 658583362
Age: 295
Via: 1.1 varnish
Connection: keep-alive
X-Pantheon-Edge-Server: 10.183.199.163
Любые намеки или идеи будут приветствоваться.
1 ответ
Проблема в том, что, как вы уже написали, домашняя страница помечена как кешируемая. Поэтому, когда пользователь входит в систему, и он перенаправляется на домашнюю страницу, браузер молча обслуживает кэшированную домашнюю страницу. Вы не можете аннулировать кеш в этот момент.
Вы должны сделать домашнюю страницу не кешируемой браузером (вы все еще можете кэшировать ее на лаке для анонимных пользователей) или вы должны перенаправить зарегистрированных пользователей на другую страницу, например: example.com/logged-in, которая содержит то же самое Информация как домашняя страница, но не кешируется.
Кэширование домашней страницы в браузере - плохая идея, потому что таким образом вы теряете статистическую информацию, потому что браузер не запрашивает сервер.