我有一个很大的问题:请参阅下面的示例链接。我的应用程序目前将所有“资源/链接”附加到会话ID。我或多或少偶然发现了Firefox缓存:
http://localhost:8080/jquery-ui-1.7.2.custom.css;jsessionid=A8483FBF3BB6DDA499E06210BE0D612C
我的一个大问题是,像上面这个URL这样的URL是否会导致这样的事实:任何缓存标题(我使用几年的Cache-Control)都会变得或多或少无用,因为会话ID会使每个请求都唯一?
(==>我的意思是,新的sessionID在30分钟后被分配。缓存很可能只在这段时间内有效。在此期间之后,将生成一个新的会话ID,间接使所有会话无效客户端上的缓存内容,其URL中的SessionID = url会发生变化,因为它现在有一个新的sessionID。)
=>浏览器是否智能化以发现要缓存的资源是:
http://localhost:8080/jquery-ui-1.7.2.custom.css
而不是:
http://localhost:8080/jquery-ui-1.7.2.custom.css;jsessionid=A8483FBF3BB6DDA499E06210BE0D612C
或者url中的sessionId会导致在浏览器中或多或少地禁用缓存吗?
非常感谢! 扬
答案 0 :(得分:3)
这不是浏览器是否足够聪明的问题。 W3 standard for HTTP表示应分别缓存不同的网址。所以浏览器在观察完整的URL时是正确的,包括GET参数,例如缓存中的会话ID。
您不应该将会话ID附加到静态的任何(例如样式表)。
答案 1 :(得分:3)
你是对的 - 浏览器不够智能,改变的URL会非常有效地否定缓存。
为什么首先会有会话ID?如果资源不依赖于会话,则从URL中删除会话ID,这将解决您的问题。如果资源是与会话相关的,那么您已经拥有了所需的一切,因为一个会话不应该使用来自另一个会话的资源。