为什么写这个呢,原因是我司在搞域名迁移整理时,发现有些资源CDN域名在代码逻辑中是不带协议的,所以探索了一下原因,特地记录一下。
一、 带协议与不带协议的区别
-
xxx.com
:这只是一个域名,没有指定使用哪种协议来访问该网站。
如果你在浏览器中输入这样的地址,浏览器会默认使用 HTTP 协议来访问该网站。
如果服务器支持 HTTPS,浏览器也可以在
必要时
将连接升级为安全的 HTTPS 连接。 -
https://xxx.com
:这包含了协议部分
https
,它指示了使用安全的 HTTP 协议来访问该网站。HTTPS 使用了 SSL/TLS 加密来保护数据传输的安全性,适用于敏感信息(例如登录信息、支付信息)的传输。
二、必要时
如何理解
必要时
指的是当浏览器检测到服务器支持 HTTPS,并且用户访问的网址可以通过 HTTPS 安全连接访问时。
具体来说,以下是一些情况下会发生这种情况:
-
HSTS (HTTP Strict Transport Security) 设置
如果网站在响应 HTTP 请求时发送了 HSTS 头部,浏览器将会记住该网站只能通过 HTTPS 访问。这意味着即使用户最初通过 HTTP 访问了该网站,浏览器也会自动将后续的请求升级为 HTTPS。
示例图:
-
用户手动输入 HTTPS 地址
如果用户在浏览器中直接输入了以
https://
开头的网址,浏览器会直接使用 HTTPS 协议进行连接。 -
自动重定向
有些网站会将所有的 HTTP 请求自动重定向到 HTTPS。这样,即使用户最初输入了 HTTP 地址,服务器也会在接收到请求后发送一个特殊的响应,告诉浏览器用 HTTPS 重新访问。
示例图:
总的来说,在现代浏览器中,当服务器支持 HTTPS 时,浏览器会尽可能地使用安全的 HTTPS 连接来访问网站,以确保用户的数据安全。
三、Non-Authoritative-Reason: HSTS
Non-Authoritative-Reason: HSTS
是一个特定于微软服务器的头部(HTTP 响应头部),它通知客户端(通常是浏览器)服务器的响应并不是来自于该资源的权威来源,而是由于 HSTS(HTTP Strict Transport Security)策略而进行了强制转发。
具体来说,当一个客户端发送一个 HTTP 请求,并且该请求被重定向到一个 HTTPS 地址时,如果响应包含 Non-Authoritative-Reason: HSTS
头部,这意味着服务器告诉客户端,该响应是由于 HSTS 策略而进行的重定向,而不是来自于资源的权威来源。
这通常会在服务器在 HSTS 策略生效的情况下,收到一个 HTTP 请求时,将其强制重定向到相应的 HTTPS 地址时使用。这样做是为了确保所有的通信都是经过安全的 HTTPS 连接进行的,以保护通信的安全性和隐私性。
请注意,Non-Authoritative-Reason: HSTS
这个头部可能只在特定类型的服务器配置或者特定的网络环境下出现,而在其他情况下可能不会出现。