在JavaScript中,您可以通过2种方式检查访问的url/网站是否超过Http
或Https
-
返回
http:
或https:
的window.location.protocol
-
window.isSecureContext
它为https
返回true
,为http
返回false
。
我知道window.isSecureContext
是非标准化的。但是假设我知道它在客户端浏览器上可用。
然后
- 两个只读值有什么区别?使用哪一个?
- 最重要的是,在这种情况下会出现异常。意思是,第一种方法说
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"协议上提供的。
所以是的。这两种选择确实是彼此不同的。