Leo*_*opd 9 python facebook image cdn
我很难过这个.尝试在浏览器中加载此图像,然后将其保存到硬盘中.
http://profile.ak.fbcdn.net/hprofile-ak-snc4/41674_660962816_995_n.jpg
它是11377字节的有效JPEG文件.
现在尝试用wget或下载它curl.仅显示11252个字节,并且图像的右下部分缺失.
是什么赋予了?
Dav*_*ver 13
开始…
采取数据包转储,我看到Facebook 向Safari 返回与卷曲相同的 Content-Length,并且内容长度是不正确的 11252:
GET /hprofile-ak-snc4/41674_660962816_995_n.jpg HTTP/1.1 User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 Host: profile.ak.fbcdn.net Accept: */* HTTP/1.1 200 OK Content-Type: image/jpeg ... snip .... Content-Length: 11252
并使用Safari:
GET /hprofile-ak-snc4/41674_660962816_995_n.jpg HTTP/1.1 Host: profile.ak.fbcdn.net User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 ... snip ... HTTP/1.1 200 OK Content-Type: image/jpeg ... snip ... Content-Length: 11252
所以我猜猜Facebook发送的内容长度不正确.为了测试这个,我将使用netcat:
$ cat headers GET /hprofile-ak-snc4/41674_660962816_995_n.jpg HTTP/1.0 Host: profile.ak.fbcdn.net Accept: */* EOF $ nc -vvv profile.ak.fbcdn.net 80 output Warning: Inverse name lookup failed for `142.231.1.174' Notice: Real hostname for profile.ak.fbcdn.net [142.231.1.165] is a142-231-1-165.deploy.akamaitechnologies.com profile.ak.fbcdn.net [142.231.1.174] 80 (http) open Total received bytes: 12k (11639) Total sent bytes: 97 $ head output HTTP/1.0 200 OK Content-Type: image/jpeg ... snip ... Content-Length: 11252
(请注意,我使用了HTTP/1.0,因此Facebook服务器不会尝试保持连接打开)
删除前10行ouput使用文本编辑器然后将其保存为output.jpg,我已经获得了完整的图像.
因此,这确认Facebook正在发送错误的Content-Length标题(并且图像正在被切断,因为curl正在关注内容长度而netcat不是).
进一步挖掘,似乎Aleski是正确的 - Content-Length当图像被gzip压缩发送时是正确的.为了确认这一点,我添加Accept-Encoding: gzip到了我的headers文件中.Facebook正确地发送回gzip的响应,这是预期的长度,并且解压缩它会产生正确的图像.
tl;博士:Facebook的Content-Length不正确,如果Content-Encoding不是gzip.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |