网络(一)HTTP和HTTPS

2021-01-25  本文已影响0人  不辣先生

一)Http协议

Http协议:超文本传输协议,Http是基于tcp的应用层的协议。
OSI网络七层协议从上到下,分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
1>请求响应报文


Snip20210125_11.png

a.请求报文


Snip20210125_12.png
具体如下:
Snip20210125_13.png

Host:指明了该对象所在的主机(域名)
Connection:Keep-Alive首部行用来表明该浏览器告诉服务器使用的是持续连接
Content-Type:x-www-form-urlencoded 首部行用来表示请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面(httpBody 参数)
User-agent:首部行用来指明用户代理,即向服务器发送请求的浏览器类型
Accept-language:首部行用来表示该用户想得到该对象的语法版本(如果服务器中有这样的对象的话),否则服务器发送默认的版本
b.响应报文


Snip20210125_14.png

具体如下:


Snip20210125_15.png
Collection:close首部行告诉客户,发送完报文关闭tcp连接
Date:指的不是对象最后创建和修改时间,而是服务器从文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间
Server:首部行指示该报文由一台Apache Web 服务器产生的
Content-Length:首部行指示了被发送对象的字节数
Content-Type:首部行指示了实体中的对象是HTML文本

1>状态码
1.该类型状态码表示接收到请求并且继续处理
100:客户端必须继续发出请求。
101:客户端要求服务器根据请求转换HTTP协议版本。

2.该类型状态码表示动作被成功接收、理解和接受。
200,表明该请求被成功地完成,所请求的资源发送到客户端。
201,提示知道新文件的URL。
202,接受并处理,但处理未完成。
203,返回信息不确定或不完整。
204,收到请求,但返回信息为空.
205,服务器完成了请求,用户必须复位当前已经浏览过的文件。
206,服务器已经完成了部分用户的GET请求。

3.该类型状态码表示为了完成指定的动作,必须接受进一步处理。
300,请求的资源可在多处获得。
301,本网页被永久性转移到另一个URL。
302,请求的网页被重定向到新的地址。
303,建议用户访问其他URL或访问方式。
304,自从上次请求后,请求的网页未修改过。
305,请求的资源必须从服务器指定的地址获得。
306,前一版本HTTP中使用的代码,现已不再使用。
307,声明请求的资源临时性删除。

4.该类型状态码表示请求包含错误语法或不能正确执行。
400,客户端请求有语法错误。
401,请求未经授权。
402,保留有效ChargeTo头响应。
403,禁止访问,服务器收到请求,但拒绝提供服务。
404,可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。
405,用户在Request-Line字段定义的方法不被允许。
406,根据用户发送的Accept,请求资源不可访问。
407,类似401,用户必须首先在代理服务器上取得授权。
408,客户端没有在用户指定的时间内完成请求。
409,对当前资源状态,请求不能完成。
410,服务器上不再有此资源。
411,服务器拒绝用户定义的Content-Length属性请求。
412,一个或多个请求头字段在当前请求中错误。
413,请求的资源大于服务器允许的大小。
414,请求的资源URL长于服务器允许的长度。
415,请求资源不支持请求项目格式。
416,请求中包含Range请求头字段,在当前请求资源范围内没有range指示值。
417,服务器不满足请求Expect头字段指定的期望值。

5.该类型状态码表示服务器或网关错误。
500,服务器错误。
501,服务器不支持请求的功能。
502,网关错误。
503,无法获得服务。
504,网关超时。
505,不支持的http版本。

二)Http的请求方式

