当前位置:首页 >.NET > 正文内容

Get和Post异同点

大滑稽11年前 (2014-11-22).NET1457

Get和Post异同点

异同点网上随便找找,满大街都是,既然要写了,我还是免不了俗,尽量按照自己理解的方式去比较:

1.可见性,get访问时URL是所有人都可见的,post则是不可见的.

2.长度限制,get和post传递长度都是是没有限制的(不知道是自己当时没学好还是老师误人子弟说get是有长度限制的,很长一段时间以为get请求长度为1kb),get是放在URL一起去请求的,浏览器限制了URL的长度,导致get传递的参数不能太长.URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。只是浏览器上有限制,不同浏览器限制不一样,IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。Safari中url最大长度限制为 80,000个字符。OperaURL最大长度限制为190,000个字符。Chrome对url长度限制为8182个字符。

POST是请求大小是没有限制的,Web服务器会对post请求进行控制,以IIS7为例

在如下路径C:\Windows\System32\inetsrv\config\schema找到IIS_schema.xml,在其中搜索一下 name="requestLimits",就会看到三个配置。

<attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" />
 <attribute name="maxUrl" type="uint" defaultValue="4096" />
 <attribute name="maxQueryString" type="uint" defaultValue="2048" />

postIIS请求限制为最多为28.6M,get请求IIS限制为2KB,如有需要可根据需求修改长度大小.

3.安全性,与 post相比,get的安全性较差,因为所发送的数据是 URL 的一部分(登录的时候提交数据应该没人会用get),post比get更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

4.数据类型,get只允许 ASCII 字符,post传递没有限制,也允许二进制数据。

5.编码类型,form的enctype属性为表单控件的内容编码方式,常用有两种:application/x-www-form-urlencoded(默认)和multipart/form-data,不管get还是post都可以使用这两种编码方式, 当表单中含有type=file文件控件的时候发送方式只能使用post,内容编码方式只能使用multipart/form-data.

6.书签,缓存,get请求可以收藏为书签,能被缓存,post不可以被收藏为书签,不可以被缓存.

7.取值方式,ASP.NET中对get请求使用Request.QueryString取值,对Post请求使用Request.Form取值,如果偷懒的话直接用Request两者通用,JSP对get请求使用request.QueryString("");取值,对Post请求使用request.getParameter("");取值,你也可以直接用request.getParameter("")获取get请求中的数据.在PHP中,可以用$_GET和$_POST分别获取GET和POST中的数据,而$_REQUEST则可以获取GET和POST两种请求中的数据。
 
[参考资料]

http://www.infoq.com/cn/minibooks/dissertation-rest-cn

http://www.infoq.com/cn/minibooks/web-based-apps-archit-design

扫描二维码推送至手机访问。

版权声明:本文由第★一★次发布,如需转载请注明出处。

本文链接:http://wpers.net/post/27.html

标签:CookieHTTP

“Get和Post异同点” 的相关文章

C#遍历控件的方法

首先,要想遍历,就必须找到你想找的表单里面的所有控件,然后一个个的逐一比对,当找到了你需要的控件的时候,再做你需要的操作。1、foreach方法foreach (Control control in ...

Linq读写XML

         private List<News> GetNews(string html)    &n...

修改注册表限制软件使用次数

 private void Form1_Load(object sender, System.EventArgs e){RegistryKey RootKey,RegKey; //项名为:HKEY_CURRENT_USER\So...

c#中分页显示数据

     //c#中分页显示数据    public partial class Form1 : Form    {  ...

C#获得程序集

 //获得程序集System.Reflection.Assembly assem = System.Reflection.Assembly.GetExecutingAssembly();...

获取Color的几种方式

//获取Color的几种方式Color.FromKnownColor(KnownColor.ControlLight);Color.FromArgb(int r,int g,int b);Color.FromArgb(int a,int r...