标签:协议 HTTP 浏览器 请求 TCP Http 响应 服务器
目录
HTTP工作原理
-
浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址:
- 当用户在浏览器地址栏输入一个URL(如
www.example.com
)并按下回车时,浏览器首先需要知道这个域名对应的IP地址是什么。
- 浏览器会检查其本地缓存(如hosts文件或之前的DNS查询缓存),看看是否已经有这个域名的IP地址记录。如果没有,它会向配置的DNS服务器发送查询请求。
- DNS服务器会逐级查询(从根域名服务器开始,到顶级域名服务器,再到权威域名服务器),最终找到
www.example.com
对应的IP地址,并将其返回给浏览器。
-
解析出IP地址后,根据该IP地址和默认端口号80(对于HTTP)或443(对于HTTPS),与服务器建立TCP连接:
- 一旦浏览器获得了目标服务器的IP地址,它就会尝试与该服务器建立TCP连接。这通常涉及到一个称为“三次握手”的过程,以确保双方都能可靠地发送和接收数据。
- 对于HTTP协议,默认使用的端口号是80。如果网站使用HTTPS(即安全的HTTP),则默认端口号是443。
-
浏览器发出HTTP请求给服务器:
- 一旦TCP连接建立成功,浏览器就会通过这个连接向服务器发送一个HTTP请求。这个请求通常包括一个请求行(指定请求方法、请求的资源路径和HTTP协议版本)、一些请求头部(包含有关请求的额外信息,如浏览器类型、接受的内容类型等),以及可能的一个请求体(包含发送给服务器的数据,如在表单提交时)。
-
服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器:
- 服务器接收到浏览器的HTTP请求后,会解析请求并根据其内容做出相应的处理。例如,如果请求是获取一个网页,服务器可能会从文件系统中读取相应的HTML文件,或者运行一些服务器端代码来动态生成HTML内容。
- 服务器会构建一个HTTP响应来回复浏览器。这个响应通常包括一个状态行(指示请求的处理结果,如“200 OK”表示成功),一些响应头部(包含有关响应的额外信息,如内容类型、缓存策略等),以及一个响应体(包含实际的HTML内容或其他数据)。
-
释放TCP连接:
- 在HTTP/1.0中,每个请求/响应对之后都会关闭TCP连接。这被称为“短连接”。然而,这种方式效率较低,因为每次请求都需要重新建立连接。
- 在HTTP/1.1及更高版本中,引入了“持久连接”(也称为“长连接”)的概念。在这种模式下,多个请求/响应对可以通过同一个TCP连接连续发送,而不需要每次都关闭和重新打开连接。这大大提高了性能,特别是在需要加载多个资源(如图片、CSS文件、JavaScript脚本等)的网页上。
-
浏览器将该html文本显示出来:
- 浏览器接收到服务器的HTTP响应后,会解析响应中的HTML内容,并根据其内容构建DOM树(文档对象模型)。DOM树是一个表示网页结构的节点树,它允许JavaScript等客户端脚本动态地修改网页内容。
- 一旦DOM树构建完成,浏览器就会开始加载和解析与HTML相关联的其他资源(如CSS文件、JavaScript脚本、图片等)。这些资源可能会从服务器的不同位置(甚至不同的服务器)获取。
- 最终,浏览器会将所有加载的资源整合到一起,并渲染出完整的网页供用户查看。
-
浏览器解析URL并发起DNS查询:
- 用户在浏览器地址栏输入一个URL,如
http://www.example.com
。
- 浏览器首先检查本地缓存或操作系统缓存中是否已有该域名对应的IP地址记录。如果有且未过期,可以直接使用;否则,浏览器需要向DNS服务器发起查询请求。
- 查询过程中可能经过递归或迭代的方式,经过本地DNS缓存、ISP的DNS服务器、根域名服务器、顶级域名服务器(如
.com
服务器),直至权威DNS服务器,最终获得域名 www.example.com
对应的IP地址。
-
浏览器与服务器建立TCP连接:
- 浏览器根据解析得到的IP地址,使用TCP协议与服务器建立连接。默认情况下,HTTP协议使用TCP端口80,但如果URL中指定了其他端口(如
http://www.example.com:8080/page.html
),则使用指定端口。
- 这个过程包括TCP三次握手,即SYN、SYN-ACK、ACK序列,确保客户端和服务器之间建立起可靠的数据传输通道。
-
浏览器发送HTTP请求:
- 建立TCP连接后,浏览器构造并发送一个HTTP请求报文给服务器。请求报文通常包含以下几个部分:
- 请求行:包含请求方法(如GET、POST、PUT等)、请求URI(统一资源标识符,如
/page.html
)以及HTTP协议版本(如HTTP/1.1)。
- 请求头:一系列键值对,提供关于客户端环境、请求内容格式、缓存控制、认证信息等相关信息,如
User-Agent
、Accept-Encoding
、Cookie
等。
- 空行:用于分隔请求头和请求体。
- 请求体:对于如POST、PUT等方法,可能包含请求的具体数据(如表单数据、JSON对象等)。对于GET请求,通常没有请求体。
-
服务器处理请求并返回HTTP响应:
- 服务器接收到HTTP请求后,解析请求报文,根据请求方法和URI确定要执行的操作(如读取文件、运行脚本等)。
- 服务器生成HTTP响应报文,其结构包括:
- 状态行:包含HTTP协议版本、状态码(如200表示成功、404表示未找到、500表示服务器内部错误等)以及状态消息(如
OK
、Not Found
)。
- 响应头:类似于请求头,提供关于响应内容、服务器信息、缓存指示、安全设置等元数据,如
Content-Type
、Server
、Set-Cookie
等。
- 空行:同样用于分隔响应头和响应体。
- 响应体:包含请求所请求的实际内容,如HTML文档、图片、JSON数据等。如果是请求静态网页,服务器直接返回对应的HTML文本。
-
关闭TCP连接:
- 一旦服务器完成响应发送,通常在响应头中通过
Connection
字段指示是否保持TCP连接(如Keep-Alive
)。如果双方同意保持连接(或使用HTTP/2、HTTP/3等支持多路复用的协议),后续请求可以复用同一连接以提高效率。否则,按照HTTP/1.1之前的默认行为,每个请求完成后会关闭TCP连接。
-
浏览器解析并渲染响应:
- 浏览器接收并解析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工作原理的整体过程。
标签:协议,
HTTP,
浏览器,
请求,
TCP,
Http,
响应,
服务器
From: https://www.cnblogs.com/yubo-guan/p/18102647