多线程 & 网络

网络协议:应用层之HTTP与HTTPS

2021-05-21  本文已影响0人  码小菜

目录
一,HTTP基础
二,HTTP进阶
三,HTTPS
四,HTTP/2
五,HTTP/3
六,抓包

一,HTTP基础

1,基本介绍
2,版本

1>只支持GET请求方法
2>只支持文本数据
3>不支持请求头、响应头

1>支持POSTHEAD请求方法
2>支持更多数据类型
3>支持请求头、响应头
4>一个请求对应一个TCP连接

1>支持PUTDELETE请求方法
2>采用持久连接(Connection: keep-alive):多个请求共用一个TCP连接
3>是目前使用最广泛的版本

3,报文格式

1>ABNFAugmented Backus-Naur Form的缩写,表示巴科斯-瑙尔范式的增强版
2>ABNF用作Internet中通信协议的定义语言,是最严谨的HTTP报文格式描述形式

4,请求方法

1>用于读取操作
2>请求参数直接拼接在URL的后面
3>浏览器对URL的长度是有限制的,所以请求参数不能太多

1>用于添加、修改、删除操作
2>请求参数存放在请求体中,个数没有限制

1>与GET请求相同,但没有响应体
2>使用场景:先获取文件大小,再决定是否下载,这样可以节省带宽资源

5,状态码

1>信息响应:100 ~ 199
2>成功响应:200 ~ 299
3>重定向:300 ~ 399
4>客户端错误:400 ~ 499
5>服务器错误 :500 ~ 599

⚠️注意⚠️:并不是每一个状态码都有用到

100 Continue
1>当客户端不确定服务器是否愿意接收请求时,可以先发送不带请求体的请求进行试探
2>如果服务器愿意接收请求,就会返回该状态码,表示该请求不完整,请继续发送剩余的请求
3>当客户端收到该状态码时,再发送一个带请求体的请求

200 OK:请求成功

302 Found:告知浏览器重新请求Location字段中的链接
304 Not Modified:请求的数据没有修改,可以直接使用缓存的数据

400 Bad Request:请求报文格式错误
401 Unauthorized:缺少目标资源要求的身份凭证
403 Forbidden:服务器拒绝访问目标资源
404 Not Found:服务器没有找到目标资源
405 Method Not Allowed:请求方法错误
406 Not Acceptable:请求头中某个Accept字段所要求的值,服务器无法提供
408 Request Timeout:服务器想要关闭没有在使用的TCP连接(主动发送)

500 Internal Server Error:服务器在执行请求时遇到意外情况
501 Not Implemented:服务器不支持该请求方法(GETHEAD必须支持)
502 Bad Gateway:代理服务器找不到目标服务器
503 Service Unavailable:服务器停机维护或者已超载

6,请求头字段
7,响应头字段
8,请求体的类型

1>请求体格式:{"name":"zhangsan","age":"20"}
2>常应用于APP中的接口

1>请求体格式:name=zhangsan&age=20
2>常应用于网页表单提交(例如登录、注册等)

1>请求体格式:
     --boundary
     参数1
     --boundary
     参数2
     --boundary
     文件1
     --boundary
     文件2
     --boundary--
2>常应用于文件上传
3>boundary是一个随机生成的字符串

9,响应体的类型

二,HTTP进阶

1,断点续传

GET /123.png HTTP/1.1

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 1024 // 数据总长度

在下载500个字节时网络异常,待网络恢复后继续下载

GET /123.png HTTP/1.1
Range: bytes=500- // 表示从第500个字节开始到最后一个字节

HTTP/1.1 206 Partial Content
Content-Length: 524
Content-Range: bytes 500-1023/1024

2,跨域

浏览器先从页面服务器获取网页,再从接口服务器获取数据

1>浏览器自带同源策略
2>它规定在默认情况下,异步请求只能发送给同源的URL
3>同源表示协议、域名、端口都相同
4>同源:http://www.network.com:80/page.htmlhttp://www.network.com:80/data
5>不同源:http://www.network.com:80/page.htmlhttps://www.network.com:80/data

1>CORSCross-Origin Resource Sharing的缩写,表示跨域资源共享
2>跨域资源共享表示向不同的源发送异步请求
3>假设网页的URLhttp://www.network.com:80/page.html,数据的URLhttps://www.network.com:80/data
4>由于数据在不同的源,浏览器在请求时,会将Origin字段设置为http://www.network.com:80
5>如果服务器允许跨域访问,需将Access-Control-Allow-Origin设置为http://www.network.com:80,这样浏览器才会接收该数据

