关于HTTP协议之get/post传输随笔

相信但凡接触过WEB开发的多多少少都会了解一点get与post传输。上学那会我也看过很多这类的文章,有的说的过于简单,有的又说的过于复杂,其实有些时候读者想要的,仅仅是一点干货,或者实际应用的场景分析(因为我曾经也是这类读者当中的一员)。所以今天我不会过多的去讲HTTP的传输原理,有的仅仅是一些实用的干货。

网络其实就是数据的交互与共享,而WEB的开发无疑是他的最好的体现者。也是最好的例子。WEB系统是典型的B/S架构,也就是客户端(浏览器)与服务端(服务器)间的信息交互。说到信息交互我们就不得不说到今天的重点--数据传输了。即超文本传输协议(HTTP),他的设计目的是保证客户机与服务器之间的通信。说白了就像一个发电报的过程,举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。

而在客户机和服务器之间进行请求-响应时,两种最常被用到的方法就是:GET 和 POST。其他的呢,感觉很少有人会用吧!原因呢这里我就不介绍了。接下来我就结合一下使用环境简单的来介绍一下get/post吧!

按官方原本的设计应该是这样的:

Get-英文获取的意思:用来从指定的资源请求数据。

Post-英文邮递的意思:用来向指定的资源提交要被处理的数据。

但是,实际应用时我们一般不会盲目的去遵从这一原则,而是根据需求来使用。(因为get/post的根本均是TCP协议,虽然被封装成了不同的方法,但是根本上是都可以用来运输数据的,所以这也是我们为什么可以根据我们自己的需求来使用两种方法的原因)。

第一弹:从传输内容大小来看呢,因为GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),所以为了节约内存,各大浏览器会根据自己的需要对HTTP协议头进行长度限制。所以导致get请求一般仅可以发送2084个字节(这是包括整个头部的长度,比如地址等。当然不同浏览器的限制长度也不一样。)拼接方式如下:以?分割URL和传输数据,参数之间以&相连,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出。

而POST则是把提交的数据放置在HTTP包的包体中并不受数据大小的限制。

所以当我们需要传输大量数据时一般使用post传输,数据量很小或不需要传输数据时用get方式。

第二弹:从数据保密性来看呢,因为get的传出内容是拼接在HTTP协议头部的,会显示在地址栏中,也就是说数据内容会被用户看到,当然你也可以对数据进行加密,不过显然这是蛋疼的人的做法(当然如果数据属于很机密的那种无论使用什么方式都需要加密的)。而post则是把数据存放在HTTP协议的body里,对用户是不可见的。

所以当我们所要传输的信息是不希望用户看到的时候,我们一般使用post传输,比如用户名和密码等。而传输一些无明显意义的参数时使用get传输。

第三弹:从响应效率与回退的方式来看呢,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。也就是说post方式需要比get方式多进行一步,显然需要时间更长。

所以当我们需要传输的数据是少量并且不是需要保密的时尽量使用get方式。这也是为啥一般高并发的系统会更多的使用get方式一样。此外,页面再刷新或回退时,get不会再次发送数据,但是post会重新提交数据。

第四弹:从一些业务需求来看呢,get请求会被缓存,并且可以保存到浏览器的历史纪录中,或被收藏为书签,而post请求则不能。

所以当我们看法一些传播性的网站时可以更多的应用get请求,或者看法那些数据不是经常变化但是使用次数又比较多的功能时,也可以使用get请求,因为在已经缓存到浏览器的数据,不会再次提交请求。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值