如何在重定向 URL 的标头中拦截和获取位置

How to intercept and get Location in header for redirect URL?

本文关键字:位置 获取 重定向 URL      更新时间:2023-09-26

我有一个在休息调用中传递给我的 uri,它是一个重定向 URL,我希望能够拦截调用以获取标头中的重定向"位置"。

以下代码为位置标头返回 null。执行此客户端的正确方法是什么?

$(document).ready(function () {
    $.ajax({
        url: 'http://myserver.com/redirect?token=AAAnY13Y-76LZ4zXDOd',  // obviously not cross domain and contains redirect location to a youtube link to embed in my page, http://www.youtube.com/embed/bl2j345-xy
        data: {
            something: 'someotherthing'
        },
        complete: function (request, status) {
            var location = request.getResponseHeader("Location");  // this is null...it shows up in Fiddler as http://www.myotherserver.com in the Location Header
        },
        error: function (request, error) {
            alert(request.responseText);
        }
    });
}); 

使用这个小提琴。我稍微更新了您的代码,添加了一些用于调试的控制台输出,因为我目前总是收到错误:NETWORK_ERR: XMLHttpRequest Exception 101

我所做的主要更改(我认为可能是您的空标题的原因)是设置async: false。这很重要,因为您不希望请求在完成之前返回。如果未指定,则默认设置为 async: true,这会导致 ajax 调用立即返回,这可能就是为什么即使调用成功也不会看到响应标头的原因。

我还添加了一个带有简单调试的success: function...回调,以确保它在进入那里时被捕获。

另请查看 ajax 文档中有关跨域非异步请求和跨域设置的部分:

异步
默认值:真
默认情况下,所有请求都是异步发送的(即默认情况下设置为 true)。 如果需要同步请求,请将此选项设置为 false。 跨域请求和数据类型:"jsonp"请求不支持 同步操作。

跨域(新增 1.5)
默认值:对于同一域请求为 false,对于跨域请求
为 true,则为 true 如果您希望在同一域上强制跨域请求(例如 JSONP),请将 跨域的值为 true。例如,这允许服务器端 重定向到另一个域。

我不确定重定向是否被视为跨域重定向,但我猜上述因素的组合是导致错误和空请求标头的原因。

为什么不设置 -> http://myserver.com/redirect?token=AAAnY13Y-76LZ4zXDOd 以返回重定向位置 http://www.myotherserver.com所以:

complete: function (request, status) {
window.location.href=request;
}