HTTP请求有哪些
GET,POST,PUT,DELETE,OPTIONS
GET,POST请求区别
- 场景
- GET 用于获取资源,不对服务器资源做更改 --幂等
- POST 会对服务器资源进行更改,影响数据
- 状态
- 浏览器不会对post请求进行缓存
- 安全
- get参数放在url,请求参数会以请求路径明文方式进行发送
- 参数
- post支持更多种类型的请求参数数据
POST,PUT区别
PUT请求,修改数据内容,但不会增加种类 POST请求,可以修改内容,也可以增加类型种类
OPTIONS
由浏览器自动发出,“预检请求”,获取当前服务器的状态,性能,特征;检查访问权限
发送OPTIONS请求条件
- 使用了Get,Post以外的方法
- 设置了CORS安全的首部字段集合以外的字段,安全集合为Accept
Accept-Language
Content-Language
Content-Type (需要注意额外的限制)
DPR
Downlink
Save-Data
Viewport-Width - Content- type值不属于下列之一
- application/x-www-form-urlencoded 一般用于表单提交,键值对形式
- multipart/form-data 需要上传文件的表单用该类型
- text/plain 纯文本
http协议头部算法,如何降低开销?
请求头存在大量重复数据,accept,cookie等
- HPACK- http2
- 客户端,服务端共同维护建立字典,索引来表示常见头部字段名/值,
- 通过编码算法进一步压缩上面生成的字符串
请求头,响应头有哪些,常见的content-type
请求头
- Host:当前访问的主域名,如:www.baidu.com
- User-Agent:用户代理,简称UA,当前服务器操作系统版本 浏览器版本。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫。
- Accept:接收文件的类型
- referer: 从哪里来(标识这个请求是从哪个页面发过来的);Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带 上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。例如,在www.baidu.com 里有一个www.xiaoming.com 链接,那么点击这个www.xiaoming.com ,它的header 信息里就有: Referer=www.baidu.com
- cookie:小型文本文件,标识每个人的身份,独一无二,获取cookie可以登录
响应头
Date server cache-control content-type
content-type:application/json 序列化后的json字符串(对象格式)
状态码
- 1XX 信息类 接受请求并正在处理
| 2XX | 成功 请求正常且处理完毕 |
|---|---|
| 200 | OK |
| 204 | 成功处理了请求,但没有返回任何内容 |
| 206 | 处理了部分get请求 |
| 3XX 重定向 | 需要进行附加操作完成当前请求 |
|---|---|
| 301 永久重定向 | 域名/资源地址换了 |
| 302 临时重定向 | 平安夜活动 |
| 303 | 查看其他位置 |
| 304 浏览器缓存相关 | 资源未修改,用缓存 |
| 4XX 客户端错误 | |
|---|---|
| 400 | 请求报文出现语法错误 |
| 401 | 认证失败,未授权(需要登录的网页) |
| 403 | 拒绝请求 |
| 404 | 找不到请求的资源 |
| 405 | 禁用请求中指定的方法 |
| 5XX | 服务端处理请求错误 |
|---|---|
| 500 服务器内部错误 | 执行请求发生错误 |
| 501 尚未实施 | 暂不支持当前操作 |
| 502 错误网关 | 拒绝请求 |
| 503 服务不可用 | 超负荷或停机维护 |
302,303,307三种重定向
- 302是http1.0中的重定向
- http/1.1 细化出了303,307;303将当前的post请求变为get进行重定向;307会严格按照浏览器诉求,不会从post变成get
HTTP 不同版本 1.0,1.1,1.2
- http1.0和1.1之间的区别
-
连接上:持久性连接--复用同一个TCP
-
缓存上:
1.0--强缓存/expires;协商缓存/last-modified
1.1--强缓存/cache-control:max-age=时间;协商缓存/Etag
-
资源处理
请求头引入range,允许只请求资源的某个部分,返回码是206
- http1.1和2.0区别
-
二进制协议
http1.1中,头部信息是文本,数据部分是文本/二进制
2.0 头部和数据都是二进制,‘帧’
-
多路复用
同一个tcp连接,客户端和服务器可以同时发送多个请求和响应
-
数据流
-
头部信息压缩
connection: keep-alive
- 建立过程:
- 客户端发送报文夹带 keep-alive头配置
- 服务端接收并处理,返回keep-alive的返回头
- 客户端维持当前长链接建立
- 服务端主动断开
- 等客户端请求
- 服务端返回请求并且不带keep-alive
- 关闭连接
- 客户端主动断开
- 客户端请求头带上close字段
- 服务端接收后,处理并断开连接
- 客户端接受资源,关闭连接
- 好处
- 服务端:CPU和内存占用下降
- 无需每次异常关闭TCP
- 减少后续请求延时
- 缺点:长时间连接可能导致无效占用
http和https
https = http + SSL/TLS
SSL/TLS是什么
是一层安全协议 主要依赖:散列函数,对称加密,非对称加密
-
散列函数 hash
MD5...单项不可逆,输入敏感,输出长度固定。任何对于数据的修改都会导致输出值的变化
-
对称加密
两者共用一种密钥,同时用其加解密 => 问题:如何保证密钥的传输安全性
-
非对称加密
利用公钥和对应私钥的互相加解密能力 进行加密 => 问题:中间截取问题 => 数字证书:可信度高的机构