网络总结归纳(二)HTTP

网络归纳总结:

一、http:

http是超文本传输协议。超文本可以将多种文本/图像等进行混合,更重要的是可以从一个文本跳转到另一个文本,而对于传输则就是沟通。
http他有不同的版本
0.9 这个版本相对简单,采用纯文本格式,而且设置为只读,所以只能使用get方法从服务器获取html文件,响应以后就直接关闭,响应中只包含了文档本身,没响应头,无错误吗,无状态码。
响应过程:应用层的http建立在传输层tcp之上并运用tcp可靠性等特性,先三次握手建立连接,客户端请求建立连接,服务端响应请求,数据以ascii码字符流返回给客户端,传输完成,断开链接。

1. http1.0

http1.0他在其上增加了post方法,head方法,加入了协议版本号,同时添加了文件处理类型,加入了http headr,使得http请求更加灵活,增加了响应状态码,标记出错的原因。
http1.1继续增加了put等方法,他是长链接,会在响应头加上connection:keep-alive,而之前都是短链接,对于为什么使用长链接,随着文件越来越大,图片等信息也越来越复杂,如果我们每一次上传下载文件都需要建立连接断开链接,这个过程开销很大,而提出长链接,也就是说tcp链接可以具有多个http请求,但这个是可以选择的,我们可以使用coonection:close让其关闭。还有一点就是他强制要求host头。
但他这带来一些诟病:
原因1:tcp自带慢启动。也就是说对于一个页面,有静态数据,动态页面,很多小文件在加载的过程中就会直接发起请求,这样导致太多的请求都会经历慢启动过程,花费时间太多。
原因2:多条tcp连接带宽竞争。带宽固定,多条tcp连接同时发起竞争带宽资源,由于各个tcp连接之间没有通讯机制,所以无法得知那些资源优先级更高,就导致想快速下载的资源反而延迟下载。
原因3:头部阻塞。因为大家共用一条tcp通道,但是第一个请求没有结束,第二个请求就可能阻塞等待,也就是说不能同时发送接收数据。

2.http2.0

http2.0就解决了头部阻塞的问题。
http是一问一答模式,如果都在这个队列排队导致阻塞,那就多个队列并发进行,也就是说对于同一个域名发起多个长链接,就跟买票一样,如果一个窗口不够用,就开多个窗口。但是如果还是不够用,我们可以去建多个火车站进行分流,而在这里的话就叫做域名分片。也就是多个域名指向同一个服务器。
在http2中他也不是按顺序发送,再在同一个链接里面连续的数据包,可能属于不同的回应,每一个请求或回应的所有数据包称为一个数据流,每个数据流都标记着独一无二的编号,规定客户端发出数据编号为奇数,数据流发送一半的时候,可以取消,只需要给服务器发送信号(rst_stream帧),而http1只能关闭tcp连接。而服务器发出说为偶数,而且客户端还可以指定数据流优先级,服务器会先响应优先级高的请求。
他是二进制协议,http1之前都是文本协议,头信息是文本,数据体可以是文本或二进制,而http2整个都是二进制数据。
头信息压缩,因为http是无状态的,每一次请求都需要附上所有信息,因此,很多请求字段都是重复的,比如cookie和useragent,一模一样的内容,每次请求都必须携带,会浪费很多带宽,也会影响速度,http2进行了头部压缩机制,一方面头信息使用gzip或者compress压缩后再发送,另一方面,客户端和服务器同时维护了一张头信息表,所有的字段都会存入这张表中,生成一个索引号,以后就不用发送同样字段,只发送索引号。
服务器推送,就比如说现在客户端请求一个网页,这个网页里面包含很多静态资源,正常情况下,客户端收到网页解析html源码,发现有静态资源,再发出静态资源请求,但其实,服务器预期客户端很可能再请求静态资源,所以就主动把这些资源随着网页一起发送给客户端。

3.http3.0

