计算机网络
HTTP
1. HTTP是什么
Http:超文本传输协议,也就是 HyperText Transfer Protocol
Http组成:
- 超文本:不只是普通文字,里面带链接、图片、视频、样式,点链接可以跳转到别的页面,这就是超文本
- 传输:在浏览器和服务器之间把这些超文本数据来回搬运。
- 协议:一套双方都要遵守的规则、格式,规定消息怎么写、怎么对话。
Http 状态码:
状态码及其含义
| 状态码 | 具体含义 |
|---|---|
| 1XX | 提示信息,表示的是协议处理的中间态,还需要其他后续操作 |
| 2XX | 成功,报文已经收到并正常处理 |
| 3XX | 重定向,资源发生变动需要重新发送请求 |
| 4XX | 客户端错误,请求报文有误,服务端无法处理 |
| 5XX | 服务端错误,服务端再处理请求的时候内部发生错误 |
常见Http状态码
| 状态码 | 常见状态码及其含义 |
|---|---|
| 1xx | 100 Continue: 继续,客户端继续发送剩余请求 |
| -------- | ------------------------------------------------------ |
| 2xx | 200 OK: 成功,一切正常返回数据 |
| 201 Created: 创建成功(Post新增资源) | |
| 204 No Content: 成功但是没有返回响应体 | |
| -------- | ------------------------------------------------------ |
| 3xx | 301 Moved Permanently:永久重定向,浏览器会记住新地址 |
| 302 Found:临时重定向,本次跳转,不用记住 | |
| 304 Not Modified:资源未修改,用浏览器缓存 | |
| -------- | ------------------------------------------------------ |
| 4xx | 400 Bad Request:请求语法错误,参数错误 |
| 401 Unauthorized:未认证,需要登录 | |
| 403 Forbidden:权限不足,禁止访问 | |
| 404 Not Found:资源不存在,没找到界面 | |
| 405 Method Not Allowed:请求方法不允许 | |
| 408 Request Timeout:请求超时 | |
| -------- | ------------------------------------------------------ |
| 500 Internal Server Error:服务器内部未知错误 | |
| 502 Bad GateWay:网关错误,后端挂了 | |
| 503 Service Unavailable:服务不可用,服务器过载 | |
| 504 Gateway Timeout:网关超时,后端处理太久没返回 |
Http 常见字段:
- Host
服务器访问的域名
Host: www.feifei.ltd - User-Agent(UA)
客户端身份:浏览器版本、操作系统
User‑Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) - Accept
能接收什么类型的响应
Accept: text/html,application/json - Accept-Encoding
支持的压缩格式 gzip、deflate。服务器可以返回压缩后的内容,减少体积。
Accept‑Encoding: gzip, deflate - Accept‑Language
浏览器偏好语言,中文 / 英文。
Accept‑Language: zh‑CN,zh;q=0.9 - Content-type
请求体的格式
- application/x‑www‑form‑urlencoded:普通表单
- multipart/form‑data:上传文件
- application/json:json 格式(接口最常用)
返回体的数据类型 Content‑Type: text/html Content‑Type: application/json;charset=utf‑8 Content‑Type: image/png
- Cookie
浏览器自动携带,把之前服务器下发的 cookie 发给服务器。
Cookie: sessionid=xxx; token=xxx - Connection
用来控制HTTP 连接是否保持长连接,HTTP/1.1 默认就是长连接。
Connection: keep‑alive 🔹(HTTP/1.1 默认)
长连接:一次 TCP 连接,可以多次 HTTP 请求响应,连接不会马上断开。 浏览器访问网页,一个页面要下载 html、css、js、图片很多资源,不用每次都新建 TCP 连接,提升速度。Connection: close
短连接:这次 HTTP 请求完成之后,立刻关闭 TCP 连接。下一次请求要重新建立新 TCP 连接。 - Referer
从哪个页面跳转过来的。防盗链会读取这个字段。
- Origin
跨域请求,标明请求来源域名,用于 CORS 跨域。
Get和Post区别
- 参数存放位置:
get -> 存放在地址栏上
post -> 存放在请求体上
- 缓存和书签
get -> 浏览器会缓存,可作为书签
post -> 浏览器不会缓存,不可作为书签
- 安全性
get -> 暴露在地址栏不安全
post -> 虽然在请求体中但是依然不安全,明文传输
- 幂等性
get -> 幂等:多次请求,服务器产生的效果一样,一般用于查询,不修改数据。
post -> 非幂等:多次提交可能产生多条数据,常用于新增、提交表单。
- 数据长度
get -> 长度受限
post -> 长度不受限制
补充
REST 规范:
查询 → GET
新增 → POST
修改 → PUT
删除 → DELETE
Http缓存
- 强缓存
浏览器不发送请求给服务器,直接拿本地缓存
- 协商缓存
请求的资源是否改变 改变就重新从服务器传回,没变403
Http和Https的区别
- 端口:
Http -> 80 Https -> 443
- 安全性:
Http -> 明文 Http -> Http+TLS加密,非对称加密协商密钥,对称加密传输数据,证书验证身份
Http 1.0 1.1 2.0 3.0区别
Http 1.0
- 默认使用短链接
- 无host请求头 一台服务器不能配置多个虚拟主机
- 缓存机制简陋
- 只能串行请求
Http 1.1
- 默认使用长连接:一个tcp可以复用多个Http请求
- 强制带Host请求头
- 完善的缓存机制
- 管道化,一次可以请求多个,不用等上一个响应(但是对头阻塞:响应只能串行接收)
- 新增状态码 304 ,400 ,401 ,403
Http 2.0
底层依旧使用Tcp,不过使用二进制帧,但是Tcp丢包重传会阻塞整个连接
- 二进制帧:把数据拆成帧,二进制传输,解析效率高
- 多路复用:一条Tcp可以同时发送接收多个请求响应,互不阻塞
- 头部压缩:针对Http头部重复进行压缩,减少体积
- 服务端推送,服务端可以主动向客户端推送
- 请求优先级:可以为不同流设置优先级
Http 3.0
基于UDP + QUIC协议
- 基于UDP解决了TCP的对头阻塞
- 减少握手次数,建立连接更快
- 自带加密:默认TLS
- Http2.0的特性
Websocket
什么是 WebSocket?
WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。
webSocket和Http的区别
- http和webSocket都是基于Tcp的
- http是http/https开头的,webSocket是ws/wss开头的
- http通信先建立TCP链接,然后一问一答的,
ws先Http建立一次链接 服务器返回101 Switching Protocols,协议切换。 TCP 通道保留,从此不再走 HTTP 协议,变成 WebSocket 二进制 / 文本帧双向通道。
| 对比项 | HTTP | WebSocket(WS) |
|---|---|---|
| 通信模式 | 半双工;客户端请求,服务器响应;服务器不能主动推送 | 全双工;双方随时互发消息 |
| 连接生命周期 | 短连接 / 长连接 (keep‑alive);一次请求一次响应 | 一次握手,持久长连接,不断开 |
| 头部开销 | 每次请求都要携带完整 HTTP 头,头大 | 握手后只有很小帧头,开销极低 |
| 服务器主动推送 | ❌不支持。轮询 / 长轮询模拟推送 | ✅原生支持主动推送消息 |
| 协议标识 | http:// / https:// | ws:// / wss:// |
| 状态码 | 200、301、404 等 | 握手用101 Switching Protocols |
| 适用场景 | 普通网页、接口调用,查询数据 | 聊天、实时通知、弹幕、股票实时、游戏、IoT 设备 |
WebSocket原理
原理:客户端与服务器通过一次 HTTP Upgrade 握手后,建立一条持久的 TCP 连接。之后,双方可以随时、主动地发送数据,实现真正的全双工、低延迟通信。
WebSocket 与短轮询、长轮询的区别
WebSocket短轮询
是要固定时间去发送一个http请求建立连接的,询问服务器是否有新数据,服务器收到后立即响应
WebSocket长轮询
建立一次长连接,直到有数据或者超时的时候才发出响应
SSE 与 WebSocket 有什么区别?
| WS | ESS | |
|---|---|---|
| 通信方式 | 全双工通信 | 单工通信 |
| 底层协议 | ws/wss协议 | Http/Https协议 |
| 实现复杂度 | 复杂 | 简单 |
| 短线重连 | 需要自己实现 | 原生支持 |
| 传输类型 | 二进制/文本 | 文本传输 |