当我在一个对象上运行cURL以查看其HTTP响应头时(我刚添加了代理标志来模拟浏览器请求):
List
我有:
HTTP/1.1 200 OK Content-Length: 481005 Accept-Ranges: bytes Last-Modified: Tue, 08 Sep 2015 18:37:54 GMT ETag: e9f52648c48c707cb9c17e1871787ad8 X-Timestamp: 1441737473.83703 Access-Control-Allow-Origin: * Content-Type: audio/mpeg X-Trans-Id: tx6531dbbd8dc541eeaf824-0055f0765eiad3 Cache-Control: public, max-age=259169 Expires: Sat, 12 Sep 2015 18:11:11 GMT Date: Wed, 09 Sep 2015 18:11:42 GMT Connection: keep-alive
如你所见,有一个 Access-Control-Allow-Origin 行。
但是当我使用Safari,Chrome或Firefox(没有缓存)请求完全相同的URL时:
Accept-Ranges:bytes Cache-Control:public, max-age=55773 Connection:keep-alive Content-Length:1 Content-Range:bytes 203184-203184/480621 Content-Type:audio/mpeg Date:Wed, 09 Sep 2015 18:14:12 GMT ETag:b1d4c80b2d5d42a4bf6c1ae5efb289e6 Expires:Thu, 10 Sep 2015 09:43:45 GMT Last-Modified:Mon, 07 Sep 2015 09:19:19 GMT X-Timestamp:1441617558.54283 X-Trans-Id:txe8e3941ab1774f4d97794-0055ed5c71iad3
Access-Control-Allow-Origin 刚刚消失!
知道为什么http响应头可以与cURL一起使用但不能与浏览器一起使用吗?谢谢。
答案 0 :(得分:2)
cURL与您的浏览器行为没有区别。
在curl调用中添加-I标志时,会发送“HEAD”请求。在您的浏览器中,这是一个'GET'请求。
如果您使用-i标志卷曲此URL(-i包含输出中的HTTP标头。),您将丢失“Access-Control-Allow-Origin”行:
curl -i -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" http://b17db03a092ebf708b42-9afd7fe2d9c9c6937aeab44904ac3403.r3.cf5.rackcdn.com/artist/samplesong/13111c20aee51aeb480ecbd988cd8cc9.mp3 > C:/curl_return.log
如果你打开文件,你就得到了:
HTTP/1.1 200 OK
Content-Length: 480621
Accept-Ranges: bytes
Last-Modified: Mon, 07 Sep 2015 09:19:19 GMT
ETag: b1d4c80b2d5d42a4bf6c1ae5efb289e6
X-Timestamp: 1441617558.54283
Content-Type: audio/mpeg
X-Trans-Id: tx76217fcbee85481d844ab-0055ed6d83iad3
Cache-Control: public, max-age=56913
Expires: Thu, 10 Sep 2015 10:57:04 GMT
Date: Wed, 09 Sep 2015 19:08:31 GMT
Connection: keep-alive
ID3.................................................................
....................................................................