两种 HTTP 请求方法:GET 和 POST

【前言:感谢 诸多网友的 详细资料 ,由于 借用的资料较多,原文链接 就不写上,还请原谅。】

 

两种 HTTP 请求方法:GET 和 POST

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

· GET - 从指定的资源请求数据。

· POST - 向指定的资源提交要被处理的数据

 一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交.GET一般用于获取/查询 资源信息,而POST一般用于更新 资源信息

 

GET 方法

请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:

 

有关 GET 请求的其他一些注释:

· GET 请求可被缓存

· GET 请求保留在浏览器历史记录中

· GET 请求可被收藏为书签

· GET 请求不应在处理敏感数据时使用

· GET 请求有长度限制

· GET 请求只应当用于取回数据

· 幂等的意味着对同一URL的多个请求应该返回同样的结果。

POST 方法

请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

 

有关 POST 请求的其他一些注释:

· POST 请求不会被缓存

· POST 请求不会保留在浏览器历史记录中

· POST 不能被收藏为书签

· POST 请求对数据长度没有要求

· POST表示可能修改变服务器上的资源的请求 。

· Post支持整个ISO10646字符集


比较 GET 与 POST

 

GET

POST

后退按钮/刷新

无害

数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

书签

可收藏为书签

不可收藏为书签

缓存

能被缓存

不能缓存

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

历史

参数保留在浏览器历史中。

参数不会保存在浏览器历史中。

对数据长度的限制

是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

无限制。

对数据类型的限制

只允许 ASCII 字符。

没有限制。也允许二进制数据。

安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性

数据在 URL 中对所有人都是可见的。

数据不会显示在 URL 中。


下面的表格比较了两种 HTTP 方法:GET 和 POST。

其他 HTTP 请求方法

下面的表格列出了其他一些 HTTP 请求方法:

方法

描述

HEAD

与 GET 相同,但只返回 HTTP 报头,不返回文档主体。

PUT

上传指定的 URI 表示。

DELETE

删除指定资源。

OPTIONS

返回服务器支持的 HTTP 方法。

CONNECT

把请求连接转换到透明的 TCP/IP 通道。

 

Http get,post,soap协议都是在http上运行的
1)get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的
        查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全
2)post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form-urlencoded。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。
      但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
3)soap:是http post的一个专用版本,遵循一种特殊的xml消息格式
       Content-type设置为: text/xml   任何数据都可以xml化

  为了理解两者在传输过程中的不同,我们先看一下HTTP协议的格式:

    HTTP请求:

 

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

GET与POST方法实例:

  

更为深入的观点 :

1说 POST 比 GET 安全肯定是错的,POST跟GET都是明文传输,工具就能观察到。

2GET是获取指定URL上的资源,是读操作,重要的一点是不论对某个资源GET多少次,它的状态是不会改变的,在这个意义上,我们说GET是安全的

而POST的语意是对指定资源“追加/添加”数据,所以是不安全的,每次提交的POST,参与的代码都会认为这个操作会修改操作对象资源的状态,于是,浏览器在你按下F5的时候会跳出确认框,缓存服务器不会缓存POST请求返回内容。

3安全和幂等

安全的是指没有明显的对用户有影响的副作用(包括修改该资源的状态)。HTTP方法里的GET和HEAD都是安全的。

幂等的是指一个方法不论多少次操作,结果都是一样。PUT(把内容放到指定URL),DELETE(删除某个URL代表的资源),虽然都修改了资源内容,但多次操作,结果是相同的,因此和HEAD,GET一样都是幂等的。

所以根据HTTP协议,GET是安全的,也是幂等的,而POST既不是安全的,也不是幂等的。

      4当我们不通过重新加载页面,用Ajax访问服务器的时候

1请求了信息的一小部分而不是整个页面。

2由于Ajax请求不会出现在地址栏中,因此当发送请求时,在访问者的屏幕上是看不出什么异同的。使用GET生成调用不会暴露域和它们的值,使用POST也不会暴露。

GET的目的就如同其名字一样是用于获取信息的。它旨在显示出页面上你要阅读的信息。浏览器会缓冲GET请求的执行结果,如果同样的GET请求再次发出,浏览器就会显示缓冲的结果而不是重新运行整个请求。这一流程不同于浏览器的处理过程,但是它是有意设计成这样以使GET调用更有效率。GET调用会检索要显示在页面中的数据,数据不会在服务器上被更改,因此重新请求相同数据的时候会得到相同的结果。

POST方法应该用于你需要更新服务器信息的地方。如某调用要更改保存在服务器上的数据,而从两个同样的POST调用返回的结果或许会完全不同,因为第二个POST调用的值与第一个的值不相同,这是由于第一个调用已经更新了其中一些值。POST调用通常会从服务器上获取响应而不是保持前一个响应的缓冲。

如果要检索的值会随时间和更新进程的改变而改变则要在GET调用中添加一个当前时间参数,这样后面的调用才不会使用先前的不正确的缓冲。如果调用是向服务器上发送任意数据,就可以使用POST。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值