2.HTTP简介
leezozz 5/15/2023 html
# HTTP简述(出自MDN)
超文本传输协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于TCP / IP层,但可以在任何可靠的传输层上使用。
# HTTPS
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是是HTTP的安全版本,即在HTTP下加入SSL层,HTTPS的安全基石是SSL,因此加密的详细内容就需要SSL。 它现在已经被广泛应用,比如GitHub,支付宝,掘金等。
# 为什么需要NTTPS
HTTP的几个缺点:
- 传输的时候使用明文,这显然会被不法者截取干一些见不得人的勾当。
- 没有认证机制,这样我们就可以伪造一些HTTP访问,这显然会造成一些困扰。比如Jmeter就是典型的例子,伪造一大堆的HTTP URL然后压力测试,这也就是DOS攻击的一种。
- 无法验证报文的完整性,比如一个HTTP的报文已经被不法者截取并且篡改,而服务器端却无法验证。
# HTTP与HTTPS的区别
- HTTP是明文传输,HTTPS通过SSL\TLS进行了加密
- HTTP的端口号是80,HTTPS是443
- HTTPS需要到CA申请证书,一般免费证书很少,需要交费
- HTTP的连接很简单,是无状态的。而HTTPS协议是SSL+HTTP;协议构建的可以进行加密传输、身份认证的网络协议,比HTTP协议安全
# HTTPS的缺陷
- 通信的速度变慢,由于需要加密,一个握手就多了好几个往返;
- 对用户的机器负载的增加
# HTTPS握手过程
- 客户端使用http的url访问web服务器,要求与服务器建立ssl连接
- web服务器收到客户端请求后,会将网站的证书(包含公钥)传送一份给客户端
- 客户端收到网站证书后会检查证书的颁发机构以及过期时间,如果没有问题就随机产生一个秘钥
- 客户端利用公钥将会话秘钥加密,并传送给服务器,服务端利用自己的私钥解密出会话秘钥
- 之后服务器与客户端使用秘钥加密传输
# HTTP协议
- 最初是浏览器与服务器之间的通讯协议,GET用于读取资源,POST用于提交表单
- 后来被扩充到接口格式的定义,GET和POST作为接口的请求方式
HTTP协议并没有限制GET请求上限(只是GET请求约定俗成把参数放在url的query中,url的长度有限)
- 浏览器限制:IE2048个字符,Chrome 2M,不同浏览器有不同的限制
- 服务端限制:有不同程度的限制,目的是解决性能损耗的问题
为什么做这样的限制呢? 是因为服务端解析一个字符串时,需要分配内存,而url必须作为一个整体去看待,没有办法分块处理。于是,必须预先分配一块足够大的内存来存储url,如果url太长或者并发量高的话,就很容易挤爆服务器的内存。为了解决这个问题,所以各端对url的长度做了不同程度的限制。这也就是GET请求有上限的原因
POST并没有比GET更安全
- 都是明文,只是一个参数存query,一个参数存body而已
- GET/POST只是请求方式,谈不上安全
- 真正的安全,只有双端加密,网络节点只能截取包,不能截取内容。如:https
RESTFul-API
表示性状态转义接口(即:API设计规范)
- 将一切数据试做资源
- 利用HTTP请求方式,描述对资源的操作(增、上、改、查)
- 通过HTTP相应状态码,描述对资源的操作结果(如:200/5xx)
Method规范:用于描述操作(动词)
- GET用于读取资源
- POST用于创建资源
- PUT用于更新资源(客户端提供更新后的完整资源)
- Patch用于局部更新(客户端提供资源局部变量)
- DELETE用于删除资源