ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HTTP总结

2021-12-20 18:58:21  阅读:109  来源: 互联网

标签:总结 公钥 HTTP 请求 服务器 客户端 加密


参考自:微信公众号小林coding的《图解网络》
详细的HTTP协议介绍可看这里:
链接:https://pan.baidu.com/s/1vK7S_6n2VuC6NWFBC8gn-w
提取码:0u4b

状态码

2xx:报文收到并被正确处理
3xx:重定向,资源位置改变,需要客户端重新发送请求
4xx:客户端错误,请求报文有误
5xx:服务器错误

常用字段

Host:指明服务器的某个域名,因此客户端可以请求同一台服务器中不同网站的资源。
Content-Length:表明本次报文中消息体的数据长度,如果是短连接可以写-1,留给客户端自行计算;如果是长连接就一定要精确地标明长度,否则会截断或者超时
Connection:keep-alive表示长连接,需要客户端或服务器主动关闭该连接
Content-Type:文件格式;编码
Content-Encoding:数据的压缩方法,表示服务器返回的数据使用了什么格式

GET和POST方法

GET方法是从服务器获取资源,例如静态网页、文本等等。POST方法则是向服务器提交数据。

安全和幂等
安全:请求方法不会破坏服务器上的资源
幂等:多次执行相同操作,结果不变

很明显GET是安全且幂等的,POST既不安全也不幂等

HTTP的缺点

1、无状态
服务器不会记忆HTTP的状态,这减轻了服务器的负担,但是没有状态在当今不是什么好处,很多网站都能够注册用户,如果服务器不记忆状态,那我们打开每一个网页都要进行身份验证,这太麻烦了。
简单的解决方法就是cookie技术,建立连接后服务器先给客户端发一个cookie,然后客户端在发送请求时也会把cookie信息写入报文,这样就不需要反复进行身份验证。

2、明文传输
用户的个人信息也会放在报文里传输,由于是明文,别人一旦截获报文就会被盗号。

HTTP/1.1性能

相比于HTTP/1.0,HTTP/1.1性能有了改善。
1、长连接
客户端发送报文时不需要每次都重新建立连接,省去了TCP握手的三次TCP头部的开销。

2、管道网络传输
在同一个TCP连接里,浏览器可以同时发出多个请求。

3、队头阻塞
虽然浏览器可以同时发送多个连接给服务器,但是服务器还是串行地处理请求,如果某个请求处理时间过长,就会引起请求队列的堵塞,这就是队头阻塞

HTTPS

为了解决HTTP不安全的问题,在TCP与HTTP之间加了SSL/TLS协议,HTTP+SSL/TLS统称为HTTPS。HTTPS在TCP三次握手之后,还需要进行TLS握手,以进入加密报文传输阶段。

信息加密

对称加密

用同一个密钥进行信息的加密和解密,比如凯撒密码等。

非对称加密

乙方首先产生两个密钥,公钥和私钥,如果数据被公钥加密了,可以用私钥进行解密。乙方把公钥公开,甲方就可以通过公钥来加密数据并发送给乙方,乙方用私钥来解密。只要乙方不公开私钥,这份数据就不会被其他人解密。比如RSA算法。

混合加密

采用了对称加密+非对称加密的方法。
1、通信建立前用非对称加密的方法交换秘钥
2、通信过程中双方都是用秘钥来加密和解密明文

也就是说一开始服务端产生公钥和私钥,并把公钥交给客户端,然后服务端就可以用私钥来验证客户端身份,验明身份后正式进入通讯过程。期间双方都用一个新产生的公钥加密明文。

摘要算法

加密明文前,客户端会利用摘要算法得出明文的指纹(哈希算法,把文章内容进行哈希后得出的值,不同的明文哈希后会得出不同的哈希值)。
因此服务端解密后可以通过比较正文内容和指纹来判断明文是否损坏、丢失。

数字证书

为了保证服务器传递公钥的时候公钥不被修改,会由第三方(数字证书认证机构,也称CA)把服务器公钥放在数字证书中,如果证书可信,公钥就可信。
在这里插入图片描述

SSL/TLS协议

协议有以下内容:
1、客户端向服务器索取并验证服务器公钥
2、双方协商产生会话秘钥
3、双方采用会话秘钥加密通信

前两步是TLS的建立过程,涉及四次通信。
1、客户端先发送加密通信的请求,里面包含客户端支持TLS协议的版本、客户端用于产生会话秘钥的随机数和客户端支持的加密算法

2、服务器相应请求,内容包含TLS版本、服务器用于产生的会话秘钥的随机数、确认的加密算法列表和数字证书

3、客户端首先确认数字证书是否可信,然后从证书中取出服务器公钥加密报文,报文中包括了一个随机数、加密通信通知(表示后续通信都用会话秘钥加密)和客户端握手结束通知

4、服务器利用前三步的三个随机数计算出会话秘钥,并回发加密通信通知和服务器握手结束通知。

后续的通信过程与普通的HTTP协议通讯过程一致。

优化HTTP/1.1

尽量避免发送HTTP请求

这点由客户端实现,如果客户端反复请求同一个网页资源(特别是静态网页),每一次都要发送HTTP报文,在有些时候是没有必要的。
因此,客户端可以把第一次请求获取的网页数据保存到磁盘里,也就是缓存,这样就减少了HTTP请求次数。
服务器在发送响应报文时,也会估算出大概的资源失效时间(数据更新了),并发给客户端。

减少发送请求的次数

减少重定向请求次数

重定向是指服务器把一个资源转移到了另一个URL中,但客户端不知情,仍然访问旧的URL,这时服务器发挥302状态码告诉客户端资源的位置已经发生变更了,让客户端访问新的URL。
如果重定向请求很多,那么客户端就要发出多次HTTP请求。
在现在的网络通讯中,在客户端和真正的负责处理请求的服务器之间还会有代理服务器,代理服务器会先接受请求,并把请求均匀地分配给源服务器进行业务处理。因此,我们可以让代理服务器代替客户端完成重定向。

合并请求

也就是把多个小资源的请求转换成一个大资源的请求,这样可以减少头部开销。但是其中一个小资源发生改变,就需要重新请求整个大资源,耗费了更多流量。

延迟发送请求

请求网页时没必要把整个网页通通获取过来,而是根据用户的浏览情况分阶段获取。

减少HTTP响应的数据大小

采用压缩技术减小数据大小。
分为有损压缩和无损压缩。无损压缩可以使数据恢复原样,适用于文本文件。比如霍夫曼编码。gzip、br就是无损压缩算法。有损压缩不能使数据完全恢复原状,压缩率更高。

HTTP/2的优势

1、头部压缩:
使用HPACK算法压缩头部,HPACK有以下三个部分:
1、静态表:写入HTTP/2的框架且不会改变,只有61组
2、动态表:收录不在静态表范围的字符串,动态更新
3、霍夫曼编码:压缩率高达50%-90%

2、二进制帧
把HTTP/1的文本格式传输改为二进制格式传输,也就是把头部和消息体分为两个二进制帧传输。
帧的结构和分类如下:
在这里插入图片描述
在这里插入图片描述
3、并发传输
HTTP/2使用了stream技术,一个TCP连接里可以包含多个stream,一个stream里包含多个message(HTTP请求或响应),一个message里包含多个frame(二进制帧)。

标签:总结,公钥,HTTP,请求,服务器,客户端,加密
来源: https://blog.csdn.net/chixuzhendang/article/details/122028970

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有