检查未知/远程服务器是否支持 HTTPS
Check if unknown / remote server supports HTTPS
是否可以检查远程服务器是否支持 https?
目前我正在请求 https,如果它不起作用,请重试 http,如果仍然不起作用,则显示错误。
HTTP 中是否嵌入了指示是否支持 https 的功能?
我的意思不是重定向等,因为这些必须在服务器上实现,并不总是如此。
默默地回退到 HTTP 听起来很危险。攻击者(即 man-in-the-middle)可能会阻止您对 HTTPS 的请求,从而迫使您使用不安全的通道。因此,我一般不推荐这种方法。
一般来说,您应该让用户决定使用哪种协议。如果他们指定 https,你不应该静默降级,而是抛出一个错误。但是,如果他们指定了 http,也可以先尝试 https,如果失败则静默回退到 http(因为他们首先请求了 http)。
一个笼统的回答你的请求:你只能尝试https来检查服务器是否支持https。有一个名为 HTTP Strict Transport Security (HSTS) 的 HTTP(s) 扩展,它允许服务器指示对它们的所有请求应始终仅通过安全通道执行。如果您在 HTTPS 请求的响应中收到这样的 header,您可以在将来为主机强制使用 https。请注意,您必须忽略通过不安全的 HTTP 接收的此类 header。
一般来说,您不能相信通过明文 HTTP 收到的任何信息会向您提供有关服务器安全选项(例如对 TLS 的支持)的任何指示,因为此信息可能会被 man-in-the-middle 攻击者。事实上,防止此类不可检测的更改是首先使用 TLS / HTTPS 的主要原因之一。
是否可以检查远程服务器是否支持 https?
目前我正在请求 https,如果它不起作用,请重试 http,如果仍然不起作用,则显示错误。
HTTP 中是否嵌入了指示是否支持 https 的功能?
我的意思不是重定向等,因为这些必须在服务器上实现,并不总是如此。
默默地回退到 HTTP 听起来很危险。攻击者(即 man-in-the-middle)可能会阻止您对 HTTPS 的请求,从而迫使您使用不安全的通道。因此,我一般不推荐这种方法。
一般来说,您应该让用户决定使用哪种协议。如果他们指定 https,你不应该静默降级,而是抛出一个错误。但是,如果他们指定了 http,也可以先尝试 https,如果失败则静默回退到 http(因为他们首先请求了 http)。
一个笼统的回答你的请求:你只能尝试https来检查服务器是否支持https。有一个名为 HTTP Strict Transport Security (HSTS) 的 HTTP(s) 扩展,它允许服务器指示对它们的所有请求应始终仅通过安全通道执行。如果您在 HTTPS 请求的响应中收到这样的 header,您可以在将来为主机强制使用 https。请注意,您必须忽略通过不安全的 HTTP 接收的此类 header。
一般来说,您不能相信通过明文 HTTP 收到的任何信息会向您提供有关服务器安全选项(例如对 TLS 的支持)的任何指示,因为此信息可能会被 man-in-the-middle 攻击者。事实上,防止此类不可检测的更改是首先使用 TLS / HTTPS 的主要原因之一。