使用Ajax从HTTP300代码响应中提取HTTP头

Extracting HTTP Headers from HTTP 300-code responses using Ajax

本文关键字:提取 HTTP 响应 代码 Ajax HTTP300 使用      更新时间:2023-09-26

我正在向接受跨域请求但无法控制服务器代码的服务器执行Ajax请求。我的愿望是从响应中提取一个HTTP链接头。例如:

$.ajax({
 url: theURL
}).done(function(data,textStatus,xhr){});

命中一个响应如下的服务器(当使用curl查询URL时可以观察到):

HTTP/1.1 302 Found
Link: <http://thedataIwant.com>;rel="foo"
Location: http://someothersite.com

浏览器遵循HTTP 3XX代码,我从http://someothersite.com在CCD_ 1处理程序中;但是,我想首先提取带有3XX代码的初始HTTP响应的Link标头的内容。

如何从具有3XX状态代码的HTTP响应中提取HTTP链接标头的内容?

我对你的问题很感兴趣,尽管我四处寻找解决方案。不幸的是,没有直接的。根据我到目前为止读到的所有帖子(如何在jQueryAjax调用后管理重定向请求以及许多类似的帖子),你不能简单地捕获301重定向,因为浏览器通常会获取内容并将端点提供给用户,这就是为什么你会得到200状态码而不是302。作为一种变通方法,人们建议使用自定义标头。当您在执行ajax请求后收到标头时,您可以进行自己的操作,即保存Link标头,然后进行第二次ajax请求以从MyRedirectLocationHeader: http://someothersite.com获取内容。

代码看起来类似于以下内容:

$.ajax({
    url: theURL,
    success: function(response, status, xhr) {
        var link = xhr.getResponseHeader('Link');
        if(link != null) {
            // my second ajax request to the link in the MyRedirectLocationHeader
        }
    }
});

这是一个看起来很糟糕的破解方法,但这是我迄今为止找到的唯一有效的解决方法。另一种方法可能是使用PHP、Java或其他类似语言创建proxy脚本/服务,该脚本/服务将在不遵循重定向的情况下获得请求,并且仅将LinkLocation打印为done()0或XML。之后,您的javascript将解析响应并继续执行someothersite.com

不过,我感兴趣的是,官方的jQuery ajax文档页面暗示支持3xx重定向(靠近statusCode的文档),但这似乎不起作用。