什么是 Http
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html、字符串......
- 超文本:图片,音乐、地图、视频、定位......
- 默认端口号:80
Https :表示安全的http(常用)
- 默认端口号:443
HTTP的两个时代
- http1.0
- HTTP / 1.0 :客户端可以与web服务器连接后,只能获得一个web资源,然后断开连接。
- http2.0
- HTTP / 1.1 :客户端可以与web服务器连接后,可以获得多个web资源。
Http请求
- 客户端---- 发送请求(Request) ---- 服务器
百度:
请求 URL https://www.baidu.com/ 请求的地址 请求方法 GET GET / POST方法 状态代码 200 OK 远程地址 157.148.69.186:443 引用站点策略 strict-origin-when-cross-origin
accept text/html accept-encoding gzip, deflate, br, zstd accept-language zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 cache-control max-age=0 connection keep-alive
- 请求行
- 请求行中的请求方式:GET
- 请求方式有:Get,Post,HEAD,DELETE,PUT,TRACT......
- get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全但高效
- post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全但不高效
- 消息头
accept :告诉浏览器,它所支持的数据类型 accept-encoding :支持的编码格式 GBK UTF-8 GB2312 accept-language :告诉浏览器它的语言环境 cache-control :缓存控制 connection :告诉浏览器,请求完成是断开还是保持连接 HOST:主机
Http响应
- 服务器---- 响应 ---- 客户端
百度:
Cache-Control : private 缓存控制 connection keep-alive 连接 content-encoding:gzip 编码 content-type : text/html; 类型
响应体
accept :告诉浏览器,它所支持的数据类型 accept-encoding :支持的编码格式 GBK UTF-8 GB2312 accept-language :告诉浏览器它的语言环境 cache-control :缓存控制 connection :告诉浏览器,请求完成是断开还是保持连接 HOST:主机 Refresh: 告诉客户端,多久刷新一次; Location :让网页重新定位
响应状态码
200:请求成功 200
3xx:请求重定向
- 重定向:你重新到我给你的新位置去;
4xx:找不到资源; 404
- 资源不存在
5xx:服务器代码错误; 500 502:网关错误
常见面试题:
问题:当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
- URL 解析和 DNS 查询
- 浏览器首先解析你输入的 URL。它会检查 URL 的格式(例如,是否包含协议如
http://
或https://
),并提取域名(如www.example.com
)。- 然后,浏览器进行 DNS(域名系统)查询,将域名转换为对应的 IP 地址(如
192.0.2.1
)。建立网络连接
- 浏览器使用获得的 IP 地址和端口(默认 HTTP 为 80,HTTPS 为 443)建立 TCP(传输控制协议)连接
- 如果使用 HTTPS(安全协议),在 TCP 连接后还会进行 TLS(传输层安全)握手:
- 浏览器和服务器协商加密协议(如 TLS 1.3)。
- 服务器发送数字证书,浏览器验证其合法性(例如,检查证书颁发机构)
- 双方生成共享密钥,用于加密后续通信
发送 HTTP 请求
- 一旦连接建立,浏览器发送一个 HTTP 请求到服务器。请求包括:
- 方法(通常是 GET,用于获取页面)。
- 路径(如
/index.html
)。- HTTP 头部
- 如果是 HTTPS,请求会被加密
服务器处理和响应
- 服务器(如 Apache 或 Nginx)接收请求后进行处理
- 服务器发送 HTTP 响应回浏览器
浏览器接收和解析响应
- 浏览器接收响应后,开始解析内容
- 页面渲染和显示
- 浏览器使用渲染树进行布局(Layout)和绘制(Painting)
整个过程从输入到页面显示,涉及 DNS 查询、网络连接建立、HTTP 请求/响应、内容解析和渲染。每一步都依赖底层协议(如 TCP/IP)和浏览器引擎(如 Chromium 的 Blink)。现代浏览器优化了这些步骤(如并行资源加载),以提升速度。如果输入的是无效 URL 或网络问题,浏览器会显示错误页面(如
ERR_CONNECTION_TIMED_OUT
)。