GET与POST的区别

GET与POST的区别

http://blog.csdn.net/darxin/article/details/4944225

http://baiyan425.blog.51cto.com/1573961/614737/

HTTP请求的GET与POST方式的本质区别可以参考hyddd《浅谈HTTP中Get与Post的区别》一文中的描述,其中比较重要的一条,那就是数据传输的位置不同。
GET方式在request-line中传送数据;POST方式在request-line及request-body中均可以传送数据。

本质上说,一个HTTP请求起始于用户端向HTTP服务器发送的一个URL请求。

一个标准的HTTP请求由以下几个部分组成

<request-line>
<headers>
<CRLF>
[<request-body><CRLF>]


信息中没有request-body部分时,这是以GET方式发送的HTTP请求。如果请求中需要附加主体数据,即增加request-body部分,则必须使用POST方式发送HTTP请求。HTML超链接(<a></a>)只能用GET方式提交HTTP请求,HTML表单(<form></form>)则可以使用两种方式提交HTTP请求。


在HTTP请求中,第一行是请求行(request-line),用来说明请求类型、要访问的资源(URL)以及使用的HTTP版本;
紧接着是多行头部(headers)信息,用来说明服务器要使用的附加信息;
头部信息之后是一个回车换行符(/r/n),用于标明头部信息的结束。
以上是必须内容,根据需要可在头部信息结束之后增加主体数据(request-body);
主体数据之后是一个回车换行符(/r/n),用于标明主体数据的结束。

 

需要注意的是
请求行(request-line)中的URL部分必须以application/x-www-form-urlencoded方式编码。
主体数据(request-body)的编码方式由头部(headers)信息中的Content-Type指定。
主体数据(request-body)的长度由头部(headers)信息中的Content-Length指定。


发送方式

method标签属性指定了表单的发送方式,发送方式只有两种:GET及POST。
当以GET方式发送表单时,发送的HTTP请求没有request-body部分,所以不需要指定enctype标签属性。

GET方式只提交表单域中的数据,action标签属性中如果存在?子句,GET方式将不予处理。


需要注意的是,以GET方式提交表单时,每个表单域的NAME与VALUE要以URL的方式提交,所以每个表单域的NAME与VALUE均要进行URL Encoding处理。这个操作通常是由用户端浏览器完成的。


当以POST方式发送表单时,表单域中的数据将作为request-body提交,action标签属性中的?子句将在request-line中得以保留。

需要注意的是,以POST方式提交表单时,action标签属性的值必须是已经进行了URL Encoding处理之后的值,用户端浏览器不会自动处理URL中的非法字符。


数据主体的编码方式

在HTTP请求中,request-line总是以application/x-www-form-urlencoded方式编码。enctype标签属性只对request-body起作用。也就是说只有在method="POST"的情况下,设置enctype才起作用。
设置enctype标签属性后,在HTTP请求的头部(headers)信息中会多出一行Content-Type信息,并且request-body部分将会以Content-Type指定的MIME进行编码。这些操作都是由客户端浏览器自动完成的。

在没有指定enctype标签属性时,表单以默认的application/x-www-form-urlencoded方式对request-body进行编码。
如果表单域中的NAME或VALUE含有非法字符(如中文字符),客户端浏览器会自动对其进行URL Encoding处理。


如果表单中包含需要上传的文件数据,则在指定method="POST"的同时还要指定enctype="multipart/form-data"。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值