Http

  • Http介绍、Http头部信息
  • Http2.0
  • http与tcp、socket与tcp、socket与Http
  • http3次握手和4次挥手
  • 基于Http的OkHttp缓存、以及基于Http的Android长连接机制

Http:超文本传输协议,Http是基于TCP/IP通信的协议,默认端口号为80,
特点:支持客户/服务模型、灵活
无连接:在Http1.0的时候,每次连接只处理一次请求。服务端处理客户的请求后,收到客端的应答,即断开连接。(在http1.1之后支持Connection:Keep-Alive,一次连接可以重复多次请求)
无状态:协议对事物处理没有记忆能力,客服端请求服务器后服务器应答请求,但服务端不知道客户端状态,也不会记录信息(可以使用cookie机制保存session,解决无状态问题)

http1.0 请求方式get post head;
http1.1新增 OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

http get请求Head 大致如下
在这里插入图片描述

GET /icwork/? search=product HTTP/1.1
Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,.
Accept-Language:en-us
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)
Host:www.icconcept.com:8080
Referer:http://www.yoursite.com/header.html
Connection:Keep-Alive

一个Http有大致包含三个部分

  • 请求行
  • 请求头
  • 请求实体

请求行:包含请求方法 get 或者post 。URL排除Host部分剩下的部分,也就是资源在服务器上的路径。以及Http版本号。
请求头:包含

  1. Accept:浏览器或其他客户能接受的MIME文件格式,Server可以根据它返回合适的文件格式
  2. Accept-Charset:指浏览器能接受的字符串编码,
  3. Accept-Language:指浏览器能接受的语言种类
  4. Accept-Encoding:指浏览器支持的编码方式。编码方式不同于文件格式,它是为了压缩文件,加快文件传递速度
  5. User-Agent:客户浏览器名称
  6. Host:对应网址URL和服务器端口号
  7. Referer:表明产生请求的网页地址,不如从A网址链接跳转到B,那么会记录A的地址,这个是web用来请求跟踪的
  8. Cache-Control:告诉服务起器是否可以维持固定的Http请求,http1.1是用keep-alive为默认值,当需要多个文件的时候不需要重复进行tcp连接
  9. Content-Type:用来表明Request的内容类型;
  10. If-Match:供PUT方法使用
  11. If-Modified-Since:客户使用这个属性表明它只需要在指定日期之后更改过的网页。因为浏览器可以使用其存储的文件而不必从服务器请求,这样节省了Web资源。由于Servlet是动态生成的网页,一般不需要使用这个属性
  12. If-None-Match:和If-Match相反的操作,供PUT方法使用
  13. If-Unmodified-Since:和If-Match-Since相反
    请求实体:在get 请求中没有请求实体,post请求才有请求实体

http2.0特点

  • 二进制分帧
  • 头部压缩
  • 多路复用
  • 请求优先级
  • 服务推送

二进制分帧
在这里插入图片描述
http2.0在在应用层传输层之间增加了一个二进制分帧层请求头请求行封装成HEADERS帧Body封装成DATA帧,使用二进制的方式解决了Http1.0基于文本格式的天然缺陷。

头部压缩 : Http1.x每次请求头部都携带大量信息,Http2.0在客户端和服务端使用首部表来跟踪和存储发送的键值对避免重复发送也减少传输大小(如果再次发送请求比如轮询,那么首部开销为零字节。如果首部发生变化,只需把发生变化的添加到帧header中,增加或修改的首部帧会添加到相应的首部表)

多路复用:对于Http1.1虽然使用Connection:Keep-Alive进行了多路复用,但在不同的浏览器上一次连接对传输次数是有不同限制的。那对于Http2.0多路复用允许一次连接多重的请求响应消息。一直连接允许任意次数的双向数据流

请求优先级把Http消息分解为很多个独立的帧后,就可以通过优化这些帧的交错和传输顺序,进一步提供性能。为了做到这一点,每个流都带有31个比特的有限值

服务器推送:同SPDY一样,http2.0也具有server push功能

