2009-08-06 122 views
1

从外部源加载图像时,是否可以使用JavaScript来动态更改收到的HTTP头信息?我试图控制图像的缓存(Expires,Max-Age等)客户端,因为我没有访问服务器。使用JavaScript修改HTTP头客户端

+0

这与编程无关? (听起来很奇怪,通常是相反的......) – Kobi 2009-08-06 04:53:24

+0

** @ Kobi:**我修改了这个问题(为了清晰起见)。 – 2009-08-06 04:57:28

回答

1

我不认为Javascript实际上可以做到这一点:图像被浏览器请求,并由他来定义HTTP头问题。

使用某些自定义标题的一种方法是使用某种Ajax请求,但不传递任何<img>标记;但你必须知道如何处理返回的数据......不要认为这会有很大帮助。

如果你想通过浏览器保存在缓存您的图片,您服务器发送的响应中的右头(如Etag,和/或到期 - 见mod_expires,为Apache,例如)

如果您想绝对确定浏览器将下载新图片,而不是使用它在缓存中的版本,则应每次使用不同的URL。
这通常使用时间戳作为URL的参数来完成;比如example.com/image.jpg?123456789 (123456789或多或少是当前的时间戳 - 显然少于更多,但你会明白:每秒浏览器将看到URL已更改)

问题的编辑后


编辑:

由服务器生成的Expires头部,并且是进来的响应报头中的一个(它不是一个报头中的客户端的请求发送;参见List of HTTP headers )。

所以,你是绝对有来自客户端没有对其进行控制:这是必须配置做工作,这里的服务器...


如果你想要更多的答案:你是什么试图做到完全?为什么?

+0

想要设置从外部源到客户端使用客户端技术而不是服务器(tomcat,apache)通过ajax的图像/闪存获取的更长过期max-age – cometta 2009-08-06 06:07:32

2

缓存指令在服务器的责任。你不能在客户端操纵它们。

也许您可以选择安装代理服务器,例如如果你瞄准公司员工?

5

正如其他人所说的,不,它不可能在客户端代码中操作来自服务器的http头和缓存指令。

什么是可能的

你做什么必须做的能力是确保你得到一个新的文件。这可以通过将唯一字符串附加到请求的URL作为查询字符串参数来完成。

例如如果你想确保你得到了每一个小时

<script type="text/javascript"> 

var d = new Date(); 
url += ("?" +d.getYear() + "_" + d.getDay() + "_" + d.getHours()); 

</script> 

这样做是添加包含年,日,时的URL的值一个新的文件,所以这将是每个小时独特的,从而确保新文件请求。 (未测试!)

很明显,这可以做得更加通用,也可以进行微调,但希望你能明白。

什么是不可能的

什么,你不能做的是确保你不会从服务器检索新版本。

+0

另一个注意事项:如果您不想缓存,可以使用'd。 getTime();'为时间戳,它会附加一个数字,比如'1249547501178' – Kobi 2009-08-06 08:32:42