HTTP协议

HTTP协议:协议格式约定

概念:超文本传输协议(早期就是为了用来传输Web网页而设计的)

特性

  1. 基于明文传输的,调试便捷性搞
  2. 是一种简单的请求-相应协议
  3. 基于TCP协议,传输安全性高

格式

​ 请求格式

  1. 请求行:主要对请求进行关键性描述

  2. 请求头部:一个个键值对,对于请求的附加描述以及正文的描述

    key:val/r/n

    Connection:close(短连接)/keep-alive(长连接)

    Content-Length/Content-Type

  3. 空行:间隔头部与正文

  4. 正文:提交给服务器的正文

请求行解析:

​ 以空格作为间隔,以\r\n为结尾

​ 第一部分:请求方法:描述不同的请求目的

  • GET:向服务器请求一个网页实体资源,请求中没有正文,提交的数据在URL中(安全性不高,长度受限)
  • POST:向服务器提供表单数据,请求中有正文
  • HEAD:与GET类似,但不同的是,实际相应不要实体资源,只要响应头部。
  • PUT:更新服务器上资源
  • DELETE:删除服务器上资源

​ 第二部分:URL 统一资源定位符(网址)

​ 完整格式:

​ http://username:password@domainname:port/s?wd=C%2B%2B#ch

  • http:协议方案名称

  • username:用户名 password: 密码

  • domainname:域名或者是服务器IP地址

    ​ 域名:IP地址才是网络上一台主机的标识,但IP地址并不容易记忆,因此大佬设计域名系统,使用便于记忆的字符串作为域名,通过域名系统进行域名解析,得到服务器IP地址,然后通过IP地址进行访问。

  • port:很多时候浏览网页,再网址中并没有看到端口,是因为HTTP服务默认为80端口,浏览器默认自动加上

  • /s 资源路径,以/作为起始,明确描述了要请求的资源路径名。/表示请求根目录,但是实际上只是服务器上的对应子目录

​ /index.html -> /home/dev/workspace/porject/http/wwwroot/index.html

  • wd=C%2B%2B&ecode=utf8: GET请求提交给服务器的数据,学名叫做查询字符串,查询字符串中的数据,是提交给服务器中的数据,放在URL中,但URL中很多特殊字符串都有特殊含义,但是提交的数据中也有这种特殊的字符,因此标准文档规定,查询字符串中的特殊字符需要进行编码。

    • URL Encode:url编码
    • URL Decode:url解码
  • ch:#之后的数据叫做段标识符,通常用于定位网页中的某个标签id,用于打开网页后,直接跳转到指定位置。

​ 第三部分:协议版本

​ 描述了当前所使用的HTTP版本

​ HTTP/0.9:一个不成熟的版本,只能使用GE获取网页,而且也没有当前的完善协议格式

​ HTTP/1.0:完善了协议格式,新增支持了更多的请求方法:GET,HEAD,POST,并且有了缓存的控制,以及流媒体的传输。

​ HTTP/1.1:当前使用最多的版本,新增支持了更多的请求方法:PUT,DELETE…针对当前网络,以前通讯效率太低,支持长连接,对缓存的管理更加精细(静态资源的缓存管理,CDN服务器,代理服务器的缓存管理)。、

HTTP/1.1版本的迭代,更多的是对传输效率的改进

长连接与短链接:
  • 短连接:建立连接–>发送请求–>接受响应–>关闭连接

每获取一个资源,都要重新建立一个新连接,关闭连接,效率很低

  • 长连接:建立连接–>发送请求–>接受响应–>发送请求–>接受响应–>…–>关闭连接
  • 长连接管线化传输:建立连接–>发送请求–>接受响应–>发送请求1–>接受响应1–>发送请求2–>接受响应2–>关闭连接

在这里插入图片描述

短连接:每次请求都要重新建立连接

长连接:在一次连接中可以连续请求-响应,节省了连接不断建立与断开的过程。小路有提升,但还可以改进。

管线化传输:在一次连接中,可以连续发送请求,这样的话,服务器群组就可以提前同时对多个资源进行准备,准备好了就可以按序响应。相较于传统的长连接效率上又有提升。


