window.location.protocol 和 window.isSecureContext 的区别?



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

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

  2. window.isSecureContext它为https返回true,为http返回false

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

然后

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

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

上下文安全(或本地)交付时,并且当它不能用于提供对不安全上下文的安全 API 的访问时,它将被视为安全。实际上,这意味着要使页面具有安全的上下文,它及其父链和打开器链上的所有页面都必须安全交付

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

本地传送的文件(如 http://localhost 和 file://路径)被视为已安全传送。

(强调我的)

window.location.protocol 

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

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

isSecureContext

另一方面,返回一个布尔值,true如果安全,则返回false

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

所以是的。这两种选择确实是彼此不同的。

最新更新