3,Cookie
4,重定向
5,缓存

1>需要缓存的情况:GET请求 + 静态资源(例如HTMLJS、图片等)
2>缓存分为:内存缓存(Memory Cache)、磁盘缓存(Disk Cache

1>Pragma:作用类似于Cache-Control,HTTP/1.0的产物
2>Expires:缓存的过期时间(GMT格式),HTTP/1.0的产物
3>Cache-Control:缓存策略
     no-storage:不允许缓存
     private:只允许浏览器缓存
     public:允许浏览器和代理服务器缓存
     no-cache:每次请求都需要询问服务器资源是否有变化,再决定是否使用缓存
     max-age:缓存的有效时长(单位为秒)
4>Last-Modified:资源的最后修改时间
5>ETag:资源的唯一标识(根据内容计算出来的散列值)

优先级:Pragma > Cache-Controlmax-age > ExpiresETag > Last-Modified

If-None-Match
1>如果上一次的响应头中有ETag,就会将ETag的值作为该字段的值
2>如果服务器发现资源的唯一标识与该字段的值不匹配,表明资源有变化,就会返回最新的资源(200 OK
3>否则就不会返回资源(304 Not Modified

If-Modified-Since
1>如果上一次的响应头中没有ETag,有Last-Modified,就会将Last-Modified的值作为该字段的值
2>如果服务器发现资源的最后修改时间晚于该字段的值,表明资源有变化,就会返回最新的资源(200 OK
3>否则就不会返回资源(304 Not Modified

Last-Modified的缺点
1>只能精确到秒级,如果资源在1秒内被修改了,浏览器就无法获取最新的资源
2>如果资源被修改了,最后修改时间发生了变化,但内容并没有改变,服务器也会返回资源

ETag的优点
1>只要资源的内容没有变化,服务器就不会返回资源
2>只要资源的内容发生了变化,服务器就会返回资源

三,HTTPS

1,基本介绍
2,SSL/TLS
3,HTTPS的通信过程
4,TLS的连接过程

包含以下信息:
1>TLS的版本号
2>客户端随机数(Client Random
3>支持的加密组件列表(加密组件包含加密算法、密钥长度等信息)

包含以下信息:
1>TLS的版本号
2>服务器随机数(Server Random
3>选择的加密组件

包含以下信息:
1>服务器的公钥证书(CA已签名)

包含以下信息:
1>ECDHE算法所需要的第一个参数(Server Params

说明:
1>ECDHE是一种密钥交换算法
2>服务器会对该参数进行签名

包含以下信息:
1>告知客户端,服务器数据已发送完毕

说明:
1>客户端会用CA的公钥对证书进行验证(CA的公钥已内置在客户端中)
2>客户端会用服务器的公钥对参数进行验证

包含以下信息:
1>ECDHE算法所需要的第二个参数(Client Params

说明:
1>到目前为止,数据都已交换完毕,客户端和服务器开始各自生成会话密钥
2>客户端和服务器都会生成两个会话密钥,一个用来加密,一个用来解密

包含以下信息:
1>告知服务器,之后客户端的消息都会用会话密钥进行加密

包含以下信息:
1>之前所有交换的数据的散列值(已加密)

说明:
1>用来检验服务器是否能解密成功

包含以下信息:
1>告知客户端,之后服务器的消息都会用会话密钥进行加密

包含以下信息:
1>之前所有交换的数据的散列值(已加密)

说明:
1>用来检验客户端是否能解密成功

四,HTTP/2

1,HTTP/1.1的不足
2,基本介绍
3,多路复用
4,优先级
5,头部压缩
6,服务器推送
7,队头阻塞
8,握手延迟

五,HTTP/3

1,基本介绍
2,解决队头阻塞
3,解决握手延迟
4,连接迁移

1>HTTP/2是基于TCP
2>TCP连接四要素:源IP地址、源端口号、目标IP地址、目标端口号
3>当网络发生变化时,四要素也会发生变化,导致旧的连接失效,必须重新建立连接

1>QUIC使用Connection ID来标识一个连接
2>即使四要素发生变化,只要Connection ID不变,连接就依然有效

六,抓包

1,HTTP
2,HTTPS
3,HTTP/2
HTTP/1.1 HTTP/2
上一篇下一篇

猜你喜欢

热点阅读