Http理解

Http在编程中占据着举足轻重的位置。所以理解Http是必要的。谨以此文章记录一下个人对Http协议的理解。


1、http与tcp/ip的关系。

    这是3个不同的协议,分处于不同的协议层。

    IP协议处于网络层,是负责在网络环境中找到唯一终端的。可以理解为网络中的门牌号。

   TCP协议处于传输层,处于IP协议的上面一层。TCP是提供可信赖通信的,与其处于同一层的还有UDP协议。当通过IP找到需要通信的终端时,通信的两端就是通过TCP协议来进行通信的。TCP的作用就是把数据从发送端准确无误的运送到接收端。

   HTTP协议则是应用层的协议了。该协议层还在传输层协议之上。HTTP协议的作用就是规范化数据,定义一个大家都认可的,解析数据的方式。当数据用HTTP协议规范完成后,通过TCP协议发出去。接收端接收到一串buf,在将这个buf里的数据按HTTP协议规范解析出来。这样,有了双方都认可的数据封装方式,就能明确知道对方传过来的数据是什么意思了。


2、三次握手协议。

    三次握手协议是属于TCP的。前面讲了TCP是提供可靠通信的。怎么提供可靠通信呢?首先得上通信双方都知道对方的存在并且可用才行吧。而三次握手协议的作用就是确认通信双方存在且当前可通信,双方间的通信链路畅通无阻。

    举一个生活中的实例。当我们在打电话或微信语音聊天时,遇到信号不好是常有的时。这时候我们是怎么做的呢?

    我:喂,你听得到吗?

    对方:我听得到,你能听见我说话吗?

    我:我也听得见。

    这时候我们就又能愉快的聊天了。

    三次握手协议其实就是这么一个过程。

    第一次握手:通信发起端发送SYN,其实就是一个数字x。

   第二次握手:接收端已经收到了SYN,接收端回复SYN(x+1)。同时携带ACK,这也是一个数据y。

   第三次握手:发送端接收到SYN(x+1),这就知道接收端已经接收到SYN(x)了。发送端已经知道通信链路是通的了。同时发送端还需要回复接收端ACK(y+1),告诉接收端自己已经收到ACK信号了。


3、http协议本身与协议实现。

    其实这是两个层面的问题,但是我们经常将其混为一谈。本人之前也是觉得写http很头疼,后来一个在一个项目中使用http通信,因为某些原因,没有使用Java的http类,而是直接使用socket去和对端通信,通过Wireshark抓取网络包,对比网络包中的二进制数据,蛋疼了很久总算把东西做完了。回过头来看,其实http协议就那样。之前一直觉得很麻烦,是被Java提供的http类中的什么request,response,HttpURLConnect等这些概念把自己搞晕了。没抓住重点。

    http就是一个协议,规定数据格式。

    而这个数据格式是怎么组装的并不重要。而Java提供的http类就是组装这个数据格式的工具类。

    request和response是相对于客户端来说的。对客户端来说,request就是一个输出流,相当于writeStream,而response就是一个输入流,相当于readStream。而对于服务端来说,request就是是一个输入流,response是一个输出流。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值