GET与POST的区别

  1. get是获取数据,post的修改数据
  2. get把请求放在url上,以?分割url和传输数据,参数之间以&相连,所以get不太安全,而post是把数据放在HTTP的包体内
  3. get提交数据最大为2k,post理论上无限制
  4. get产生一个TCP数据包,浏览器会把http heade和data一起发送出去,服务器相应200;post产生两个包,浏览器会先发送header,服务器相应100 continue,浏览器再发送data,服务器相应200 OK(返回数据)
  5. get请求会被浏览器主动缓存,而post不会,除非手动设置

POST比GET更加安全?

有人说post比get更加安全,是因为数据在地址栏不可见

然而,从传输角度来说,他们都是不安全的,因为HTTP在网络上是明文传输的,只要在网络上进行抓包,就能获取完整的数据。

要安全传输,就只有加密,也就是使用HTTPS


HTTPS协议:并不是一个新协议,其实就是加密后的HTTPS协议

​ 加密:SSL/TLS加密

​ 加密:身份验证+加密传输

​ 身份验证:采用的CA认证–电子认证服务

​ 通信双方,到第三方权威机构,办理一个CA认证书,建立连接后,先将证书发送给对方,对方的证书进行解析:

​ 1.当前的证书颁发机构是否为自己信任的权威机构

​ 2.到权威机构进行身份认证

加密传输:对传输的数据进行加密

​ 通信双方进行传输加密,需要进行密钥协商

  • 对称加密:数据的加密和解密使用的是相同的密钥

    • 缺点:进行密钥协商时容易被劫持
    • 优点:加密效率高
  • 非对称加密:数据的加密和解密的密钥时不一样的

    • 缺点:加解密效率低下
    • 优点:安全性高,不怕劫持

​ 思想:通过指定算法(RSA),可以生成一对密钥(公钥&密钥)使用公钥进行数据加密,而加密后的数据只能通过私钥进行解密,连接建立后,将自己的公钥发送给对方,对方使用公钥加密要传输的数据,这个数据只能用私钥进行解密出来。

  • 混合加密:

​ 思想:假设是用户端对服务端进行验证

  1. 服务器生成一对非对称密钥,连接建立成功,通信前,将公钥发送给客户端

  2. 客户端收到后,使用公钥加密一个随机数A,以及自己支持的对称加密算法

  3. 服务器收到后,使用私钥进行解密,得到了随机数A,以及对方的对称加密算法、

  4. 服务器向客户端发送一个随机数B,以及自己支持的对称加密算法

    客户端和服务器,各自根据两个随机数以及支持的对称加密算法,设计一个对称密钥,走到这一步,对称密钥协商完毕

  5. 往后的通信使用对称密钥进行加密解密数据传输

收到后,使用私钥进行解密,得到了随机数A,以及对方的对称加密算法、

  1. 服务器向客户端发送一个随机数B,以及自己支持的对称加密算法

    客户端和服务器,各自根据两个随机数以及支持的对称加密算法,设计一个对称密钥,走到这一步,对称密钥协商完毕

  2. 往后的通信使用对称密钥进行加密解密数据传输

在实际的SSL加密中,身份验证和加密传输时整合在一起的

CA证书中包含了更多信息:通信双方的公钥,机构信息,证书颁发机构信息,失效时间…

​ 整体流程:

  1. 服务器自己生成一对密钥,拿着公钥,去第三方权威机构颁发证书
  2. 权威机构根据服务器公钥,生成一个CA证书,给服务器
  3. 客户端与服务器建立连接后,通信前,服务器先将CA证书发送给客户端
  4. 客户端收到CA证书后,进行解析验证权威机构是否自己信任,在权威机构验证对方身份,解析公钥
  5. 客户端生成一个随机数,使用公钥对随机数+加密算法进行加密,发送给服务器
  6. 服务器收到数据后,使用私钥进行解密,生成一个自己的随机数,将随机数和加密算法发送给客户端
  7. 客户端收到数据后,客户端和服务器都有对方的随机数和自己的随机数,将随机数和加密算法,进行计算得到一个对称密钥
  8. 往后通信,使用对称密钥进行传输加密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Exile_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值