【问题标题】:How to access ETag header with jQuery AJAX request?如何使用 jQuery AJAX 请求访问 ETag 标头?
【发布时间】:2014-02-15 23:57:13
【问题描述】:

我正在使用 jQuery ajax 调用从在 HTTP 响应标头中发送 ETag 的服务器请求数据。我需要访问标头,但是当请求成功并调用 jqXHR.getAllResponseHeaders() 时,我只看到服务器返回的标头的子集。

例子:

var jqXHR = $.ajax({
        type: 'GET',
        url: <my api url>,
        dataType: 'json',
        ifModified: true,
        success: function (result) {
          var headers = jqXHR.getAllResponseHeaders();
          console.log(JSON.stringify(headers));
        });

我从jqxhr看到的标题是:

Pragma: no-cache\r\n
Last-Modified: Wed, 22 Jan 2014 10:45:14 +0000\r\n
Content-Type: text/html\r\n
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-cache=\"set-cookie\"\r\n
Expires: Sat, 26 Jul 1997 05:00:00 GMT\r\n

从服务器返回的实际标头(在 chrome 开发工具中观察到):

Access-Control-Allow-Origin:*
Cache-Control:no-cache="set-cookie"
Cache-Control:post-check=0, pre-check=0
Cache-Control:no-store, no-cache, must-revalidate
Connection:keep-alive
Content-Encoding:gzip
Content-Length:407
Content-Type:text/html
Date:Fri, 24 Jan 2014 20:27:54 GMT
ETag:"29d8d1d98115057fe902b520199ea1b3"
Expires:Sat, 26 Jul 1997 05:00:00 GMT
Last-Modified:Thu, 23 Jan 2014 07:14:57 +0000
Pragma:no-cache
Server:nginx/1.1.19
Set-Cookie:AWSELB=F3E9557318EB956CA386FC6CB4270164AD7830493699A2B6AED008F4C5F9DB5952A2A1072C33DDC32DEDE0CA6A3734EBAFD51B57A7A093B69A36A6659EF493E1B92BA63DE6;PATH=/
X-Powered-By:PHP/5.4.19

我需要访问 ETag 标头,但 jQuery 或 chrome 似乎对我隐藏了它。我在 Firefox 中尝试了相同的代码,结果相同。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript jquery ajax http-headers etag


    【解决方案1】:

    您可以尝试在完整回调中访问标头而不是成功

    complete: function(XMLHttpRequest, textStatus){
       var eTag = XMLHttpRequest.getResponseHeader('ETag');
    }
    

    这似乎适用于某些用户here

    【讨论】:

      【解决方案2】:

      这可能是 CORS 问题。我遇到了同样的问题,我在 Chrome 中看到了标题 - 但是我的代码无法访问它。

      我的后端有 ASP.Net Web API,必须在 &lt;system.webServer&gt; 节点下添加:

      <httpProtocol>
          <customHeaders>
                <add name="Access-Control-Expose-Headers" value="ETag, Retry-After"/>
          </customHeaders>
      </httpProtocol>
      

      我在阅读以下帖子后意识到这一点: Etag header not returned from jQuery.ajax() cross-origin XHR

      【讨论】:

        猜你喜欢
        • 2018-11-13
        • 1970-01-01
        • 2016-08-08
        • 2011-06-18
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多