window.location.protocol 和 window.isSecureContext 有何不同?

3
在JavaScript中,您可以通过两种方式检查访问的url/网站是否为HttpHttps
  1. window.location.protocol,它返回http:https:

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

我知道window.isSecureContext是非标准的。但假设我知道它在客户端浏览器上可用。
然后,
  1. 这两个只读值之间有什么区别?应该使用哪一个?
  2. 最重要的是,在哪种情况下会出现异常。也就是说,第一种方法显示https:而第二种方法显示false或其他情况。

似乎 isSecureContext 只是一个布尔值返回 (window.location.protocol==='https')。你需要使用 window.location.protocol,因为其他的浏览器实现不完整。 - Álvaro Touzón
2
window.location.protocol could return more values like ftp:, mailto: - Roman
2个回答

2
https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts
安全环境会在它被安全地传递(或本地传递)且不能用于向不安全环境提供访问安全API的情况下被认为是安全的。实际上,这意味着一个页面要想拥有安全环境,它及其所有父级和启动者链中的页面都必须被安全地传输。
例如,通过TLS安全传输的页面如果具有未经安全传输的父文档或祖先文档,则不被视为安全环境,否则页面将能够通过postMessage消息向未经安全传输的祖先暴露敏感API。同样,如果不安全环境打开未指定noopener的TLS传输文档,则不认为打开的窗口处于安全环境之内(因为启动器和打开的窗口可以通过postMessage通信)。
本地传递的文件,如http://localhost和file://路径被视为已经安全地传递了。
(强调我自己加的)

1
window.location.protocol 

返回一个包含当前浏览网站协议的字符串。可能是 "https"、"http" 或者对于本地 HTML 文件是 "file"。

这并不意味着它是安全的。

isSecureContext

另一方面,返回一个布尔值,如果它是安全的则为true,否则为false

例如,以“file”协议为基础的简单静态HTML页面。如果您在控制台中键入“isSecureContext”,它将返回true。本地提供的Web应用程序“localhost”也将返回true,尽管这两个选项都不是基于“https”协议提供的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接