千里之外,取其SJ(数据)-- 网络请求之HTTP和HTTPS

本文深入探讨了HTTP协议的工作原理,包括请求方法、报文字段和常见的应答状态码。接着介绍了HTTPS是如何通过加密和认证增强HTTP的安全性,以及应对中间人攻击的策略。最后,提到了HTTP2.0的改进,如二进制格式、多路复用和header压缩等特性。

谈到网络,必然离不开Http和Https

先简单了解下Http吧

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),用于从服务器传输超文本到本地浏览器的传送协议。工作于C/S架构,浏览器作为HTTP客户端通过URL向HTTP服务端服务器发送请求,web服务器根据接收到的请求,向客户端发送响应信息。HTTP工作于应用层,传输的数据单位是报文,分为请求报文和响应报文。

HTTP的请求方法:

GET:获取URL指定的资源;   

POST:传输实体信息;   

PUT:上传文件;   

DELETE:删除文件;   

HEAD:获取报文首部,与GET相比,不返回报文主体部分; 

OPTIONS:询问支持的方法;     

TRACE:追钟请求的路径;

 CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信。主要使用SSL和TLS将数据加密后通过网络隧道进行传输。

HTTP的报文字段分为5种:

请求报文字段、应答报文字段、实体首部字段、通用报文字段、其他报文字段

稍微谈一下一个我们经常提到的:请求头部

请求头部由键/值对组成,有四种类型的首部字段:通用首部字段、请求首部字段、响应首部字段、实体首部字段;

常用的请求首部:

1、请求报文字段

