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

发布于:2021-10-23 02:19:45

? ? ? 要了解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了吧。

相关推荐

最新更新

猜你喜欢