【问题标题】:Http Request Life CycleHttp请求生命周期
【发布时间】:2023-09-09 22:16:02
【问题描述】:

我最近开始了我作为 Web 应用程序后端开发人员的工作。我在理解 Http 请求的生命周期方面有点卡住了。

我的理解是

  • 每个 Http 请求首先联系 DNS 服务器,该服务器将请求 URL 域解析为 IP 地址。
  • 获取Web服务器IP地址请求后转发给它(通过PUT请求)。像 apache 这样的网络服务器会处理此请求并将其转发给必须处理此请求的应用程序。

在这之后我迷路了

  • 应用程序如何将响应发送给请求它的用户,以及 Apcache 是否会参与其中?
  • 我可以使用一些调试工具在浏览器中查看整个流程吗?
  • 有人可以参考一些链接来深入了解这一点吗?

【问题讨论】:

标签: apache http httpwebrequest


【解决方案1】:

我发现此资源对理解HTTP lifecycle 期间采取的步骤非常有帮助:但实际上很有趣,但并不知道所有中间步骤,尤其是在确定 URL 的IP Address 时进行缓存检查。

https://medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a

【讨论】:

    【解决方案2】:

    这是各种基于产品的公司提出的热门面试问题之一。

    HTTP 是一种请求-响应协议。例如,用户代理向服务器发起请求,通常是通过打开与主机上特定端口(默认为端口 80)的 TCP/IP 连接。请求本身包括:

    请求行,

    一组请求标头,以及 一个实体。

    在该端口上侦听的 HTTP 服务器等待客户端发送请求消息。服务器收到请求后,会发送一个响应,其中包括:

    状态行, 一组响应标头,以及 一个实体。 请求或响应中的实体可以简单地视为有效载荷,可以是二进制数据。其他项目是可读的 ASCII 字符。响应完成后,浏览器或服务器可能会终止 TCP/IP 连接,或者浏览器可以发送另一个请求。

    【讨论】:

      【解决方案3】:

      当服务器接收到来自浏览器的请求时,浏览器将绑定到主机上的某个端口,浏览器的IP地址和端口号将与发送到服务器的请求一起附加。服务器将响应发送到 IP 地址和端口号

      【讨论】:

      • 帮助别人时不要总结自己。
      【解决方案4】:

      我认为你对它的理解有点错误。

      如果你去www.google.com(不使用任何形式,只想要网站),会发生这种情况:

      1. 首先浏览器需要将www.google.com 转换成一个IP 地址,如果它还不知道的话。如果它知道,此时什么都不会发生。如果不知道,它会联系 DNS 服务器来解析名称。
      2. 然后浏览器将打开一个到www.google.com IP 地址的 TCP 连接并发送一个 HTTP GET 请求。在本例中,它将是
        GET / HTTP/1.1 Host: www.google.com
      3. 服务器软件将获取此 HTTP 请求。它会以某种方式生成一个 HTTP 响应并通过 TCP 连接将其发回。服务器如何做到这一点取决于服务器软件。例如,您可以在 Apache 中插入应用程序代码,或者只是让 Apache 从文件系统返回一个文件。 PHP 是由某些软件调用的应用程序,然后生成发送到浏览器的响应。发送响应后,在 HTTP 版本 1.0 中,连接关闭。不过,HTTP 1.1 可以有持久连接。
      4. 当浏览器获得响应时,它通常会在屏幕上呈现它。 HTTP 请求现已完成。点击“搜索”将向服务器发送一个新请求。

      GET、PUT、POST、DELETE 等是HTTP request methods。它们具有特殊含义,您可以在 RFC 中看到。

      Cookies 通常用于跨多个 HTTP 请求(称为会话)识别同一用户。因此这些 cookie 被称为会话 cookie

      您可以使用网络嗅探器工具调试通信,例如Wireshark。 Firefox 有一个名为 Tamper Data 的第三方插件,可以在请求发送到服务器之前更改请求。

      HTTP RFC 很好地说明了它的工作原理。

      希望对你有帮助。

      【讨论】:

      • 客户端响应如何正确发送到已提出请求的正确窗口/选项卡/应用程序
      • 客户端有一个TCP连接的句柄。只有客户端会读取它,所以客户端应该知道来自 TCP 连接的内容要去哪里。基本上,这取决于应用程序的编码方式。
      • TCP 连接何时关闭?
      • @MrROY 请参阅answer 上的“持久连接”部分了解 HTTP 1.0 和 1.1 之间的差异。
      • 链接我创建的另一个广泛的指南......也许它有帮助:github.com/hardikvasa/http-connection-lifecycle