HTTP 相关知识
HTTP 一共有八大请求方式,最常用的是 GET 和 POST。
常见的默认 GET 请求:
- 浏览器地址栏输入网址时
- 可以请求外部资源的 HTML 标签,例如:
<img> <a> <link> <script>
- form 表单提交时,若没有指明方式,默认使用 GET
HTTP 协议
HTTP 协议是无状态的,cookie 用于解决这个问题
- HTTP 1.0:不支持长连接
- HTTP 1.1:支持长连接,但是同时发送的资源数量过小
- HTTP 2.0:同时发送的资源数量有所提升
- 一个 TCP 连接可以请求多个资源,多路复用
- 服务端推送,服务端可以对一个请求发送多个响应
- 设置请求优先级,服务端根据请求所设置的优先级来分配资源
- HTTP 头部压缩,减小体积
请求报文
sh
### 请求报文首行:请求方式 协议名://主机地址:端口号/?urlencoded参数 HTTP协议名/版本
GET http://localhost:3000/?name=kobe&password=123 HTTP/1.1
### 请求头
Host: localhost:3000 # 发送请求的目标主机
Connection: keep-alive # 浏览器告诉服务器,浏览器支持长连接
Pragma: no-cache # 不走缓存
Cache-Control: no-cache # 不走缓存(强缓存)
Upgrade-Insecure-Requests: 1 # 浏览器告诉服务器可以使用 https或http1.1
DNT: 1 # 浏览器告诉服务器:禁止跟踪。最终是否跟踪,还得看服务器是否配合
User-Agent: Chrome/73.0.3683.75 Safari/537.36 ... # 用户代理,之前用于判断浏览器型号
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 # 浏览器能够接收资源的类型及优先级,优先级q不写默认是1最高
Referer: http://localhost:63347/0719_node/demo.html?_ijt=tphpp47dag8jevtqrnq4 # 本次请求是“站”在哪里发出去的。可用于 1.防盗链。 2.广告计费
Accept-Encoding: gzip, deflate, br # 浏览器告诉服务器,浏览器所能接受的压缩文件类型
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 # 浏览器告诉服务器,浏览器所能支持的语言种类
Cookie: Webstorm-9af2238=09820128-3adb-43e4-8242-a6f65c9e523a # Webstorm给你种下的cookie
### 空行
### 请求体:GET请求没有请求体
### POST请求
Content-Length: 22 # 返回数据的长度
Origin: http://localhost:63347 # 精简版的Referer
Content-Type: application/x-www-form-urlencoded # 浏览器告诉服务器,携带参数的类型
### 请求体
name=kobe&password=123
- form 表单的 post 请求和 get 请求 参数均已
urlencoded
形式进行编码 - get 请求将 urlencoded 编码的参数放入请求地址携带给服务器,所以称之为:查询字符串参数
- post 请求将 urlencoded 编码的参数放入请求体,所以称之为:请求体参数
响应报文
sh
### 响应报文首行
HTTP/1.1 200 OK # 协议名/协议版本 状态码
### 响应头
X-Powered-By: Express # 服务器所采用的框架
Content-Type: text/html; charset=utf-8 # 告诉浏览器返回资源的类型及编码格式
Content-Length: 2 # 返回数据的长度
ETag: W/"2-eoX0dku9ba8cNUXvu/DyeabcC+s" # 协商缓存必要字段
Connection: keep-alive # 服务器告诉浏览器,下次请求时,或许会采用长连接
### 空行
### 响应体
OK
状态码
- 1XX:服务器收到请求,需要请求者继续执行操作
- 2XX:请求成功
- 200:请求成功
- 3XX:重定向
- 301:资源已永久转移到其他地址 Moved Permanently
- 302:暂时重定向
- 304:资源重定向到缓存,协商缓存 Not Modified
- 4XX:客户端错误,请求包含语法错误或无法完成请求
- 400:请求信息错误,服务器无法理解请求的格式 Bad Request
- 401:请求需要用户身份认证 Unauthorized
- 403:服务器拒绝客户端的请求 Forbidden
- 404:服务器找不到请求的资源 Not Found
- 5XX:服务器错误
- 500:服务器内部错误 Internal Server Error
- 502:服务器作为网关或代理,从上游服务器收到无效响应 Bad Gateway
- 503:服务器当前无法处理请求 Service Unavailable
- 504:服务器作为网关或代理,未及时从上游服务器收到响应 Gateway Timeout
cookie
本质就是一个【字符串】,里面包含着浏览器和服务器沟通的信息(交互时产生的信息)
- 存储的形式以:【key-value】的形式存储
- 浏览器会自动携带该网站的 cookie,只要是该网站下的 cookie,全部携带
- 分类:
- 会话 cookie(关闭浏览器后,会话 cookie 会自动消失,会话 cookie 存储在浏览器运行的那块【内存】上)
- 持久化 cookie:(看过期时间,一旦到了过期时间,自动销毁,存储在用户的硬盘上,备注:如果没有到过期时间,同时用户清理了浏览器的缓存,持久化 cookie 也会消失)
- 工作原理:
- 当浏览器第一次请求服务器的时候,服务器可能返回一个或多个 cookie 给浏览器
- 浏览器判断 cookie 种类:会话 cookie:存储在浏览器运行的那块内存上;持久化 cookie:存储在用户的硬盘上
- 以后请求该网站的时候,自动携带上该网站的所有 cookie(无法进行干预)
- 服务器拿到之前自己“种”下 cookie,分析里面的内容,校验 cookie 的合法性,根据 cookie 里保存的内容,进行具体的业务逻辑。
- 应用: 解决 http 无状态的问题(例子:7天免登录,一般来说不会单独使用 cookie,一般配合后台的 session 存储使用)
- 不同的语言、不同的后端架构 cookie 的具体语法是不一样的,但是 cookie 原理和工作过程是不变的
- cookie 不一定只由服务器生成,前端同样可以生成 cookie,但是前端生成的 cookie 几乎没有意义
- 对比浏览器的本地存储:
- localStorage:
- 保存的数据,只要用户不清除,一直存在
- 作为一个中转人,实现跨页签通信
- 保存数据的大小:5MB-10MB
- sessionStorage:
- 保存的数据,关闭浏览器就消失
- 保存数据的大小:5MB-10MB
- cookie:
- 会话cookie——关浏览器消失、持久化cookie——到过期时间消失
- 保存数据的大小:4K-8K
- 主要用于解决http无状态(一般配合后端的session会话存储使用)
- 浏览器请求服务器时,会自动携带该网站的所有cookie
- localStorage: