您的位置:首页 > 理论基础 > 计算机网络

HTTP请求:GET与POST方法的区别(转)

2011-02-18 11:30 417 查看
HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST
仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和
幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL
的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。
比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST
请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST
请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);

在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原
样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO
Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;

GET方式提交的数据最多只能有2048
字节(URL+参数),而POST则没有此限制。

官方说明:http://support.microsoft.com/default.aspx?scid=kb;EN-US;q208427

使用post与使用get区别(asp)
一、

在Form

里面,可以使用post

也可以使用get

。它们都是method

的合法取值。但是,post

和get

方法在使用上至少有两点不同:

1

Get
方法通过
URL
请求来传递用户的输入。
Post
方法通过另外的形式。

2

、Get 方式时,服务器端需要使用 Request.QueryString 来取得变量的值;而 Post 方式时,服务器端通过 Request.Form 来访问提交的内容

仔细研究下面的代码。你可以运行之来感受一下:

代码

<!--
两个
Form
只有
Method
属性不同
-->

<FORM ACTION=“getpost.asp” METHOD=“get”>

<INPUT TYPE=“text” VALUE=“Hello World”></INPUT>

<INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT>

</FORM>

<BR>

<FORM ACTION=“getpost.asp” METHOD=“post”>

<INPUT TYPE=“text” VALUE=“Hello World”></INPUT>

<INPUT TYPE=“submit” VALUE=“Method=Post”></INPUT>

</FORM>

<BR>

<BR>

<% If Request.QueryString(“Text”) <> ““ Then %>

通过
get
方法传递来的字符串是:

“<B><%= Request.QueryString(

“Text

”) %></B>

“<BR>

<% End If %>

<% If Request.Form(“Text”) <> ““ Then %>

通过
Post
方法传递来的字符串是:

“<B><%= Request.Form(

“Text

”) %></B>

“<BR>

<% End If %>

说明

把上面的代码保存为getpost.asp

,然后运行,首先测试post

方法,这时候,浏览器的url

并没有什么变化,返回的结果是:

通过Post

方法传递来的字符串是: "Hello World"

然后测试用get

方法提交,请注意,浏览器的url

变成了:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的结果是:

通过
get
方法传递来的字符串是:
"Hello World"

最后再通过
post
方法提交,浏览器的
url
还是:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的结果变成:

通过get

方法传递来的字符串是: "Hello World"

通过Post

方法传递来的字符串是: "Hello World"

提示

通过
get
方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过
get
方法提交数据时,用户名和密码将出现在
URL
上。如果:

1、

登陆页面可以被浏览器缓存;

2、
其他人可以访问客户的这台机器。

那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,
get
方法会带来严重的安全性问题。

建议
:在
Form
中,建议使用
post
方法。

二、

<form action="" method="post">
刷新时会弹出提示框,问是否重新发送请求,若改为
method=get
则不会有该提示,以下是
post

get
的一些区别

post

请求无长度限制(至少是理论上的)

get

有长度限制,最长不超过2048

字节(1024

个汉字)

三、
还记得
Request.QueryString()
吗,只要是用
get
传递值,那么都会跟在
http
请求的串后面!可以试试!而
post
则不会在
http
请求串的后面,而是在请求的最后面!而且看不见的,一般密码可一定得这样传了,否则在地址栏里可以直接看见!!(虽然都不加密)

还有就是
post
传的内容多一些

再就是一般的用
IIS

过滤器的只接受get

参数,这就是为什么那些大型搜索引擎后面都是一大堆的内容了,因为
post
不能发过去,只能用
get
。看看
Goole
或是
yahoo
等知道了!

四、

表单提交中get

和post

方式的区别归纳如下几点:

1. get
是从服务器上获取数据,
post
是向服务器传送数据。

2. get
是把参数数据队列加到提交表单的
ACTION
属性所指的
URL
中,值和表单内各个字段一一对应,在
URL
中可以看到。
post
是通过
HTTP post
机制,将表单内各个字段与其内容放置在
HTML HEADER
内一起传送到
ACTION
属性所指的
URL
地址。用户看不到这个过程。

3.
对于
get
方式,服务器端用
Request.QueryString
获取变量的值,对于
post
方式,服务器端用
Request.Form
获取提交的数据。


4. get
传送的数据量较小,不能大于
2KB

post
传送的数据量较大,一般被默认为不受限制。但理论上,
IIS4
中最大量为
80KB

IIS5
中为
100KB


5. get
安全性非常低,
post
安全性较高。

Get



Post


的区别
( jsp)



Get

和 Post

的区别好像比我想象中的大,最近在使用 Tomcat

进行开发的过程中至少发现两点:

一、这两者传递参数时所用的编码不一定是一样的。在 Tomcat

中似乎 Get

的编码方式是根据页面中指定的编码方式,而 Post

则是一直使用同一种编码方式,可在 Tomcat

的 server.xml

中配置。

二、使用 Get

的时候,参数会显示在地址栏上,而 Post

不会。

所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get

;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post

为好。

他们传递参数的时候编码不一样,get

方式不进行编码直接进行传递,所以别人可以看见你的传递内容(当然可以采取措施避免用户看到内容,比如用Javascript

动态组织URL

),post

方式是经过编码传输的,而且不存在特殊字符传递出错问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: