使用JavaScript修改客户端的HTTP标头

时间:2009-08-06 04:43:37

标签: javascript caching http-headers

是否可以使用JavaScript动态更改从外部源加载图像时收到的HTTP标头?我正在尝试控制图像的缓存(ExpiresMax-Age等...)客户端,因为我无法访问服务器。

3 个答案:

答案 0 :(得分:5)

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

什么是可能的

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

e.g。如果你想确保每小时都有一个新文件

<script type="text/javascript">

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

</script>

这样做是为了向网址添加包含年,日和小时的值,因此每小时都是唯一的,因此可以确保新的文件请求。 (未经测试!)

显然,这可以更加通用和精细调整,但希望你能得到这个想法。

什么是不可能的

您不能做的是确保不会从服务器检索新版本。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我不认为Javascript实际上可以这样做:浏览器请求图像,并且由他来定义要发布的HTTP标头。

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

如果您希望图片通过浏览器保存在缓存中,则服务器必须在回复中发送正确的标头(例如Etag和/或过期 - 请参阅mod_expires,例如,Apache)

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


编辑问题后编辑:

Expires标头由服务器生成,并且是响应中的标头之一(它不是客户端在请求中发送的标头;请参阅List of HTTP headers)。

所以,你绝对无法从客户端控制它:它是必须配置为完成工作的服务器,这里......


如果你想要更多的答案:你究竟想做什么?为什么?