使用Ajax从HTTP300代码响应中提取HTTP头
Extracting HTTP Headers from HTTP 300-code responses using Ajax
我正在向接受跨域请求但无法控制服务器代码的服务器执行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
脚本/服务,该脚本/服务将在不遵循重定向的情况下获得请求,并且仅将Link
和Location
打印为done()
0或XML
。之后,您的javascript将解析响应并继续执行someothersite.com
不过,我感兴趣的是,官方的jQuery ajax文档页面暗示支持3xx
重定向(靠近statusCode
的文档),但这似乎不起作用。
- Meteor如何接收HTTP请求
- 在数据提取完成之前进行页面渲染
- 在我的情况下,如何进行http请求
- //而不是在src=“”上使用http://"属性
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何在Javascript中从字符串中提取某些单词
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- RegEx JavaScript:数字后的符号提取
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 角度http服务器页面刷新404s
- 从 HTTP 请求中提取额外的参数
- 正则表达式提取 http 授权标头
- Angular2:从http.get响应中提取数组元素
- 提取搜索引擎'关键字与javascript和HTTP-referer
- 使用Ajax从HTTP300代码响应中提取HTTP头
- 如何在Javascript中从AtomPub XML HTTP响应中提取值(用于Google Apps Admin Se
- 如何使用node.js从HTTP资源中提取ZIP文件