客户端 - 如何获取任何网站的“位置”标题?

时间:2017-03-08 03:42:29

标签: javascript

在您说不可能之前,请参阅here。我只需要停止重定向自动重定向网址,并获取它尝试重定向到的页面。我更喜欢“位置”标题,但如果有另一种方式,那就太棒了。

似乎XMLhttpRequest似乎不起作用,因为发送请求,url必须在同一个域上,这不是这种情况。请帮忙!!!

1 个答案:

答案 0 :(得分:2)

看起来hurl.it不使用XMLHttpRequest,而是他们自己发出请求(服务器端),让他们选择是否遵循重定向(例如,.NET的{{1} 1}} property)。

在客户端JavaScript中,您必须使用HttpWebRequest.AllowAutoRedirect,遗憾的是,没有API可以禁用重定向。

然而有一个名为Fetch的新网络API,自版本14以来一直受Chrome支持,自版本14以来支持Edge,自版本39以来支持Firefox。

使用XMLHttpRequest,您可以选择不遵循重定向,如下所示:

Fetch

这可以更简洁:

var url = "http://assetgame.roblox.com/asset/?id=1818";
var fetchOptions = {
    redirect: 'manual' // use "manual" to disable the automatic following of redirections
};
var request = new Request( url, fetchOptions );

window
    .fetch( request )
    .then( function( response ) {

        alert( response.headers.get('Location') );

    } );

更新

根据文档,遗憾的是,fetch( "http://assetgame.roblox.com/asset/?id=1818", { redirect: 'manual' } ) .then( res => alert( res.headers.get('Location') ) ); 标题不会向客户公开:

  

http://xcatliu.com/fetch/#atomic-http-redirect-handling
  在整个平台中,重定向(其状态或内部响应(如果有)状态为重定向状态的响应)不会暴露给API。公开重定向可能会泄漏通过跨站点脚本无法获得的信息攻击。

因此,只有Location API添加的值才是更简洁的请求/响应API,并且能够检测重定向并选择不关注它们(与Fetch不同这将始终遵循重定向),但不幸的是你无法获得原始标题。

请注意,WebSockets不会公开真正的TCP套接字连接,因此您无法使用WebSockets连接到任意网络服务。