我理解的http,get post以及1.0 、1.1、 2.0,https、socket

本文只是表达个人对http概念,get、post方法,http各大版本以及https、socket的理解。如有问题,欢迎指正

一、TCP/UDP的概念

TCP可以理解为是一个协议组或者是一个网络服务模型。是基于连接的协议,在收发数据前,需要建立可靠的连接,也就是所谓的三次握手。使用TCP协议时,数据会准确到达,但是效率较低

UDP是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。使用UDP协议时,传输效率高,但是不能保证数据准确到达

网络层:有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
传输层:有TCP协议与UDP协议。
应用层:有FTP、HTTP、TELNET、SMTP、DNS等协议

 

二、HTTP

HTTP全称超文本传输协议,是基于tcp/ip协议,属于应用层协议

http非常的宽松,只是定义了大的标准,至于遵守还是修改,只看个人!这句话很重要,很重要,很重要

特点:

1、请求/响应模型,客户端发起请求,服务器响应。

2、无状态。每个请求都是独立的,互不影响。即使相同的客户端发起相同的请求,也是完全独立的。http不会为了下一次连接而维护这次连接所传输的信息

3、无连接。每次连接只处理一个请求。连接->传输数据->关闭连接 。客户端跟服务端完成了一次http交互流程后,便关闭连接。

但是1.1后会有keep-alive,下面会讲到

4、明文传输。http协议不会对传输的信息进行加密。这里可能会有个疑问,http是二进制传递数据的,我们对传输的数据进行加密,怎么就是明文传输的呢?其实明文在此处只是相对的。http非常的宽松。给予了传输管道而不对管道中的东西做任何加密处理,这就是http的明文传输标准。至于你自己对数据加密,我不知道,不管。如果自己对数据加密就宣称某某某加密传输协议,不说其他的,http协议都能被叫出无限的某某某加密协议了

 

三、HTTP1.0、1.1、2.0

1、HTTP1.0

在HTTP1.0中,客户端每发送一次请求都需要新建一个独立的连接,客户端得到服务端响应后再断开本次连接。

每次请求都握手、建立链接,这非常的浪费时间

HTTP1.0只有GET POST和HEAD方法

2、HTTP1.1

在HTTP1.1中,打印请求的header,会发现Connection:keep-alive,默认持久链接。如果是close时,客户端通知服务器返回本次请求结果后关闭连接。这意味着可以在一次连接中处理多次请求,大大节省了时间和性能。

尽管有 Keep-Alive 机制可以复用,但在每个连接上同时只能有一个请求 / 响应,这意味着完成响应之前,这个连接不能用于其他请求。可以理解为请求队列,同时只能处理一个请求,先进先出。

HTTP1.1增加5个新的方法:OPTIONS,PUT,DELETE,TRACE和CONNEC

3、HTTP2.0

1、HTTP2.0是完全多路复用的,而非有序并阻塞的

在HTTP1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量的限制。超过限制数目的请求会被阻塞。而多路复用是基于二进制分帧层,既在共享TCP链接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来

3、HTTP2.0让服务器可以将响应主动“推送”到客户端

服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。比如客户端请求A,但是服务端可以返回A和额外的B,C等。但是需要注意所有推送的资源都必须遵守同源策略。既需要双方确认,才可以推送。

。。。。省略N字,还有很多

 

四、GET、POST

1、get请求参数拼接在URL后面,只能进行url编码,会被浏览器主动cache,传递的参数有长度限制。。。

2、post请求参数放在Request body中。不会被浏览器cache,除非另行设置。传输数据多样化。。。

然后,只是这些么?

http有Header、Body

Header最常见的Content-Type:application/json、Content-Type:image/jpg等

Body有form-data、x-www-form-urlencoded、raw等格式

https://blog.csdn.net/u013827143/article/details/86222486

x-www-form-urlencoded:为默认缺省值,键值队传递参数,然而向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低

form-data:键值队传递参数,可以传递多个文件

raw:可以上传任意格式的数据,json、xml、html等。然后没有key,所有一次只能传递一条文本数据。比如一次只能传递一张图片

但是但是,上面说了http非常的宽松,只是定义了大的标准

假如我Header设置Content-Type:application/xml  但是Body设置raw  传递json数据   可以么?

假如我Body设置raw 传递多张图片数据,自己在数据中设置分隔符区分  可以么?

可以,也不可以 

服务端可以收到和解析你的数据,你跟服务器商量好,都是可以的。

但是这不符合http的标准。有大的标准给你,为什么非得走自己的小标准呢。项目组人员多,跨应用对接,谁心里会没有千万颗草呢

get方法一样可以设置requrest body 传递参数

post方法一样可以设置参数拼接在url后面

只是这样浏览器怎么cache你的get请求呢?一般浏览器是根据url为key来cache。并且有的浏览器会读取你get请求中request body,有的会忽略,不能保证一定能被接收到

在Android中,一些网络框架为了规范,禁止get中设置requrest body

至于PUT,DELETE等方法跟POST有啥区别,暂时没有研究过。现在只能说信仰,对标准的信仰

 

五、HTTPS

基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护。具体流程以及多了几次握手,可以自行百度

 

六、SOCKET

socket长连接,套接字。

这个长连接跟http1.1的长连接又有什么区别呢?

http上面说了是请求/响应模型。客户端主动要,服务端被动给。但是socket长链接却是平等的,客户端和服务端能互传信息。

http请求和响应不会对通信方进行确认、无法保护数据的完整性。

socket一般采用tcp/ip

tpc/ip  通过IP能定位到一台服务器。但是服务器不可能专为你一个人服务。OK,那我们再来定义个socket,这个socket只为你服务,服务端再跟B定义个socket,这个又只为B服务。所以就形成了tpc/ip +socket

socket一般用来处理  服务端与客户端交互频繁并且即时的业务    如即时聊天,股票、医疗等

socket需要开发者注意消息包头、包体、断点续传、心跳包、丢包等系列问题。推荐使用xmpp二次开发

socket写得好很流弊,写得不好,会非常。。。你懂的

写到此处,想起N年前开发的医疗心电项目。后续有时间写出来,给自己一个备份

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值