ajax提交时post和get的区别 30
一直以来因为ajax的post,get和form的提交方式一样,一个走url,一个是放到请求头里(我指参数),今天我在用post提交时把一个参数<tablewidth='...
一直以来因为ajax的post,get和form的提交方式一样,一个走url,一个是放到请求头里(我指参数),今天我在用post提交时把一个参数<table width='100%'>提交给后台时报参数类型错误,最后查明是%引起的。由此推断即使是用post提交他也是将参数附加到提交路径后面类似get在地址栏中的明文提交,所以%被看为是它转义后的字符需要和字母联合使用比如%BB。后来又用post方法在url后面带参数http://....1.shtml?a=1后台也能接收到a这个参数的值。
那我想问下给位达人,这样的话post,get还有什么区别呢。post请求参数不放到请求头里吗?
谢谢1楼的回答。我想问的是关于参数的传递。如我上面的描述一样,ajax的post并不像form的post一样,是这样吗?为什么给我的感觉post和get传递参数的方式一样的呢,貌似都是加在url后面,如果不是这样的话,为什么对%这么的明感呢。 展开
那我想问下给位达人,这样的话post,get还有什么区别呢。post请求参数不放到请求头里吗?
谢谢1楼的回答。我想问的是关于参数的传递。如我上面的描述一样,ajax的post并不像form的post一样,是这样吗?为什么给我的感觉post和get传递参数的方式一样的呢,貌似都是加在url后面,如果不是这样的话,为什么对%这么的明感呢。 展开
7个回答
展开全部
GET和POST长度的限制问题
GET
1.GET是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。
2.实际上HTTP协议对URL长度是没有限制的;限制URL长度大多数是浏览器或者服务器的配置参数
POST
1.同样的,HTTP协议没有对POST进行任何限制,一般是受服务器配置限制或者内存大小。
2.PHP下可以修改php.conf的postmaxsize来设置POST的大小。
请求header的content-length问题
如果有人恶意伪造content-length很大的包头,但实际上发送content-length很小的请求,这样服务器会一直干等,直到超时。当然服务器是可以通过设置来避免该问题的
GET和POST的安全性
1.GET是通过URL方式请求,可以直接看到,明文传输。
2.POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的。 3.GET请求会保存在浏览器历史纪录中,还可能会保存在Web的日志中。
GET和POST对服务器的状态
根据http的设计,大家在看到get的时候,都期望这个请求对服务器没有修改,看到post的时候,都认为这对服务器产生了修改。
GET幂等,POST不幂等
幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。
1.按照RFC规范,PUT,DELETE和安全方法都是幂等的。虽说是规范,但服务端实现是否幂等是无法确保的。
2.引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。
3.比如在微博这个场景里,GET的语义会被用在「看看我的Timeline上最新的20条微博」这样的场景,而POST的语义会被用在「发微博、评论、点赞」这样的场景中。
GET
1.GET是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。
2.实际上HTTP协议对URL长度是没有限制的;限制URL长度大多数是浏览器或者服务器的配置参数
POST
1.同样的,HTTP协议没有对POST进行任何限制,一般是受服务器配置限制或者内存大小。
2.PHP下可以修改php.conf的postmaxsize来设置POST的大小。
请求header的content-length问题
如果有人恶意伪造content-length很大的包头,但实际上发送content-length很小的请求,这样服务器会一直干等,直到超时。当然服务器是可以通过设置来避免该问题的
GET和POST的安全性
1.GET是通过URL方式请求,可以直接看到,明文传输。
2.POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的。 3.GET请求会保存在浏览器历史纪录中,还可能会保存在Web的日志中。
GET和POST对服务器的状态
根据http的设计,大家在看到get的时候,都期望这个请求对服务器没有修改,看到post的时候,都认为这对服务器产生了修改。
GET幂等,POST不幂等
幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。
1.按照RFC规范,PUT,DELETE和安全方法都是幂等的。虽说是规范,但服务端实现是否幂等是无法确保的。
2.引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。
3.比如在微博这个场景里,GET的语义会被用在「看看我的Timeline上最新的20条微博」这样的场景,而POST的语义会被用在「发微博、评论、点赞」这样的场景中。
展开全部
简单来说
get
就是类似于
url地址传值
xxx.asp?xxx=xxx&xxx=xxx&xxx=aaz
post就是用表单传值
更详细的区别看下面
get方式:
用get方式可传送简单数据,但大小一般限制在1kb下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照url参数的格式附加在请求行中的资源路径后面。另外最重要的一点是,它会被客户端的浏览器缓存起来,那么,别人就可以从浏览器的历史记录中,读取到此客户的数据,比如帐号和密码等。因此,在某些情况下,get方法会带来严重的安全性问题。
post方式:
当使用post方式时,浏览器把各表单字段元素及其数据作为http消息的实体内容发送给web服务器,而不是作为url地址的参数进行传递,使用post方式传递的数据量要比使用get方式传送的数据量大的多。
总之,get方式传送数据量小,处理效率高,安全性低,会被缓存,而post反之。
使用get方式需要注意:
1
对于get请求(或凡涉及到url传递参数的),被传递的参数都要先经encodeuricomponent方法处理.例:var
url
=
"update.php?username="
+encodeuricomponent(username)
+
"&content="
+encodeuricomponent
(content)+"&id=1"
;
使用post方式需注意:
1.设置header的context-type为application/x-www-form-urlencode确保服务器知道实体中有参数变量.通常使用xmlhttprequest对象的setrequestheader("context-type","application/x-www-form-urlencoded;")。例:
xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded");
2.参数是名/值一一对应的键值对,每对值用&号隔开.如
var
name=abc&sex=man&age=18,注意var
name=update.php?
abc&sex=man&age=18以及var
name=?abc&sex=man&age=18的写法都是错误的;
3.参数在send(参数)方法中发送,例:
xmlhttp.send(name);
如果是get方式,直接
xmlhttp.send(null);
4.服务器端请求参数区分get与post。如果是get方式则$username
=
$_get["username"];
如果是post方式,则$username
=
$_post["username"];
get
就是类似于
url地址传值
xxx.asp?xxx=xxx&xxx=xxx&xxx=aaz
post就是用表单传值
更详细的区别看下面
get方式:
用get方式可传送简单数据,但大小一般限制在1kb下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照url参数的格式附加在请求行中的资源路径后面。另外最重要的一点是,它会被客户端的浏览器缓存起来,那么,别人就可以从浏览器的历史记录中,读取到此客户的数据,比如帐号和密码等。因此,在某些情况下,get方法会带来严重的安全性问题。
post方式:
当使用post方式时,浏览器把各表单字段元素及其数据作为http消息的实体内容发送给web服务器,而不是作为url地址的参数进行传递,使用post方式传递的数据量要比使用get方式传送的数据量大的多。
总之,get方式传送数据量小,处理效率高,安全性低,会被缓存,而post反之。
使用get方式需要注意:
1
对于get请求(或凡涉及到url传递参数的),被传递的参数都要先经encodeuricomponent方法处理.例:var
url
=
"update.php?username="
+encodeuricomponent(username)
+
"&content="
+encodeuricomponent
(content)+"&id=1"
;
使用post方式需注意:
1.设置header的context-type为application/x-www-form-urlencode确保服务器知道实体中有参数变量.通常使用xmlhttprequest对象的setrequestheader("context-type","application/x-www-form-urlencoded;")。例:
xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded");
2.参数是名/值一一对应的键值对,每对值用&号隔开.如
var
name=abc&sex=man&age=18,注意var
name=update.php?
abc&sex=man&age=18以及var
name=?abc&sex=man&age=18的写法都是错误的;
3.参数在send(参数)方法中发送,例:
xmlhttp.send(name);
如果是get方式,直接
xmlhttp.send(null);
4.服务器端请求参数区分get与post。如果是get方式则$username
=
$_get["username"];
如果是post方式,则$username
=
$_post["username"];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用POST方式并且send()的参数不为null,则一定要加
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
或者xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");如果发送的是一个xml文件。
ajax中的post和get就是一般http请求的post和get:
GET方法:URL包含了检索请求信息所需的所有信息,可将其加入书签以便将来重新调用。传送的数据会在地址栏中显示,是字符流传输,且传送数据量有限制,有中文乱码问题。
POST方法:将数据打包发送,可加密数据,安全性高,传输数据量没有限制,不能被加入书签。
http://www2.flash8.net/teach/4112.htm
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
或者xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");如果发送的是一个xml文件。
ajax中的post和get就是一般http请求的post和get:
GET方法:URL包含了检索请求信息所需的所有信息,可将其加入书签以便将来重新调用。传送的数据会在地址栏中显示,是字符流传输,且传送数据量有限制,有中文乱码问题。
POST方法:将数据打包发送,可加密数据,安全性高,传输数据量没有限制,不能被加入书签。
http://www2.flash8.net/teach/4112.htm
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
表单传值有两种方式分别为:
get (通过URL进行传值,这种方式并不安全);
post(封装到一个post包中进行传递,比get安全,一般用这个)
下面看一个用$_POST进行传值例子:
<?php
include("include/common.inc");
$title="表单处理页";
include("include/header.inc");
if($_POST['name'] == null || $_POST['name'] == "你的名字")
echo "请输入您的姓名";
else
{
echo "$name,您好,欢迎您的光临!";
}
?>
get (通过URL进行传值,这种方式并不安全);
post(封装到一个post包中进行传递,比get安全,一般用这个)
下面看一个用$_POST进行传值例子:
<?php
include("include/common.inc");
$title="表单处理页";
include("include/header.inc");
if($_POST['name'] == null || $_POST['name'] == "你的名字")
echo "请输入您的姓名";
else
{
echo "$name,您好,欢迎您的光临!";
}
?>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-03-26
展开全部
ajax中的post和get和一般http请求的post和get是一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询