当用户访问启用了 HSTS 的网页时,浏览器会检测到这一点,并会记住在将来使用 HTTPS 来请求该站点。有没有办法在 AS3 中请求页面并确定返回的页面是否启用了 HSTS(直接通过 SWF 中的 AS3 或使用 ExternalInterface)?
1 回答
就像维基百科定义的那样,HSTS(HTTP Strict Transport Security)是一种信息,它
... 由服务器通过名为“Strict-Transport-Security”的 HTTP 响应标头字段与用户代理通信。
在这里我们可以理解,这些信息只能从 HTTP 响应头中获得。对于 Flash,不可能获取 HTTP 响应标头,这与 AIR 能够使用HTTPStatusEvent获取它不同:
在 Flash Player 中,只有一种 HTTPStatus 事件:httpStatus。在 AIR 运行时中,FileReference、URLLoader 或 URLStream 可以注册以侦听 httpResponseStatus,其中包括 responseURL 和 responseHeaders 属性。这些属性在 httpStatus 事件中未定义。
对于 javascript(或 ExternalInterface,如果需要),要获取 HTTP 响应标头,您必须使用 AJAX,它只能通过启用CORS(跨域资源共享)启用客户端跨域请求的服务器来获取,否则,您将被服务器阻止,您的浏览器将向您显示一个漂亮的“ No Access-Control-Allow-Origin ... ”错误,当然所有这些都是使用可以跨域执行 XMLHttpRequests 的浏览器。
结论:无论是否启用了 HSTS,Flash 和 javascript(可能在某些情况下启用了 CORS)都无法真正获得。