Http与服务器的交互(主要post和get)

      要了解Http(Hyper Text Transfer Protocol(超文本传输协议))与服务器的交互,先大概介绍下http是什    么,其实就是一些人写出来的规则,用来规定了浏览器和万维网服务器之间互相通信的规则,所谓的通信主要是指    浏览器与服务器之间的数据传递,所以也可以说http是用于从WWW服务器传输超文本到本地浏览器的传送协议的传    送协议。协议本身共定义了八种方法,分别为:

           OPTIONS,HEAD,GET,POST,PUT,DELETE,TRACE,CONNECT。

   大家可能对有些很陌生,比如options,trace等,这都是正常的,最常用的无非就两种,post和get,为什么        其他的六种不常用呢,因为早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以    导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持其他方法。实际    上,现在没有任何一个浏览器支持GET/POST之外的任何verb,

   所以本文主要简单谈谈post和get的区别

1.GET一般用于获取/查询资源信息,而POST一般用于更新资源信息

2.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中)以?分割URL和传输    数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如    果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加    密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。,所以用get方法提交请求的    时候,在URL中会毫不客气的把信息暴露出来,比如登陆form用了get请求,那么你的用户名和密码将能直接看到,    这是非常不安全的,因为

      (1)登录页面有可能被浏览器缓存。

      (2)其他人或软件查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。

      (3)使用GET提交数据还可能会造成Cross-site request forgery攻击(风险在于那些通过基于受信任的输入      form和对特定行为无需授权的已认证的用户来执行某些行为的web应用。已经通过被保存在用户浏览器中的cookie    进行认证的用户将在完全无知的情况下发送HTTP请求到那个信任他的站点,进而进行用户不愿做的行为)。POST把    提交的数据则放置在是HTTP包的包体中(在HTML HEADER内提交)。这样对于用户来说是不透明的,相比较而言,安    全了许多。

3.两种方式提交数据大小的限制:

   理想情况下两种方式提交数据大小是没有限制的,可能看到这里绝大多数人都不认同,别急,我说的是理想情    况,请继续往下看。

   GET方式提交的数据最多只能是2048字节,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有    直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制,这就是为啥我说没有    限制的原因了。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字(2K+35), 注意这是    限制是整个URL长度,而不仅仅是你的参数值数据长度。对于其他浏览器,如Chrome,Netscape,Safari,FireFox    等(国内的浏览器就不说了,没有独家技术,忽略不计),理论上没有长度限制,其限制主要取决于操作系统的支    持。POST是没有大小限制的,HTTP协议规范也没有进行大小限制,但是别忘了还有服务器对他的限制,IIS 4 中为    80 KB 字节,IIS 5 中为 100 KB 字节, IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB。      IIS 6.0默认上传文件的最大大小是4MB。IIS 6.0默认最大请求头是16KB。IIS 6.0之前没有这些限制,不过这些都能改。

4.再有就是服务器端获取参数的区别了
  在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。在JSP中,用       request.getParameter(\"XXXX\")来获取,虽然jsp中也有request.getQueryString()方法,但使用起来比较麻烦,   比如:传一个test.jsp?name=hyddd&password=hyddd,用request.getQueryString()得到的是:                   name=hyddd&password=hyddd。在PHP中,可以用$_GET和$_POST分别获取GET和POST中的数据,而$_REQUEST则可以获   取GET和POST两种请求中的数据。值得注意的是,JSP中使用request和PHP中使用$_REQUEST都会有隐患。
总结实际上两者只是发送机制不同而已,
举个例子
 Get对服务器说:我要查看老板给我们部门的小伙伴分别发了多少工资。
 Post对服务器说:我要老板发给我的工资1000块改成2000块。
这取决于http协议的规定,并不是大家常说的get用于取数据,post用于发数据。
相信大家看了这篇文章应该大致知道什么时候用get什么时候用post了吧。

      
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值