过程
. DNS 解析:域名解析成 IP 地址
. TCP 连接:TCP 三次握手
. 发送 HTTP 请求
. 服务器处理请求并返回 HTTP 报文
. 浏览器解析渲染页面
. 断开连接:TCP 四次挥手
URL
统一资源定位符,用于定位互联网上资源,网址(https://www.w3school.com.cn)
语法规则:
. scheme 定义因特网服务的类型(http、https、ftp、file)
. host 定义域主机,默认主机 www
. domain 定义域名,www.w3school.com.cn
. port 定义端口号,默认端口 80
. path 定义服务器上路径(如省略,文档定位到网站根目录)
. filename 定义文档资源名称
域名解析 DNS
IP 地址:32位二进制数,一个逻辑地址,用以屏蔽物理地址的差异
域名:IP 地址的伪装者,作用便于记忆和沟通的一组服务器的地址
域名解析
DNS 协议提供通过域名和IP地址互查询服务
浏览器如何通过域名查询 URL 对应的 IP?
- 浏览器缓存:浏览器按照一定的频率缓存 DNS 记录
- 操作系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,查询操作系统缓存
- 路由缓存:路由器缓存 DNS 记录
- ISP DNS 服务器:ISP 互联网服务提供商(Internet Service Provider)提供 DNS 查询请求
- 根服务器:ISP 查询不到记录,会向根服务器发出请求,进行递归查询
TCP 三次握手
目的:同步客户端和服务端的序列号和确认号,交换TCP窗口大小信息,为了防止已失效的连接请求报文段突然又传送到了服务器,因而产生错误
客户端发送一个带 SYN=1,Seq=X 的数据包到服务器端口,告诉服务器我要发送请求了
服务器发回一个带 SYN=1,ACK=X+1,Seq=Y 的响应包以示传达确认信息,告诉浏览器准备完毕
客户端回传一个带 ACK=Y+1,Seq=Z的数据包,表示“握手结束”,告诉服务器准备发文
HTTP 请求
请求报文组成:请求行(request line)、请求体(header)、请求体

- 请求行包含请求方法、URL、协议版本
请求方法8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE
URL 即请求地址,由<协议>://<主体>:<端口>/<路径>?<参数>
协议版本即 http 版本号
POST /chapter17/user.html HTTP/1.1
- 请求头
附加信息,键值对,包含客户端环境和请求正文的有用信息
- 请求体
请求参数
服务器处理请求并返回 HTTP 报文
- 服务器
常见的 web server : apache、nginx、IIS
- MVC

- http 响应报文
响应行:协议版本、状态码、状态码描述
1xx:提示信息
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误响应头包含附加信息,键值对组成
响应体返回数据,不是所有响应报文都需要响应数据
浏览器解析渲染

解析步骤:
- 根据 HTML 解析 DOM 树,根据 CSS 解析 CSS 规则树
- DOM 树 结合 CSS 规则数,生成 渲染树
- 根据渲染树计算每一个节点的信息
- 根据计算好的信息绘制页面
断开连接
浏览器发送报文,Fin、Ack、Seq,表示数据已经传输完,进入 FIN_WAIT_1 状态
服务器发送报文,Ack、Seq,同意关闭请求,主机进入 FIN_WAIT_2 状态
服务器发送报文段,Fin、Ack、Seq,请求关闭连接,进入 LAST_ACK 状态
浏览器发送报文段,Ack、Seq。进入 TIME_WAIT 状态,服务器收到报文关闭连接,浏览器等待一定时间未收到回复,正常关闭
TCP 状态
TCP 有个 FLAGS 字段,状态值:SYN,FIN,ACK,PSH,RST,URG
SYN 同步序列编号,表示建立连接
SYN 攻击属于 DDos 攻击的一种,预防技术:通过防火墙、路由器等过滤网管,通过加固 TCP/IP 协议栈
ACK 确认字符,表示响应
接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误
Seq 数据包本身的序列号
PSH 表示 DATA 数据传输
FIN 表示关闭连接
RST 表示连接重置