0

我在http://profiles.ucsf.edu/Thumbnail.ashx?id=4926871有一张图片,我尝试通过 src.sencha.io 运行它,但是当我执行类似http://src.sencha.io的操作时/80/http://profiles.ucsf.edu/Thumbnail.ashx?id=4926871,然后我从 src.sencha.io 收到 400 错误(错误请求)。

我尝试转义?字符(http://src.sencha.io/80/http://profiles.ucsf.edu/Thumbnail.ashx%3Fid=4926871),但这也不起作用。

我什至尝试双重转义它只是为了确定(http://src.sencha.io/80/http://profiles.ucsf.edu/Thumbnail.ashx%253Fid=4926871)但没有骰子。

我检查了profiles.ucsf.edu 是否返回了一个不稳定的内容类型,但它返回的是image/jpeg,所以这应该很酷。

我尝试通过附加到 URL 的末尾来欺骗 src.sencha.io,&.jpg以查看它是否取决于文件扩展名,但这不起作用。

基于Sencha 论坛中的一个帖子,我尝试了http://src6.sencha.io/80/http://profiles.ucsf.edu/Thumbnail.ashx?id=4926871但也没有运气。

如果我将图像复制到其他地方并通过 src.sencha.io 使用没有 URL 参数的 URL 运行它,它就可以工作。我将它上传到http://imgur.com/L91W7并尝试在http://src.sencha.io/80/http://imgur.com/L91W7.png访问它,这很好。

我可以做些什么来让 src.sencha.io 与profiles.ucsf.edu URL 很好地配合,还是我不走运?

4

1 回答 1

3

源服务器未设置 HTTP Content-length 标头(也不使用分块):

sh-4.1$ wget http://profiles.ucsf.edu/Thumbnail.ashx?id=4926871
--2012-09-26 14:50:53--  http://profiles.ucsf.edu/Thumbnail.ashx?id=4926871
Resolving profiles.ucsf.edu... 64.54.132.33
Connecting to profiles.ucsf.edu|64.54.132.33|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [image/jpeg]

目前 src.sencha.io 将在任何省略 Content-length 标头且不使用分块编码的 HTTP 响应上失败。这是服务器出于资源限制原因检查响应大小的副作用。400 状态有点令人困惑,因为实际上操作由于违反约束而失败,但 400 响应页面仅讨论输入参数的正确性。

这解释了为什么当图像被复制到不同的 HTTP 服务器时您的请求有效。该服务器正在设置 Content-length 标头:

sh-4.1$ wget http://imgur.com/L91W7.png
--2012-09-26 15:05:05--  http://imgur.com/L91W7.png
Resolving imgur.com... 54.243.206.51, 23.23.110.81, 23.23.110.58
Connecting to imgur.com|54.243.206.51|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://i.imgur.com/L91W7.png [following]
--2012-09-26 15:05:05--  http://i.imgur.com/L91W7.png
Resolving i.imgur.com... 72.21.81.253
Connecting to i.imgur.com|72.21.81.253|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72842 (71K) [image/png]

我目前知道的唯一解决方法是安排您的 HTTP 服务器发送分块响应或设置 Content-length 标头。HTTP 1.1 规范允许服务器响应,因为它关闭了连接,但 src.sencha.io 目前不会接受该响应。

您的服务器是 IIS 6.0。我做了一些研究,看看省略 Content-length 标头是否是 IIS 6.0 中的一个已知错误。结果尚无定论。有一些关于“压缩静态文件”选项的讨论可能会导致这个问题,但可能是一个红鲱鱼。如本文所述,问题可能出在某处损坏的代理中。

顺便说一句,在诊断这个问题时要小心,我们经常看到“客户端”网络设备会修复缺少 Content-length 标头 (!) 的 HTTP 响应,要么添加它,要么将响应转换为分块的响应。因此,请务必从具有 100% 干净连接且没有代理或其他诱骗盒子的机器进行测试。

于 2012-09-26T21:29:47.123 回答