前端计网——HTTP与HTTPS

HTTP协议

一种无状态的,以请求/应答方式运行的超文本传输协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。

HTTP报文格式

基本组成

HTTP请求报文和响应报文的结构基本相同,由三大部分组成:

  1. 起始行(start line):描述请求或响应的基本信息
  2. 头部字段集合(header):使用key-value形式更详细的说明报文
  3. 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据

起始行

1.请求报文起始行

1.1 格式
method空格URL空格VERSION换行

请求方式:method,比如GET、POST、PUT、HEAD,表示对资源的操作。
请求目标:通常是一个URI,标记了请求方法要操作的资源
版本号:表示报文使用的HTTP协议版本

1.2 常见的HTTP请求方式

GET:向服务器获取数据
POST:将实体提交到指定的资源,通常会造成服务器资源的修改
PUT:上传文件,更新数据
DELETE: 删除服务器上的对象
HEAD:获取报文首部,与GET相比,不返回报文主体部分
OPTIONS:询问支持的请求方法,用来跨域请求
CONNECT:要求在代理服务器通信时建立隧道,使用隧道进行TCP通信
TRACE:回显服务器收到的请求,主要用于测试或诊断

1.3 HTTP几个版本的区别
  1. http1.0版本
    短链接:每个请求建立一个连接,完成后立刻断开,导致连接无法复用。
    请求方式:除了get,还引入了post、head。
  2. http1.1版本
    长链接:引入了持久连接( persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive
    请求方式:剩下的几个
    节约带宽:只发送header信息,支持请求资源的一部分。
  3. http2.0版本
    支持多路复用 :一个TCP连接可以发送多个流,也就是可以发送多个请求,提高传输性能。
  4. http3.0
    定义:基于UDP的安全可靠的http2.0协议
    时间:减少了TCP三次握手和TLS的时间。
    多路复用
    优化重传策略
1.4 URL的组成部分
  • 协议部分,例如http:,后面的//为分隔符
  • 域名部分:从//后到第一个/,也可以使用ip地址
  • 虚拟目录部分:从第一个/到最后一个/为止,不是必须的
  • 文件名部分:从域名后的第一个/到?为止,是文件部分
  • 锚部分:从#开始到最后
  • 参数部分:从?开始到#为止,又称搜索部分,多个参数以&为分隔符。

2.响应报文起始行

2.1 格式
VERSION空格STATUS CODE空格REASON换行

版本号:表示报文使用的HTTP协议版本
状态码:一个三位数字,用代码的形式表示处理的结果,比如200是成功,500是服务器错误
原因:作为数字状态码的补充,比如200是成功,500是服务器错误

2.2 常见状态码
  • 1xx Information(信息性状态码) 接受的请求正在处理
  • 2xx Success(成功状态码) 请求正常处理完毕
    200:ok
    204:no content,该状态码表示客户端发送的请求已经在服务器端正常处理了,但是没有返回的内容,响应报文中不包含实体的主体部分。一般在只需要客户端往服务器端发送消息,而服务器端不需要往客户端发送内容时使用。
  • 3xx Redirection(重定向状态码) 需要进行附加操作-完成请求
    301:永久重定向
    302:临时重定向
    303:该状态码表示由于请求对应的资源存在着另外一个uri,应使用get方法定向获取请求资源。
    304:浏览器缓存相关,该状态码表示客户端发送附带请求时,服务器端允许请求访问资源,未满足条件的情况。
    307:临时重定向,不改变请求方式
    308:永久资源重定向 不会改变请求方式
  • 4xx Client Error(客户端错误状态码) 服务器无法请求处理
    400:客户端语法错误
    401:请求要求用户身份认证
    403:服务器拒绝请求
    404:服务器找不到资源
  • 5xx Server Error(服务器错误状态码) 服务器处理请求出错
    500:服务器内部错误,无法完成请求
    502:响应无效

头字段

头部字段是key:value的形式,key和value之间用“:”分隔最后用CRLF换行表示字段结束。比如前后分离时经常遇到的要与后端协商传输数据的类型"Content-type:application/json",这里Content-type就是key,application/json就是value。HTTP头部字段非常灵活,不仅可以使用标准里已有的Host、Content等头,也可以任意添加自定义头,这就给HTTP协议带来了无限可能。
1. 头字段注意事项

  • 字段名不区分大小写,字段名里(key)不允许出现空格、下划线_,字段名后面必须紧跟着:,不能有空格,字段值前后的空格没有严格要求
  • 字段之间无顺序
  • 字段原则上不能重复,除非字段本身允许,比如Set-Cookie

2. 常用字段

  • 请求字段:请求头中的头字段,如:Host、Referer
  • 响应字段:响应头中的头字段,如:Server
  • 通用字段:在请求头和响应头中都可以出现,如:Content-type、Connection;

HTTP请求的完整过程

当用户在浏览器输入网址回车之后,网络协议都做了哪些工作呢?

  1. 首先是浏览器应用程序,解析当前URL中的域名
  2. 根据域名获取对应的IP地址,先从浏览器缓存中查找,没有的话就去DNS中找,一层层往上
  3. 拿到IP地址后,与服务器建立TCP三次握手
  4. 握手建立之后,开始组装HTTP请求报文,发送报文
  5. 服务器拿到请求报文之后,请求报文解析,生成响应数据,发送响应数据
  6. 浏览器收到响应报文后,开始渲染页面
  7. TCP四次挥手关闭连接

TCP协议

特点

  • 面向连接的:数据传输之前要先建立连接
  • 全双工的:双向传输
  • 字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
  • 流量缓冲:解决双方处理能力不匹配问题,设置了缓冲区
  • 可靠的传输服务:停止等待协议、重传机制(超时重传、ACK重复重传)、滑动窗口协议与累计确认
  • 拥塞控制:防止网络出现恶行拥塞,发送方减小发送速度

TCP报文格式

三次握手

过程

tcp三次握手

为什么要是三次不是两次呢

TCP是全双工的,要确认通信双方都有接收报文和发送报文的能力,如果只有两次,那么只能确认客户端(发送了也接受了发送的确认)能确认自己工作正常,服务端(接收了,发送了报文但是没有对方给的确认收到信息)是不能确认自己的发送能力的,这样很有可能在后续数据传送时不能收到ACK。到那时

四次挥手

过程

在这里插入图片描述
客户端发送FIN表示客户端请求关闭连接,服务器收到后返回一个ACK,然后做收尾工作,做完以后发送FIN表示服务器请求关闭连接,客户端收到后发送ACK表示同意,服务端收到ACK关闭连接,客户端等待2MSL后关闭连接。

为什么有个等待2MSL之后才关闭连接

  1. 如果最后的ACK丢失了,就收不到服务器重传的FIN了
  2. 可能还有一部分数据是存活的还没有收到,如果立刻关闭连接,数据就丢失了

为什么是2MSL而不是1MSL

如果ACK丢了,还要等对面重发FIN的时间

HTTPS协议

与HTTP的区别

在原先的HTTP协议层和TCP协议层之间多了一个SSL/TLS

加密算法

对称加密

双方拿到的密钥一样,用同一个密钥编码解码。

非对称加密

分公钥和私钥,公钥是公开的而私钥是严格保密的。公钥编码只能私钥解码,私钥编码只能公钥解码。

TLS过程

客户端服务器先三次握手建立连接,然后客户端发送自己支持的加密套件列表,服务器从其中选择一个支持的加密套件,加上自己的公钥数字证书返回给客户端,客户端通过办法数字证书机构给的公钥解密拿到服务器的公钥,然后生成一个用于后续数据的对称加密传输的密钥,用服务器给的公钥加密,发送给服务器,服务器拿到后用私钥解密,后面就可以用整个密钥进行对称加密数据传输了。

CA数字证书

包括了 公钥、组织信息、CA信息、有效时间、证书序列号,同时生成一个数字签名。
签名步骤:hash(你用于申请证书时所提交的明文信息)= 信息摘要;CA再使用私钥对信息摘要进行加密,密文就是证书的数字签名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值