Http协议


HTTP工作原理

  1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址

    • 当用户在浏览器地址栏输入一个URL(如www.example.com)并按下回车时,浏览器首先需要知道这个域名对应的IP地址是什么。
    • 浏览器会检查其本地缓存(如hosts文件或之前的DNS查询缓存),看看是否已经有这个域名的IP地址记录。如果没有,它会向配置的DNS服务器发送查询请求。
    • DNS服务器会逐级查询(从根域名服务器开始,到顶级域名服务器,再到权威域名服务器),最终找到www.example.com对应的IP地址,并将其返回给浏览器。
  2. 解析出IP地址后,根据该IP地址和默认端口号80(对于HTTP)或443(对于HTTPS),与服务器建立TCP连接

    • 一旦浏览器获得了目标服务器的IP地址,它就会尝试与该服务器建立TCP连接。这通常涉及到一个称为“三次握手”的过程,以确保双方都能可靠地发送和接收数据。
    • 对于HTTP协议,默认使用的端口号是80。如果网站使用HTTPS(即安全的HTTP),则默认端口号是443。
  3. 浏览器发出HTTP请求给服务器

    • 一旦TCP连接建立成功,浏览器就会通过这个连接向服务器发送一个HTTP请求。这个请求通常包括一个请求行(指定请求方法、请求的资源路径和HTTP协议版本)、一些请求头部(包含有关请求的额外信息,如浏览器类型、接受的内容类型等),以及可能的一个请求体(包含发送给服务器的数据,如在表单提交时)。
  4. 服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器

    • 服务器接收到浏览器的HTTP请求后,会解析请求并根据其内容做出相应的处理。例如,如果请求是获取一个网页,服务器可能会从文件系统中读取相应的HTML文件,或者运行一些服务器端代码来动态生成HTML内容。
    • 服务器会构建一个HTTP响应来回复浏览器。这个响应通常包括一个状态行(指示请求的处理结果,如“200 OK”表示成功),一些响应头部(包含有关响应的额外信息,如内容类型、缓存策略等),以及一个响应体(包含实际的HTML内容或其他数据)。
  5. 释放TCP连接

    • 在HTTP/1.0中,每个请求/响应对之后都会关闭TCP连接。这被称为“短连接”。然而,这种方式效率较低,因为每次请求都需要重新建立连接。
    • 在HTTP/1.1及更高版本中,引入了“持久连接”(也称为“长连接”)的概念。在这种模式下,多个请求/响应对可以通过同一个TCP连接连续发送,而不需要每次都关闭和重新打开连接。这大大提高了性能,特别是在需要加载多个资源(如图片、CSS文件、JavaScript脚本等)的网页上。
  6. 浏览器将该html文本显示出来

    • 浏览器接收到服务器的HTTP响应后,会解析响应中的HTML内容,并根据其内容构建DOM树(文档对象模型)。DOM树是一个表示网页结构的节点树,它允许JavaScript等客户端脚本动态地修改网页内容。
    • 一旦DOM树构建完成,浏览器就会开始加载和解析与HTML相关联的其他资源(如CSS文件、JavaScript脚本、图片等)。这些资源可能会从服务器的不同位置(甚至不同的服务器)获取。
    • 最终,浏览器会将所有加载的资源整合到一起,并渲染出完整的网页供用户查看。

  1. 浏览器解析URL并发起DNS查询

    • 用户在浏览器地址栏输入一个URL,如 http://www.example.com
    • 浏览器首先检查本地缓存或操作系统缓存中是否已有该域名对应的IP地址记录。如果有且未过期,可以直接使用;否则,浏览器需要向DNS服务器发起查询请求。
    • 查询过程中可能经过递归或迭代的方式,经过本地DNS缓存、ISP的DNS服务器、根域名服务器、顶级域名服务器(如.com服务器),直至权威DNS服务器,最终获得域名 www.example.com 对应的IP地址。
  2. 浏览器与服务器建立TCP连接

    • 浏览器根据解析得到的IP地址,使用TCP协议与服务器建立连接。默认情况下,HTTP协议使用TCP端口80,但如果URL中指定了其他端口(如 http://www.example.com:8080/page.html),则使用指定端口。
    • 这个过程包括TCP三次握手,即SYN、SYN-ACK、ACK序列,确保客户端和服务器之间建立起可靠的数据传输通道。
  3. 浏览器发送HTTP请求

    • 建立TCP连接后,浏览器构造并发送一个HTTP请求报文给服务器。请求报文通常包含以下几个部分:
      • 请求行:包含请求方法(如GET、POST、PUT等)、请求URI(统一资源标识符,如 /page.html)以及HTTP协议版本(如HTTP/1.1)。
      • 请求头:一系列键值对,提供关于客户端环境、请求内容格式、缓存控制、认证信息等相关信息,如User-AgentAccept-EncodingCookie等。
      • 空行:用于分隔请求头和请求体。
      • 请求体:对于如POST、PUT等方法,可能包含请求的具体数据(如表单数据、JSON对象等)。对于GET请求,通常没有请求体。
  4. 服务器处理请求并返回HTTP响应

    • 服务器接收到HTTP请求后,解析请求报文,根据请求方法和URI确定要执行的操作(如读取文件、运行脚本等)。
    • 服务器生成HTTP响应报文,其结构包括:
      • 状态行:包含HTTP协议版本、状态码(如200表示成功、404表示未找到、500表示服务器内部错误等)以及状态消息(如OKNot Found)。
      • 响应头:类似于请求头,提供关于响应内容、服务器信息、缓存指示、安全设置等元数据,如Content-TypeServerSet-Cookie等。
      • 空行:同样用于分隔响应头和响应体。
      • 响应体:包含请求所请求的实际内容,如HTML文档、图片、JSON数据等。如果是请求静态网页,服务器直接返回对应的HTML文本。
  5. 关闭TCP连接

    • 一旦服务器完成响应发送,通常在响应头中通过Connection字段指示是否保持TCP连接(如Keep-Alive)。如果双方同意保持连接(或使用HTTP/2、HTTP/3等支持多路复用的协议),后续请求可以复用同一连接以提高效率。否则,按照HTTP/1.1之前的默认行为,每个请求完成后会关闭TCP连接。
  6. 浏览器解析并渲染响应

    • 浏览器接收并解析HTTP响应,尤其是响应体中的HTML文档。
    • 根据HTML的结构,浏览器构建DOM树(Document Object Model),并加载CSS样式表(如有)以构建CSSOM(CSS Object Model)。
    • 浏览器将DOM和CSSOM合并成渲染树(Render Tree),计算布局(Layout),然后进行绘制(Paint),最终将渲染结果呈现给用户。
    • 在此过程中,浏览器可能发现HTML中引用的其他资源(如JavaScript文件、图片、字体等),对这些资源发起额外的HTTP请求,并重复上述流程。

综上所述,从在浏览器地址栏键入URL到页面内容显示,涉及了DNS查询、TCP连接建立、HTTP请求与响应交换、TCP连接关闭以及浏览器的解析渲染等多个环节,共同构成了HTTP工作原理的整体过程。

posted @ 2024-03-28 21:18  guanyubo  阅读(6)  评论(0编辑  收藏  举报