2

在 JavaScript 中,您可以通过 2 种方式检查访问的 url/网站是否结束HttpHttps

  1. window.location.protocol返回http:https:

  2. window.isSecureContext它返回trueforhttpsfalsefor http

我知道这window.isSecureContext是非标准化的。但是可以说我知道它在客户端浏览器上可用。

然后,

  1. 这两个只读值有什么区别?使用哪一个?
  2. 最重要的是,在这种情况下会出现异常。意思是,第一种方法说https:,而第二种方法说false或其他方式。
4

2 回答 2

2

来自https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts

当一个上下文被安全地(或本地)交付时,并且当它不能用于提供对不安全上下文的安全 API 的访问时,上下文将被认为是安全的。在实践中,这意味着对于具有安全上下文的页面,它以及其父链和开启链上的所有页面都必须已安全交付

例如,如果通过 TLS 安全交付的页面具有未安全交付的父文档或祖先文档,则该页面不被视为安全上下文,因为否则该页面将能够通过 postMessage 向非安全交付的祖先公开敏感 API消息。类似地,如果 TLS 传递的文档在新窗口中由不安全的上下文打开而没有指定 noopener,则打开的窗口不被视为安全上下文(因为打开的窗口和打开的窗口可以通过 postMessage 进行通信)。

本地交付的文件,例如http://localhost和 file:// 路径被认为已安全交付。

(强调我的)

于 2017-11-03T07:50:47.307 回答
0
window.location.protocol 

返回一个字符串,其中包含您当前正在浏览的网站的协议。对于本地 HTML 文件,它可能是“https”、“http”、“file”...

这确实意味着它是安全的。

isSecureContext

另一方面,返回一个布尔值,true如果它是安全的,或者false不是。

以带有“文件”协议的简单静态 HTML 页面为例。如果您在控制台中键入“isSecureContext”,它将返回 true。本地服务的 Web 应用程序“localhost”也将返回 true,尽管最后两个不是在“https”协议上提供的。

所以是的。这两个选项确实彼此不同。

于 2020-04-15T22:58:48.157 回答