【问题标题】:does http redirection happens before request body is sent or after?http重定向是在请求正文发送之前还是之后发生的?
【发布时间】:2017-12-01 04:05:55
【问题描述】:

假设用户向http://example.com/data提出请求(get|post)

现在我已经设置好服务器,nginx,将所有请求重定向到 https。

所以浏览器再次发送请求,但通过 https 协议。

我的问题是服务器是否告诉浏览器在读取 http 标头后立即重定向,或者它可能已经在请求正文中获取数据,然后告诉浏览器请通过 https 发送。

因为如果是后者,敏感数据已经通过不安全的方法发送。

我知道为了防止这种情况,我可以在 html 文件中包含重定向,还有其他方法吗?

【问题讨论】:

  • “我知道为了防止这种情况,我可以在 html 文件中包含重定向,...” - 我怀疑这会有所帮助。如果要确保不使用 HTTP 传输敏感数据,则必须首先确保不尝试使用 HTTP 发送数据。可能有帮助的是 HSTS 标头,以便(至少支持的浏览器)在第一次访问后永远不会尝试 HTTP,或者您的服务器只支持 HTTPS 而根本不支持 HTTP,即与 HTTP 端口的 TCP 连接已经失败。跨度>
  • 我的意思是,如果用户坚持通过 http 发送,那么我无能为力,我可以通过 HSTS 强制通过 HTTPS 发送,并通过服务器软件 (nginx) 等帮助自动重定向。 >

标签: node.js ssl redirect nginx https


【解决方案1】:

服务器是否读取它并不重要,因为客户端可能已经发送了它。

在服务器完成读取标头时,客户端已经发送了标头(很明显),但它也发送了部分或全部正文

客户端发送了多少正文并不依赖于 HTTP,而是依赖于底层的 TCP 协议。它由诸如接收窗口、拥塞窗口以及标头和正文的大小等变量决定。

See this great article 了解 TCP 中的拥塞/接收窗口。

【讨论】:

  • 在 http 请求发生之前,如果使用 https 交换有关 https 配置的一些信息,则会发生握手。现在如果不使用 https 服务器可能仍然可能告诉嘿我想做 ssl 握手,所以通过 https 重新请求。
  • @MuhaMmadUmer 没有 HTTP 握手,只有 TCP 握手。重定向发生在 HTTP 层,所以客户端已经发送了数据
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多