gpt4 book ai didi

java - 与缓存相关的 HTTP header 在 App Engine 上的 Servlet 响应中被覆盖

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:09 30 4
gpt4 key购买 nike

我在 App Engine 上有一个服务于图像的 servlet。

servlet 正确设置 HTTP header 值以指示应缓存图像。但是 App Engine 覆盖了这些 header ,导致图像未被缓存。

请注意,相同的代码以前可以工作,但现在有一段时间不工作了。

App 引擎文档指出,如果 Cache-ControlExpiresVary header 由 servlet 设置,它们将保持不变: https://developers.google.com/appengine/docs/java/runtime#Responses

这是我的示例代码:

response.setContentType( "image/jpeg" );
//response.setDateHeader( "Expires", new Date().getTime() + 60L*24*60*60*1000 ); // 60 days cache time
//response.addHeader( "Cache-Control", "public, max-age=5184000" ); // 5_184_000 sec = 60 days cache time
response.addHeader( "Cache-Control", "public, max-age=90000" ); // 90_000 sec = 25 hours cache time
response.getOutputStream().write( data ); // Data is a byte array containing the JPEG image data

(我试过将所有内容都注释掉。)

检查 HTTP 请求-响应,响应包含以下 header :

HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
cache-control: public, max-age=90000
cache-control: no-cache, must-revalidate
content-length: 6777
content-type: image/jpeg
date: Sat, 05 Jan 2013 14:11:47 GMT
expires: Fri, 01 Jan 1990 00:00:00 GMT
pragma: no-cache
server: Google Frontend

如您所见,App Engine 插入了 cache-controlexpirespragma header 以禁用缓存。请注意,这是由于请求具有 cookie header 。还有文档在 https://developers.google.com/appengine/docs/java/runtime#Responses声明在这种情况下(设置 cookie 时),App 引擎会将缓存配置为私有(private),因此浏览器仍然可以缓存它,但不能缓存中间代理服务器。这些 cookie 甚至不是我添加的,而是 Google Analytics 代码添加的(我在页面上启用了 Google Analytics)。

我做错了什么?我怎样才能正确缓存 servlet 响应?

编辑:进一步的调查表明,cookie 被添加到请求中,因为我使用了谷歌身份验证,如果用户使用他/她的谷歌帐户登录,用户相关的 cookie 被添加,这是可以理解的。如果没有用户登录,缓存不会被覆盖。所以我的进一步问题是:当用户使用 Google 帐户登录时,是否有办法缓存 servlet 提供的图像?

编辑,解决方案:如果应用程序的管理员用户是客户端,Google App Engine 只会禁用缓存。在这种情况下,App Engine 会自动插入仅供管理员使用的 header ,例如请求的预估成本。这是私有(private)信息,因此缓存被禁用是可以理解的。

最佳答案

根据文档,仅当登录用户是管理员时才应覆盖 header 。您是否检查过是否属于这种情况?

关于java - 与缓存相关的 HTTP header 在 App Engine 上的 Servlet 响应中被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172758/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com