有没有办法查看 XMLHttpRequest 检索到的最终 URL?

Posted

技术标签:

【中文标题】有没有办法查看 XMLHttpRequest 检索到的最终 URL?【英文标题】:Is there a way to see the final URL retrieved by an XMLHttpRequest? 【发布时间】:2010-12-20 03:08:42 【问题描述】:

我正在执行重定向的 AJAX 下载。我想知道请求重定向到的最终目标 URL。我使用的是 jQuery,但也可以访问底层的 XMLHttpRequest。有谁知道获取最终 URL 的方法吗?

看来我需要让最终目标将其 URL 插入标头或响应正文中的已知位置,然后让脚本在那里查找它。不过,我希望有一些可以不管目标如何工作的东西。

附加说明:我在问我的代码如何从生产代码中获取完整的 url,生产代码将从用户的系统运行。我不是在问我调试时如何获得完整的 url。

【问题讨论】:

【参考方案1】:

最简单的方法是使用 Fiddler 或 Wireshark 检查 HTTP 流量。如果您的界面使用浏览器,请在客户端使用 Fiddler,否则使用 Wireshark 捕获网络上的流量。

【讨论】:

【参考方案2】:

一个词——Firebug,它是一个Firefox 插件。没有它,永远不要进行任何类型的 AJAX 开发。

激活 Firebug 并选择 Net,然后执行 AJAX 请求。这将显示被调用的 URL、整个请求(标头和正文)和整个响应(再次,标头和正文)。它还允许您单步执行 javascript 并对其进行调试 - 断点、监视等。

【讨论】:

【参考方案3】:

我会支持 Firebug 的建议。您会在 http 响应中看到 url 作为“Location”标头。 听起来你也想在 js 中获取这个 url?如果是这样,您可以从回调中的 xhr 响应对象中获取它(您也可以使用 FB 进行检查!)。 :)

【讨论】:

感谢您认识到我需要以编程方式执行此操作。但是我不认为位置标题会起作用。 Location 标头是重定向响应的标头,而不是最终响应。 XHR 标头的集合将代表最终响应,而不是位置标头。我没有看到具有该位置的其他 HTTP 标头。 这杯咖啡不好喝。更正:“将代表最终响应,而不是重定向响应”。 嗯,我想我还没有遇到过这个......当一个 xhr 被重定向时,它不会产生一个新的 xhr 吗?我猜您是说它使用现有的并且您丢失了原始响应标头? myReq.xmlhttp.getAllResponseHeaders()? tcpmon 或 fiddler 是否显示 2 个请求?干杯! ss ulrey,不,它不会产生新的 XHR。原始 XHR 将继续解析位置重定向(直到浏览器确定它已经重定向了太多次),最终响应将是根据 XHR 的“响应”。

以上是关于有没有办法查看 XMLHttpRequest 检索到的最终 URL?的主要内容,如果未能解决你的问题,请参考以下文章

用回调函数创建一个XMLHttpRequest,并从一个TXT文件中检索数据。

IE 中的 XMLHttpRequest.responseURL

XMLHttpRequest 可以获取数据显示在网页上

跨域 xmlhttprequest.response

我可以向另一个域发出 XMLHttpRequest 吗?

创建 XMLHttpRequest 对象时IE的兼容问题解决办法