Accept:客户端可处理的媒体类型,例如:Accept: text/html, application/xml; q=0.9, */*

Accept-Encoding:客户端支持的内容编码,例如:Accept-Encoding:gzip

Accept-Charset:客户端支持的字符集

Authorization:客户端的认证信息

User-Agent:将发起请求的浏览器和代理名称等信息发送给服务器

Accept-Language:表示客户端支持的语言。如:Accept-Language: zh-cn, en

Host:表示访问资源所在的主机名

Referer:告知服务器请求是从哪个页面发起的

gzip: 由文件压缩程序gzip生成的编码格式

2、实体首部字段:

Allow:通知客户端,服务器所支持的请求方法

Content-Encoding:告知客户端,服务器对资源内容的编码

Content-Type:告知客户端资源的媒体类型

Content-Length:告知客户端字段的长度

3、通用报文字段:

Cache-Control:控制缓存行文

Connection:管理持久连接,设置为Keep-Alive可实现长连接

Transfer-Encoding:规定了传输报文主题时使用的传输编码

4、其他报文字段:

Cookie:对HTTP的状态进行记录

HTTP需要注意的三点事项:

1、HTTP是无连接的:表示限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户端的应答后就立即断开连接;

2、HTTP是媒体独立的:意味着只要客户端和服务端知道如何处理数据内容,任何类型的数据都可以通过HTTP发送;

3、HTTP是无状态的:HTTP协议对于事物处理没有记忆能力,意味着如果后续需要处理前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

常见的HTTP应答状态码:

100(continue): 表示到目前为止都正常,客户端可以继续发送请求;

200(ok):请求成功;

204(no content):表示请求已经成功处理,返回的响应报文不包含实体的主体部分;

206(partial content):表示客户端已经进行了范围请求,响应报文中包含由content-range指定范围的实体内容;

301(moved permanently):永久性重定向;

302(found):临时性重定向;

303(see other):查看其他地址,与301类似,使用GET和POST请求查看;

304(not modified):如果请求报文首部包含一些条件,如果不满足条件,服务器会返回304;

305(use proxy):使用代理,所请求的资源必须通过代理访问;

307(temporary redirect)临时重定向,不同于302的是,307要求浏览器不会把重定向请求的POST方法改成GET方法;

400(bad request):请求报文中存在语法错误;

401(unauthorized):请求需要验证用户;

403(forbidden):访问权限问题;

404(not found):请求访问的页面丢失,造成的原因有很多,可能在服务端也可能在客户端,如网络异常或服务器奔溃;

405(method not allowed):客户端请求中的方法被禁止;

500(internal server error):服务器正在执行请求时发生错误;

503(service unavailable):由于超载或系统维护,服务器暂时无法处理客户端的请求;

505(HTTP version not supported):服务器不支持请求的HTTP协议版本,无法完成处理。

 

HTTPS

HTTPS = HTTP + 加密 + 认证 + 完整性保护,hypertext transfer protocol secure,https经由HTTP进行通信,利用SSL/TLS来加密数据包。

HTTP存在的安全隐患:

窃取:HTTP为名明文传输,传输的数据很容易被不法分子窃取;

伪装:不法分子可以伪装成客户端,与服务端进行通信;

篡改:不法分子对传输的数据进行篡改达到自己的目的。

HTTPS使用到的一些技术:

1、加密技术

加密算法包括对称加密(如DES)和非对称加密(如RAS)

对称加密中客户端和服务端使用同一个密钥,但是密钥存放在客户端有被窃取的风险;

非对称加密中密钥分成公钥和私钥,公钥存放在客户端,密钥存放在服务端,但是算法复杂度高,处理过程耗时较长,因此要求对待加密的数据的长度不能太长,显然不符合日常的数据传输;

因此采用两者结合的方式:

过程大致是这样的:

客户端向服务端申请了非对称加密的公钥A,并在客户端这边生成了对程加密的密钥B,然后通过服务端返回的非对称加密的公钥A对刚生成的密钥B进行加密,然后生成C传输给服务端,服务端再通过先前生成的非对称加密的私钥A对客户端传输过来的密钥C进行解密,就得到了客户端生成的对称加密密钥B,后续传输的数据就可以通过这个密钥B进行加解密,因为密钥B是被非对称加密的公钥进行加密的,所以在传输途中,被拦截了也不能解密,这样一来,看似是可行的,但是,总会有不法分子想方设法搞破坏,出现了一种“中间人攻击”:

这个过程图我的图里描述的很清楚了,经过上面描述的操作之后,客户端这边有对称加密密钥和非对称加密公钥,服务端这边有对称加密密钥和非对称加密私钥,两者的数据传输可以通过对称加密密钥进行加解密,但是这里面一直都存在着一个第三者,而且它的存在,客户端和服务端两边浑然不知,这样的数据通信无异于果奔 ,细思极恐,这种问题是怎么处理的呢?那我们再回顾一下:HTTPS = HTTP + SSL,SSL是怎样的一个流程呢,了解一下?

这个流程看的很清楚,然后抓到一个重点词汇:证书。证书可以是自己制作或者CA证书,区别就是自己颁发的证书需要客户端验证通过才能继续访问,CA证书则不会弹出提示页面。这套证书里面其实就是包含了一对公钥和私钥,还有证书颁发的机构,过期时间,还有一个很重要的内容就是域名,证书中加入了域名。那为啥中间人不能修改域名呢,因为CA机构是通过自己的私钥对证书内容(包括域名)进行加密,而这个私钥只有机构自己才有不外发的,如果中间人自己申请证书,那么客户端收到证书解密出来的域名和自己请求的域名对不上,那还是无法通过验证证书。

然后这里补充一下:如何保证每次访问的安全性呢,其实涉及到的东西还很多,这里简单概括一下:就是每次请求客户端和服务端都会发送信息的过程中携带一个随机数,然后都是靠随机数加密生成密钥,然后上面的内容涉及到的是HTTPS单向认证,如果安全性要求更高的,可以多了解了解HTTPS的双向认证。

然后最后顺便谈谈HTTP2.0,由于平时对这块了解的并不多,写这篇博客时,我也是参考网上的一些资料,这里做一些总结:

HTTP2.0相对于HTTP1的重大升级包括以下几方面:

新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。多路复用(连接共享)可能会导致关键请求被阻塞。HTTP2.0里每个数据流都可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还可以依赖其他的子数据流。

header压缩,HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小(使用 HPACK 算法对 header 的数据进行压缩),通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

服务端推送(server push),在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应,即服务器可以额外的向客户端推送资源,而无需客户端明确的请求。

更详细的关于2.0的介绍,可以借阅下这篇文章哈:https://www.jianshu.com/p/8519e9275d41

关于HTTP和HTTPS的复习就到这里了,后面开始讲讲我们开发中常用的一些网络请求框架吧。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值