如何验证某个域是不是可以从浏览器访问?
Posted
技术标签:
【中文标题】如何验证某个域是不是可以从浏览器访问?【英文标题】:How to validate that a certain domain is reachable from browser?如何验证某个域是否可以从浏览器访问? 【发布时间】:2017-05-20 17:48:14 【问题描述】:我们的单页应用嵌入了来自 Youtube 的视频,供最终用户使用。如果用户确实有权访问 Youtube 域和该域页面的内容,那么一切都会很好。
然而,我们经常遇到用户访问 Youtube 被他们网络上的网络过滤器框阻止,例如 https://us.smoothwall.com/web-filtering/ 。这里的挑战是过滤器实际上并没有终止请求,它只是返回另一个页面而不是 HTTP 状态 200。该页面通常会说“嘿,抱歉,此内容被阻止”。
一种选择是尝试获取https://www.youtube.com/favicon.ico
以证明该域是可访问的。问题是这些过滤器通常涉及自定义 SSL 证书以允许他们检查 HTTP 内容(请参阅:https://us.smoothwall.com/ssl-filtering-white-paper/),因此我不能依靠 TLS 捕获使用不正确证书为我交换的内容,我会而是收到一个完全有效的favicon.ico
文件,但来自不同站点的文件除外。还有从我们的域针对youtube.com
的域发出XHR 的整个CORS 问题,这意味着如果我想获得favicon.ico
,我必须使用JSONP 样式。但是,即使使用普通的旧 <img>
,由于 CORS,我也无法测试图像的内容,请参阅 Get image data in javascript?,所以我坚持使用这种方法。
是否有任何经过验证且可靠的方法来处理这种情况并测试浏览器级别对特定域的可访问性?
干杯。
【问题讨论】:
【参考方案1】:一般来说,想要正常播放的网络代理通常会使用可以检测到的额外响应标头来注释 HTTP 对话。
因此,构建中间人检测器的一种方法可能是检查这些响应标头并比较在 MITM 之后和不在 MITM 之后的结果。
许多公共网站会显示任意请求的标头; redbot 就是其中之一。
因此,也许您可以要求正在修改内容的一方访问如下网址:youtube favicon via redbot。
一旦收集到足够的样本,您就可以启发式地构建检测器。
此外,某些 CDN(例如 Akamai)将允许客户从其网络中的远程代理位置访问 URL。这可能会提供更好的覆盖范围,尽管它们不太可能位于阻止防火墙的后面。
【讨论】:
以上是关于如何验证某个域是不是可以从浏览器访问?的主要内容,如果未能解决你的问题,请参考以下文章
当我们浏览器访问某个网站时,中间经历了什么,如何到达对方的?