有一个名次quic,这是一个基于udp并且能像tcp一样具有可靠性特点的协议,是以二进制进行传输。
主要解决了两个问题,进一步解决了头部阻塞的问题,通过独立不同流,也就是说让各个流之间实现相互独立传输,互不干扰。第二个就是切换网络是时的连接保持,比如说我们一般wifi切换4g,基于tcp协议,会因为网络的切换导致ip地址的改变,而基于udp的quic协议,及时切换也可以恢复之前与服务器的连接。

二、HTTP报文

1.http报文

http报文报文也就是客户端与服务器交互的信息。
请求报文通常由三部分组成
请求行(请求方法,空格,uri,http版本),

请求方法有8种,每一种都是根据请求资源的不同而选择的。
1.我主要知道有get :从服务器中取资源,可以请求图片,视频等。
2.head: 跟get类似,但是从服务器请求的资源不会返回请求的实体数据,只会返回响应头。
3.post/put 对应get,向服务器发送数据。
4.uri: 统一资源标识符,严格说他不等于网址,包含url和urn。uri出现主要是确定要访问什么。而dns的出现是因为ip地址太多。
5.协议名:http 或者 ftp 参数 用?分割,都是key-value形式,如果是多个参数,则用&来进行分割。
6.请求体(kry-value形式说明报文)。
7.请求正文(实际传输的信息)

2.响应报文

响应行:http版本 状态码 状态码描述

2.1 HTTP状态码

状态码分为5类

(1).1XX 处于中间状态,还需后续操作。比如100。
(2) 2XX
200:表示ok,表示成功。如果不是head请求,则响应头通常会有body数据。
204 :不同于200,他的响应头中没有body数据。
206:是http分块下载或者断电续传的基础,他也是服务器成功处理了请求,但body的数据不是资源的全部,而是其中一部分。而这个状态码通常还会伴随头字段content-range,表示响应报文里数据的具体范围,供客户端确认。

(3) 3XX 重定向到其他位置
301永久重定向,本地请求的资源不存在,使用新的uri再次访问。
302 临时重定向,临时所请求的资源暂时还在,但需要用另一个uri访问。301和302通过在字段location中表明需要跳转的uri。301比如网站要全部升级https。302夜晚系统升级。
304运用于缓存控制。用于 if-modified-since请求,表示资源未修改,可理解成缓存=重定向。

(4)4XX 请求报文有误,服务器无法处理。
400 请求报文有错误,但很笼统。
403服务器禁止访问资源,比如涉及到敏感词汇等。
404想要的资源在本地未找到,从而无法提供给服务端。无效链接或者uri拼错。
405获取资源的方法限制。比如只能get不能post。
406客户端资源无法满足客户端请求的条件,比如请求需要中文但只有英文。
408请求超时了。
409多个请求发生冲突,可以理解为多线程并发时的竞态。
413 请求报文中的body太大。

(5) 5XX服务器错误,服务器对请求处理的时候发生内部错误。
500一般是代码写错。
502服务器作为网关或者代理时返回的错误码,服务器自身工作正常。
503服务器很忙,暂时无法响应服务。比如超负载或者维修。只是个临时状态。
505 http协议版本不受支持。

2.2响应体:key -value

报文主体。
对于body来说:
1.头字段 的字段名不区分大小写。字段名里也不允许出现空格,可以使用连字符,但不可以使用下划线。字段名后必须紧跟:,不能有空格。
body类型:text。text/html超文本。 text/plain纯文本
application:可能是文本,可能是二进制。
image / video. 可以使用gzip压缩数据。 gzip无法对视频操作,可以transferring-encoding:chunked分块传输。

3.http特点:

1.灵活可扩展:头部字段很多都是灵活可扩展的。
2 .应用广泛。
3.无状态,没有记忆功能,好处:少占资源,更容易搭建集群,通过负载均衡将请求转发到任意一台服务。

缺点:无法支持需要连续步骤的“事务”操作。

三、断点续传

要实现断点续传,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。http1.1中定义了断点续传的相关http头range和content-range。

1.实现过程

