2014-01-22 6 views
1

У меня есть приложение Flask в Google App Engine, и я хочу сказать браузеру кэшировать ответ, который использует заголовок Cache-Control. Он работает, как ожидалось, на dev_appserver.py, но при развертывании в App Engine заголовки изменяются и разбиваются на заголовок кэша.Google App Engine добавляет кеш-контроль и другие заголовки

Вот вид Колба, в частности:

@app.route("/resource") 
def resource(): 
    response = make_response(render_template("resource.html")) 
    response.headers['Cache-Control'] = "max-age=31536000" 
    logging.error("HEADERS: {}".format(response.headers)) 
    return response 

Бревна для сервера разработки и App Engine шоу:

Content-Type: text/html; charset=utf-8 
Content-Length: 112628 
Cache-Control: max-age=31536000 

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

Когда я открываю средства разработки Chrome в заголовки для App Engine являются:

alternate-protocol:443:quic 
cache-control:no-cache, must-revalidate 
content-encoding:gzip 
content-length:19520 
content-type:text/html; charset=utf-8 
date:Wed, 22 Jan 2014 19:53:47 GMT 
expires:Fri, 01 Jan 1990 00:00:00 GMT 
pragma:no-cache 
server:Google Frontend 
set-cookie:session=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/ 
status:200 OK 
strict-transport-security:max-age=31536000 
vary:Accept-Encoding 
version:HTTP/1.1 
x-appengine-estimated-cpm-us-dollars:$0.002267 
x-appengine-resource-usage:ms=7388 cpu_ms=5069 
x-frame-options:DENY 
x-ua-compatible:chrome=1 

В отличие от заголовков сервера приложений развития являются, как ожидалось:

Cache-Control:max-age=31536000, private 
Content-Length:112628 
content-type:text/html; charset=utf-8 
Date:Wed, 22 Jan 2014 19:57:05 GMT 
Expires:Wed, 22 Jan 2014 19:57:05 GMT 
Server:Development/2.0 
set-cookie:session=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/ 
x-frame-options:DENY 
x-ua-compatible:chrome=1 

Конечно, я проверил, чтобы убедиться, что я не добавляю дополнительные заголовки, и я не мог найти ссылки на связанные с кешем заголовки (pragma, expires и cache-control), которые добавляются за пределами данного вида.

Так что, кажется, App Engine добавляет кучу заголовков при развертывании, что кажется необычным. Что я мог упустить?

- EDIT -

Как @dinoboff noted from the docs in a comment below:

Cache-Control, Истекает и Варах

Эти заголовки указать политику кэширования для промежуточных прокси-серверов (например, Интернет-провайдеры) и браузеров. Если ваш скрипт устанавливает эти заголовки, они обычно будут немодифицированы, , если у ответа нет заголовка Set-Cookie или не создается для пользователя, который выполнил вход, используя учетную запись администратора.

+0

IIRC Я думаю, что некоторые из них (x-app) связаны с тем, что вы просматриваете его как зарегистрированный пользователь admin? –

+0

@PaulCollingwood: Я думаю, что вы попали в ответ - когда я пытаюсь использовать страницу как не-администратора, я получаю ожидаемый результат.Не стесняйтесь публиковать как ответ, и я буду отмечать его правильно. –

+0

звучит хорошо, рад помочь :) –

ответ

3

Эти заголовки являются дополнительными заголовками, которые добавляются, потому что вы смотрите на сайт как зарегистрированный пользователь admin. Они не будут присутствовать для «нормальных» пользователей.

этом блоге рассказывает о X-AppEngine-Resource-Usage заголовка конкретно: http://googleappengine.blogspot.co.uk/2009/08/new-features-in-124.html

И как они отмечают:

Вы можете просматривать эти заголовки с помощью плагинов, таких как Живой HTTP Фирефокса заголовков или Firebug. Обратите внимание, что только зарегистрированные администраторы видят эти цифры - обычные пользователи, и пользователи, которые не вошли в систему, вообще не видят .

+0

Я бы добавил, что кажется, что AppEngine меняет 'cache-control' на' no-cache, must-revalidate'. Это, похоже, не документировано. –

+1

@ BrianM.Hunt AppEngine также меняется. Истекает до Пт, 01 янв 1990 00:00:00 GMT/Это отстой. – filip26

+0

@ BrianM.Hunt GAE отключает кэширование для администратора или если запрос устанавливает cookie. Заголовки управления кэшем не будут изменены иначе. Это документально подтверждено https://cloud.google.com/appengine/docs/python/requests#cache-control_expires_and_vary – Dinoboff