HTTP请求专题
1、状态码
1XX 已被接受等待处理
2XX 成功
- 200 请求成功
- 204 请求成功无资源(OPTIONS的返回状态码)
- 206 partial content 范围请求 部分
3XX 重定向
- 301 永久性重定向 已被分配新URL(首部会有提示)
- 302 临时分配新URL 要改POST为GET
- 303 存在另一个资源
- 304 请访问协商缓存
- 307 临时重定向 不改POST
301 302 303 POST改成GET
4XX 客户端错误
- 400 报文语法错误
- 401 HTTP请求没通过认证
- 403 forbidden 被服务器拒绝
- 404 无资源
- 405 禁止使用此方法,设置请求头OPTIONS看支持什么方法
var Access-Control-Allow-Method = xhr.getResponseHeader('Access-Control-Allow-Method')
var Access-Control-Allow-Origin = xhr.getResponseHeader('Access-Control-Allow-Origin')
5XX 服务器错误
- 500 执行请求出错
- 502 服务器自身正常 但就是访问有问题
- 503 暂时停机(可能超负载)无法处理请求
2、HTTP缓存
之前我们说到304的协商缓存,现在继续看看缓存的要点
强缓存
- HTTP 1.0 Expires 过期时间点
- HTTP 1.1 Cache-control 过期时长计时
协商缓存 (传tag和服务器协商)
-
last-modified 最后修改时间
头部添加if- Modified- since字段 -
ETag 文档标识 是否有改动
头部添加if- modified- match字段 -
比较:
- 性能:last modified 只用比时间(秒),因为秒所以小于秒的无法判断
- 精度:ETag MD5生成Hash值
-
不能缓存的原因:
磁盘已满 页面不同源 -
能缓存的条件:
- GET HEAD
- POST PUT 流式上传:基于HTTP2.0的帧和流 分块(成帧)传输时要缓存
- 能使缓存失效的DELETE和PATCH
3.请求方法区别
GET和POST
- 缓存:
GET主动缓存,POST默认不能 - 参数:
GET参数直接在URL里,POS T在请求体里 - 编码:
GET只能ASCII,POST支持更多 - 幂等:
GET一次性
发送请求,POST分header(状态码100)再发body ,收发多个
- 应用场景:
GET 搜索关键字(页面传参 幂等发一个收一个)
POST 注册(不幂等 发多个收一个)
OPTIONS和HEAD
- HEAD
几乎和GET一样,只请求头部,可得到资源信息,用于测试链接有效性可不可以访问,可以返回100,类似于POST每次先发个Header看看是不是100 - OPTIONS
查看服务器性能,支持的HTTP请求方法,是否能跨域
在建立连接的第一步xhr.getResponseHeader('Access-Control-Allow-Method和Origin')