http - 客户端机器/浏览器如何处理未请求的 HTTP 响应?

标签 http tcp

想象一下:

  • 用户转到脚本 (http://sample.org/test.php),

  • 脚本向其他页面 (http://google.com/) 发送 HTTP 请求。对于此示例,我们将使用 curl

  • 脚本通过 CURLOPT_INTERFACE 将请求的 IP 地址设置为用户的 IP。

我已经知道请求脚本不会收到响应,因为远程主机会向请求中给出的 IP 地址发送任何响应。

我想知道这个响应会发生什么?假设客户端位于具有一个外部地址的 LAN 上,并且发送到该 IP 的所有流量都由充当 DHCP 服务器的路由器处理,响应是否会返回到用户的机器?如果是这样,是否有任何方法可以确保它由用户的浏览器处理?如果是这样,浏览器通常会如何处理?它会打开一个包含 Google 的新窗口吗?

我肯定会跟进这个问题,但在我进一步实验之前,我很好奇这个级别发生了什么。

最佳答案

  • The script sets the IP address of the request to the user's IP, via CURLOPT_INTERFACE.

通常,这是行不通的。您的 ISP 知道您应该拥有哪个 IP 地址,并且不会转发来自“假”IP 地址的流量。

特别是,由于您只能与假 IP 进行单向通信(因为答案不会到达您手中),您将无法建立有效的 TCP 连接,因为 TCP 需要 three-way handshake .因此,您将无法提交 Web 请求。

What I am wondering is what happens to this response? Assuming the client is on a LAN that has one external address and that all traffic sent to that IP is handled by a router acting as a DHCP server, will the response even get back to the user's machine?

如果用户的 PC 有一个内部 IP 地址并使用 NAT,路由器将不知道将数据包转发到哪个 LAN 机器(因为它没有看到任何它可以匹配的传出请求那种回应)。因此,答案将被删除。

即使如果您可以获得到达客户的响应:

If it did, would there be any way to ensure that it was handled by the user's browser?

没有。如上所述,TCP 请求由三次握手组成。此握手尚未完成,因此操作系统只会丢弃数据包。

关于http - 客户端机器/浏览器如何处理未请求的 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082966/

相关文章:

html - 从 HTML 页面提交 "pure"HTTP 请求

HTTP GET : Same GET-Parameter multiple Times, 这是 RFC 允许的吗?

delphi - 在 IdTCPServer1Execute 上使用 IndySleep

ios - Iphone 监听一个 tcp 端口

android - 无法通过 ADB 通过 wifi 连接到 Android - 我需要 root 访问权限吗?

c - 如何在内核中放置微秒延迟?

java - Spring TCP Socket 客户端未从大型机接收数据

android - Android WebView 是否需要打开外部 URL 的权限?

.net - WebRequest.GetSystemWebProxy() 不包含 uri

c - 大文件上传到基于 libevent 的 HTTP 服务器