【问题标题】:HTTP Header in Response exists with a CURL request but not with Browser request响应中的 HTTP 标头存在于 CURL 请求中,但不存在于浏览器请求中
【发布时间】:2015-12-05 20:37:28
【问题描述】:

当我在一个对象上运行 cURL 以查看其 HTTP 响应标头时(我只是添加了代理标志来模拟浏览器请求):

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

我有:

HTTP/1.1 200 正常 内容长度:481005 接受范围:字节 最后修改时间:2015 年 9 月 8 日星期二 18:37:54 GMT ETag:e9f52648c48c707cb9c17e1871787ad8 X-时间戳:1441737473.83703 访问控制允许来源:* 内容类型:音频/mpeg X-Trans-Id:tx6531dbbd8dc541eeaf824-0055f0765eiad3 缓存控制:公共,最大年龄=259169 过期:2015 年 9 月 12 日星期六 18:11:11 GMT 日期:格林威治标准时间 2015 年 9 月 9 日星期三 18:11:42 连接:保持活动

如您所见,有一个 Access-Control-Allow-Origin 行。

但是当我使用 Safari、Chrome 或 Firefox(无缓存)请求完全相同的 URL 时:

接受范围:字节 缓存控制:公共,最大年龄=55773 连接:保持活动 内容长度:1 内容范围:字节 203184-203184/480621 内容类型:音频/mpeg 日期:格林威治标准时间 2015 年 9 月 9 日星期三 18:14:12 ETag:b1d4c80b2d5d42a4bf6c1ae5efb289e6 过期时间:周四,2015 年 9 月 10 日 09:43:45 GMT 最后修改时间:星期一,2015 年 9 月 7 日 09:19:19 GMT X-时间戳:1441617558.54283 X-Trans-Id:txe8e3941ab1774f4d97794-0055ed5c71iad3

Access-Control-Allow-Origin 刚刚消失了!

知道为什么 http 响应标头适用于 cURL 但不适用于 Browser 吗?谢谢。

【问题讨论】:

    标签: curl http-headers xmlhttprequest cors response-headers


    【解决方案1】:

    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.................................................................
    ....................................................................
    

    【讨论】:

    • 这很奇怪,因为我在 GET 响应中配置了它但我看不到它。
    • 你在哪里配置的?在您的应用中还是在您的服务器上?
    • 在 rackspace 上,问题可能出在 rackspace 上?
    • 我真的不知道 rackspace。但也许这会有所帮助:stackoverflow.com/questions/26865630/…
    • 我在这里遇到了一个不同的问题,该问题也与这个问题的标题相匹配。除了用户代理,gzip 和 http 版本也值得一试(curl --http1.1 -H "Accept-Encoding: gzip")。就我而言,gzip 在我的服务器上中断,但它在 curl 中工作,因为 curl 没有像浏览器那样默认启用 gzip。
    猜你喜欢
    • 2021-02-21
    • 2018-06-08
    • 2015-11-30
    • 1970-01-01
    • 2016-08-25
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多