HEAD请求似乎是传输资源,而不仅仅是标头

时间:2011-01-17 20:36:12

标签: javascript jquery ajax header content-length

看来我通过jQuery的HEAD方法发送的$.ajax({...});请求正在返回给定资源的内容(至少在Firefox中...... IE似乎正常运行),而不是而不仅仅是标题。我正在尝试仅捕获Content-Length标头属性,以便在图像预加载器中使用,但似乎仅通过查询Content-Length,它就会下载内容本身。

此处的操作顺序为:

  • 使用CSS background-image查找给定页面中的所有元素,并使用网址填充数组(imageTemp)。
  • 对于每个图片网址,执行Ajax HEAD请求,获取Content-Length并将其添加到bytesTotal以及填充数组(imageData)网址和该图片的Content-Length
    • 同时,启动setInterval事件处理程序以定期检查是否所有Ajax HEAD请求都已完成。
  • HEAD请求完成后,开始将图片加载到Image()的{​​{1}}个对象中,并将关联的图片imageData值添加到Content-Length值\
  • 加载完成bytesLoaded张图片后,预加载器已完成。

这是我目前的脚本:

bytesLoaded == bytesTotal

这与我在Ajax HEAD request via Javascript/jQuery的问题直接相关,但它肯定不重复,因为问题已从先前解决的问题扩展。

2 个答案:

答案 0 :(得分:2)

我鼓励您设置Fiddler(或其他一些HTTP数据包嗅探器)并查看实际通过线路的内容 - 发送的确切请求和收到的确切响应。这将帮助您解决问题是在服务器还是客户端上。

答案 1 :(得分:1)

看起来很奇怪。这应该“应该”起作用。

我无法肯定地说这是问题,但是我在这里就是这样:

如果您执行HEAD请求,服务器本身不应该向您发送超过头数据。 几乎每一个你可以获得的网络服务器都是为了这一点。

因此不太可能出现服务器问题。但是它可能,取决于运行的应用程序。

但是我在许多爬行环境和事情中已经多次看到这个问题,并且一个非常常见的失败点是重定向。

许多内部库遵循重定向(正如他们应该的那样),但“忘记”了HEAD请求。

我曾经查过RFC,但还不清楚到底应该做些什么。

但是非常严格地解释了HEAD请求应该给你Location头。

但是大多数“用户”可能期望重定向背后的任何头部数据。

例如,Zend ZF直到今天还有这个问题。 scrapy在以后的版本中修复了它。

很抱歉,我无法给你一个更好的答案,但你的代码在这个问题上看起来是正确的,所以它的一些试错调试......