【发布时间】:2011-02-11 14:15:55
【问题描述】:
这可能是this question 的.NET 版本。
我有一个包含以下内容的图像脚本:
...
Response.WriteFile(filename);
Response.End();
我正在使用web.config 中的以下重写规则重写 .jpg 文件:
<rule name="Image Redirect" stopProcessing="true">
<match url="^product-images/(.*).jpg" />
<conditions>
<add input="{REQUEST_URI}" pattern="\.(jp?g|JP?G)$" />
</conditions>
<action type="Rewrite" url="/product-images/ProductImage.aspx?path=product-images/{tolower:{R:1}}.jpg" />
</rule>
它基本上只是将图像路径重写为查询参数。
问题在于(当然是间歇性地)Mosso 返回了一个新的 ASP Session cookie,它破坏了整个世界。
- 直接访问静态 .jpg 文件不会导致此问题。
- 直接访问图像脚本也不会导致它。
- 仅将 .jpg 文件重写为 .aspx 脚本会导致会话丢失。
这不是一个重定向循环——图像出现了,但是缓存服务器提交了一个新的会话 cookie,它(因为它来自我的主机名)导致会话重置。
我尝试过的事情
(来自 Rackspace 文档How can I bypass the cache?)
我在图像脚本本身中添加了Private 可缓存性:
Response.Cache.SetCacheability(HttpCacheability.Private);
我尝试将这些禁用缓存的节点添加到 web.config:
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
和
<httpProtocol>
<customHeaders>
<add name="Cache-Control private" value="Cache-Control private"
</customHeaders>
</httpProtocol>
我需要的解决方案
无法禁用浏览器缓存。这意味着涉及Cache.SetNoStore() 或HttpCacheability.NoCache 的潜在解决方案将不起作用。
交替...
请告诉我为什么无法解决这个问题。
【问题讨论】:
-
我有一个解决方法,它只使用“images.domain.com”来显示图像 - 如果会话在该图像上丢失,那么就是这样。域它不会损害主站点。
标签: .net url-rewriting session-state mosso rackspace-cloud