在Http2.0中引入3个概念:

  1. 数据流:基于TCP连接之上的逻辑双向字节流,对应一个请求及响应。客户端每发起一个请求就建立一个数据量就,后续该请求及其响应的所有数据都通过该数据流传输。
  2. 消息:一个请求或者响应对应的一系列数据帧
  3. ”:HTTP/2的最小数据切片单位,每个帧包含帧首部,至少也会标示出当前帧所属的流。

3个概念对应的解释

  • 所有的通信都可以再一个Http连接中完成请求
  • 每一个数据流都有一个唯一的标识符和优先级信息,用于承载双向消息
  • 每一个消息都是一个逻辑Http消息,包含一个和多个帧
  • 帧是最小的单位,每一个帧都代表则http请求头中的信息,不同数据流之间的帧可以交错发送,然后根据标识符组装起来
  • 每个Http的消息可以分为多个独立的帧发送,实现多个请求和响应并行传输。

在HTTP/1.1中,如果客户端想发送多个平行的请求以及改进性能,必须使用多个TCP连接。HTTP2.0的二进制分帧层突破了限制;客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再把另一端把它们重新组合起来。如下图
在这里插入图片描述
Http2.0和http1.0的区别
在这里插入图片描述
http与tcp、socket与tcp、socket与Http

在介绍它们之间的关注之前首先要知道ISO七层模型
那首先就是

  1. 应用层:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP协议
  2. 表示层:数据的表示、安全、压缩。
  3. 会话层:建立、管理、终止会话
  4. 传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
  5. 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
  6. 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验 [2] 等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
  7. 物理层:建立、维护、断开物理连接。(由底层网络定义协议

那我们所说的TCPUDP协议其实是在ISO七层模型的传输层,在实现一次Http请求的时候,我们可以使用TCP实现HTTP请求,也可以使用UDP实现HTTP请求Http的实现就是基于TCP和UDP,后面会说到TCP的3次握手和4次挥手,以及TCP和UDP的特点。
socket其实并不是一个通信协议只是一个TCP和UDP上层建立的一个抽象接口层。因此socket连接可以基于TCP也可基于UDP,基于TCP同样需要3次握手建立连接,是可靠的。基于UDP建立的链接不可靠,多用于IM.
在这里插入图片描述
那Http和socket的区别是什呢?

  • Http是短链接socket是长连接,虽然http1.1支持持久连接,但在不同浏览器还是有限制,而socket一但建立TCP3次握手,除非一方主动断开,不然一直保持
  • Http连接服务无法主动发送消息给客户端。而socket一但建立连接,客户端和服务端可以互相推送消息。
  • 用HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。
  • 用Socket的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等

不管是Http还是socket基于TCP实现的通信都得进行TCP连接的3次握手和4次挥手,下面是整个连接、传输、关闭的过程。
在这里插入图片描述

首先说一下Http连接的3次握手

  1. 客户端发起请求连接报文,发送SYN=1,seq为一个随机值到服务器,然后客户端进入SYN_SENT状态。
  2. 服务端收到SYN=1的请求,知道客户端要建立一个连接,这时服务端会向客户端发送SYN=1,并生成一个服务端seq随机值,以及将客户端seq+1=ACK一起传递给客户端,服务端进入SYN_RECV状态。
  3. 客户端收到服务器报文后,首先验证ACK number是都正确,若正确则发送一个则会发送ack=seq+1,ACK=1,服务端收到后验证验证ack的值和ACK=1则连接成功。

在Http请求完成后,需要断开连接,对于TCP就是4次挥手

  1. 首先断开连接是客户端和服务端都可以发起的,比如那客户端发起,首先客户端发送关闭请求FIN报文
  2. 服务端收到关闭请求,首先服务端会响应这个请求,给客户端发送一个ACK。和这个时候可能还有数据没有传输完毕,当数据传输完毕后,服务端会向客户端发送一个关闭请求的连接。
  3. 服务器向客户端发送FIN报文,请求关闭连接
  4. 客户端收到服务关闭请求,给予服务端响应,服务端收到响应后在2MSL后断开连接

HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
get post 请求区别
android 长连接机制
http协议
http中Cache-control
okhttp是使用缓存
http 协议介绍
http2.0特点
TCP/IP概述
https
get与post区别
http缓存
https
Https握手过程
三次握手四次挥手
Https连接过程1
Https连接过程2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值