GET POST PUT DELETE HEAD OPTIONS
a. GET和POST的区别
从语法的角度
1.GET参数一般以?拼接到URL后面,POST请求参数放在Http body中
2.GET参数长度限制为2048个字符,POST没有限制
3.GET参数是裸露在URL中,是不安全的,POST请求相对安全,之所以说相对安全,是因为虽然POST不是明文传输,但如果被抓包GET和POST一样是不安全的
从语义的角度
GET:获取资源是安全的,幂等的(只读的,纯粹的),可缓存的
POS:获取资源是非安全的,非幂等的,非缓存的
注:
1.这里的安全指不应引起服务端的任何状态变化,GET的语义就是获取数据,是不会引起服务端状态变化的,即安全的。(HEAD OPTIONS也是安全的)而POST是提交数据,时可能引起服务器状态变化的,即不安全的。
2.幂等,同一个请求执行一次和执行多次的效果完全相同,显然GET是幂等而POST是非幂等的。
3.可缓存的,指请求是否可以被缓存。GET请求会主动进行Cache
以上特性并非并列,正是因为GET是幂等的只读的,即GET请求除了返回数据不会有其他副作用,所以GET才是安全的,从而可以直接由CDN缓存,大大减轻服务的负担,也就是可缓存的。而POST是非幂等的,即除了返回数据还有其他副作用,所以POST是不安全的,必须交由Web服务器处理,即是不可缓存的
GET和POST本质上都是基于TCP链接,并无差别。
在响应时,GET产生一个TCP数据包,POST产生两个TCP数据包:对于GET方式的请求,浏览器会把Header和实体主体一并发送出去,而POST请求浏览器会先发送Header,服务器响应100Continue,浏览器再发送实体主体,服务器响应200 OK(返回数据)。
b.GET相对POST的优势是什么?
1.最大优势就是方便。GET的URL可以直接手输,从而GET请求中的URL可以被缓存到书签里或者历史记录里。
2.可以被缓存,大大减轻服务器负担

三)HTTP的特点

1.HTTP是无状态的
即协议对于事务处理没有记忆能力。
每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求时无直接关系,它不会受前面的请求应答情况影响,也不会直接影响后面的请求应答情况,也就是说服务器没有保存客户端的请求状态,客户端必须带上请求状态去请求服务器
标准的HTTP协议指的是不包括cookie、session、application的HTTP协议
2.HTTP的持久连接

Snip20210125_16.png
非持久连接:每个连接处理一个请求-响应事务
持久连接:每个连接可以处理多个请求-响应事务
持久连接情况下,服务器发出响应后让TCP连接继续打开着,同一对客户/服务器之间的后续请求和响应可以通过这个链接发送
HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接(keep-alive)。
HTTP持久连接怎么判断一个请求是否结束的?
1.Content-length:根据所接收字节数是否达到Content-length值
2.chunked(分块传输):Transfer-Encoding,当选择分块传输时,响应头中可以不包含Content-length,Content-length,服务器会先回复一个不带数据的报文(只有响应行和响应头和\r\n),然后开始传输若干个数据块。当传输若干是个数据块完成后,需要再传输一个空的数据块,当客户端接收到空的数据块后,则客户端知道接收完毕

四)HTTPS

1.HTTP和HTTPS的区别
HTTPS协议=HTTP协议+SSL/TSL协议
2HTTPS的安全建立流程
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。在传输过程中会涉及到三个秘钥:
服务端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来对称加密

Snip20210125_19.png
1.客户端访问HTTPS连接
客户端会把安全协议版本、客户端支持的加密算法列表、随机数C发送给服务器
2.服务器发送证书给客户端
服务端接收到密钥算法配件后,会和自己支持的加密算法列表进行匹配,如果不符合,则断开连接。否则,服务器会在该算法中选择一种对称算法(如AES)、一种公钥算法(如具有特定密钥长度的RSA)和一种MAC算法发送给客户端。
服务器有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务端保存着私钥,不能将其泄漏,公钥可以发给任何人。
在发送加密算法的同时还会把数字证书和随机数S发送给客户端
3.客户端验证server证书
会对server的公钥进行检测验证其合法性,如果发现公钥有问题,那么HTTPS传输就无法继续。
4.客户端组装会话密钥
如果公钥合格,那么客户端会用服务器公钥来生成一个前主密钥(Pre-Master Secret, PMS),并通过该前主密钥和随机数C、S来组装成会话密钥
5.客户端将前主密钥发送给服务端
通过服务端的公钥来对前主密钥进行非对称加密,发送给服务端
6.服务端通过私钥解密得到前主密钥
服务端接收到加密信息后,用私钥解密得到前主密钥
7.服务端组装会话密钥
服务端通过前主密钥和随机数C、S来组装会话密钥
至此,服务端和客户端都已经知道了用于此次会话的主密钥
8.数据传输
客户端收到服务端发来的密文,用客户端的密钥对其对称解密,得到服务器发送到额数据。同理,服务端收到客户端发来的密文,用服务端密钥对其对称解密,得到客户端发送的数据
总结
会话密钥=前主密钥+随机数C+随机数S
1.HTTPS加密过程使用非对称加密,非对称加密是一种很耗时的加密方式
2.后续通信过程使用对称加密,减少加密时带来的性能损耗
3.对称加密加密的是实际数据,非对称加密加密的是对称加密所需要的客户端的密钥
上一篇下一篇

猜你喜欢

热点阅读