当浏览器发送一个请求到服务器并收到响应时,通常会经历以下几个步骤。这个过程可以分为几个主要阶段:DNS解析、建立TCP连接、发送HTTP请求、服务器处理请求和返回响应、浏览器接收响应等。下面是更详细的步骤说明:
-
输入URL:用户在浏览器地址栏中输入网址或点击链接。
-
DNS解析:
- 浏览器首先检查本地缓存是否有该域名对应的IP地址。
- 如果没有找到,则查询操作系统的DNS缓存。
- 若仍未能找到,浏览器将向配置的DNS服务器发起请求以获取域名对应的IP地址。
- DNS服务器可能会进一步查询其他DNS服务器直到找到对应信息,并最终返回给浏览器。
-
建立TCP连接(对于HTTP/1.1及以下版本):
- 一旦获得了服务器的IP地址,客户端(浏览器)就会尝试与服务器建立TCP连接。这通常通过三次握手来完成。
- 客户端发送SYN包至服务器。
- 服务器回复SYN+ACK确认。
- 客户端再发送ACK确认,此时连接建立成功。
- 一旦获得了服务器的IP地址,客户端(浏览器)就会尝试与服务器建立TCP连接。这通常通过三次握手来完成。
-
发送HTTP请求:
- TCP连接建立后,浏览器会构造一个HTTP请求报文并通过已建立的连接发送给服务器。请求包括请求行、请求头以及可能存在的请求体等内容。
-
服务器处理请求:
- 服务器接收到请求后,根据请求中的URL路径以及其他信息来决定如何处理这次请求。(端口:确定服务,路径:确定访问那个Controller的Function,参数:请求数据)
- 这可能涉及到执行特定的程序逻辑、访问数据库、读取文件等操作。
- 之后,服务器准备相应的资源作为响应内容。
-
返回HTTP响应:
- 服务器生成响应数据,并将其封装成HTTP响应格式(包含状态行、响应头和响应体)。
- 服务器通过已经建立好的TCP连接将此响应发送回客户端。
-
关闭TCP连接(对于非持久性连接的情况):
- 在HTTP/1.0中,默认情况下每次请求-响应完成后都会关闭连接。
- HTTP/1.1引入了持久连接机制,允许一次TCP连接上进行多次请求-响应循环,从而提高效率。但若设置了Connection: close,则也会在此阶段结束连接。
-
浏览器接收响应并渲染页面:
- 客户端接收到服务器发来的响应后,开始解析HTML文档。
- 根据需要,浏览器还可能加载额外的资源如CSS样式表、JavaScript脚本、图片等。
- 最终,浏览器将所有这些资源整合起来展示给用户。