1.比如客户端下载一个1024k的文件,已经下载了其中512k。
2.网络中断,客户端请求续传,因此需要在http头中申明本次需要续传的片段 range,这个头就会通知服务端从文件的512k位置开始传输,
3.服务端收到断电续传的请求后,从文件的512k位置开始传输,并且在http头中增加content-range,此时服务端返回的状态码是206。

但会出现一种情况,在终端发起续传请求时,url对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错的,所以我们需要有一个唯一标识文件的方法,比如last-modified标记文件的最后修改时间,就可以判断出续传文件是否已经发生过改动。还有一个是如果终端使用的是if-range,那么服务端在收到续传的请求时,通过if-range中的内容进行校验,校验一致时返回206,不一致返回200,回应的内容为新文件的全部数据。

四、http代理

http代理:常见的功能就是负载均衡。

五、https

1.为什么会出现https?

是因为http是明文传输。
https相当于就是http+ssl/tls。也就是在传输层和应用层中间加了一层tls。tls由ssl握手协议,(相对于三次握手),ssl修改密码规范协议,(也就是告诉对方,从此刻开始,后续的数据将使用加密算法进行加密再传输),ssl警报协议,(类似于http状态码,通过反馈不同的消息进行不同的策略)ssl记录协议(记录为tls发送接收数据的基本单位)组成。

2.对称加密与非对称加密

对称加密,加密方与解密方使用同一把秘钥,发送方使用相应的加密算法和秘钥,对将要发送的信息加密并且携带秘钥,接收方用这把秘钥进行解密,从而获取到信息。

非对称加密:有一个公钥,有一个私钥,发动方与接收方使用不同的钥匙,主要是解决了在秘钥协商过程中发生泄漏。公钥用来加密,对所有可见,私钥用于解密,只对接收方可见。即使在途中截获了密码,没有私钥拿到也无用。(应用:使用多台服务器搭建大数据平台hadoop,为方便多台服务器免密登陆,就会涉及到秘钥分发)。

混合加密
非对称加密虽然安全,但速度比较慢,所以在通信过程中使用RSA等解决秘钥交换问题,然后使用随机数产生的在对称算法中的会话秘钥,最后使用加密。对方使用私钥解密得到的密文取出会话秘钥,这样就实现了秘钥交换。通过混合加密完成了加密,但安全还要保证完整性以及身份认证,所以就有一个摘要算法。是一个单向的不可逆的,无秘钥的算法。在tls中使用的是sha-2。比如a向b转账1000,a加上sha-2,网站计算摘要并对比,一致则完全可信,而此时c想修改这个1000,网站发现摘要不一样,就认为不可信。

3.Https请求建立连接过程:

1.首先通过非对称加密建立通信过程。
2.在握手阶段,为什么使用3个随机数,一方面防止随机数C被猜出,一方面增加seesion key的随机性。
3.客户端发出支持混合加密的算法。
4.服务端返回选用的混合加密算法。
5.客户端对算法进行确认。
6.服务端对算法进行确认。

4.https握手机制

1.客户端向服务器发起请求。
2.服务端取出公钥以及证书发送给客户端。
3.客户端就会判断这个证书是否有效,无效就会弹出警告,有效就会生成一个随机数串,并生成客户端的共享秘钥。
4.用证书上的公钥加密随机数串。
5.将加密后的秘钥发送给服务端。
6.服务端用私钥进行解密,得到随机数串,并生成服务端的共享秘钥,此时客户端与服务端都有相同的共享秘钥,就可以进行安全通信。服务端对响应进行加密,客户端对报文进行解密。

六、http与https的区别

1.http,明文传输,https在其应用层与传输层之间增加了一个tls。
https安全,安全体现在三个地方,一个是对明文进行加密,一个是验证了双方的身份,防止伪装,客户端与服务端都发送到正确。最后一个是保证了信息的完整性。

2.http端口号80,https端口443.

3.https在三次握手之后还要进行ssl的握手。

4.Https需要向ca申请证书,来保证服务器身份是可信的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值