简介:
GET和POST 是HTTP的两种基本请求方法,但凡是学习过WEB开发的人都对这两个请求有大概的认识,最直观的认识就是
GET请求的时候会把参数包含在URL中
,
POST请求相对安全一些,通过request body 传递参数
。
下面就来介绍一下很多关于POST和GET两种请求之间相对权威的对比:
GET | POST | |
是否保存缓存 | 请求可以被缓存,历史记录里面有记录 | 请求不会被缓存,历史记录中查不到 |
后退按钮/刷新 | 无影响 | 数据会被重新提交 |
对数据长度的限制 | 当发送数据的时候,GET方法向URL添加数据,URL的长度是受限制的,最大长度为2048个字符。 | 无限制 |
对数据类型的限制 | 只允许ASCII字符 | 没有限制 |
安全性 |
与POST相比,GET的安全性更差,因为所发送的数据是RUL的一部分, 发送密码或者其他敏感信息的时候不能用post |
POST比GET更加安全,因为参数不会被保存在浏览器中 |
看完上面的对比你以为这就结束了?网上很多网友对POST和GET进行了深入的学习,他们扒下了GET和POST的外衣,让我们一起来瞅瞅!! 很多人认为POST和GET是一样的??
首先GET和POST是什么?
答: 大家都会想到他是HTTP协议的两种发送请求的方法
那么HTTP有是什么?
答: HTTP是基于TCP/IP的关于数据如何在web中通信的协议,HTTP的底层是TCP/IP ,所以GET和POST
的底层也就是TCP/IP。
举个现实生活中的例子:
在我大网络世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,
交通规则HTTP诞生了
。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,
HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录
。
如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。
最后有一个重量级的大佬上场!
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
如果我们在页面中同时有get请求也有post请求,那么该如何区分? 何时发送get请求?何时发送post请求?
方法:
如果在form标签中写了runat=server 那么在aspx.cs中直接使用IsPostBack
是
post请求
,该属性的值就是
true
,如果是
get请求
,该属性的值就为
false
IspostBack 是根据 __VIEWSTATE隐藏域进行判断的,如果是post 请求那么该隐藏域的值就会提交到服务器,那么 IsPostBack的属性也就为true
如果将runat=”server”去掉,那么就不能用该属性进行判断是post请求还是get 请求
,因为去掉form标签的runat=server那么就不会产生__VIEWSTATE
隐藏域了
例子:
if(IsPostBack)//如果为post请求,该属性的值为true
{
InsertUserInfo();
}
<body>
<form id="form1" runat="server">
<div>
大家明白了吗? 有什么问题可以在评论区留言!!