前言
昨天帮一位同学解决网络请求的问题,发给我个接口http://www.cego168.com/mobile/iosinterface.php?act=upload&name=jay&mobile=110
,用来上传联系人的姓名和手机号。乍一看瞬间有些懵,这不是GET请求吗,这怎么去上传呢,之前在开发中请求提交或者修改等操作都是用的POST请求,也就是我们常见的像这种:
URL: http://www.cego168.com/mobile/iosinterface.php
paramters: act=upload&name=jay&mobile=110
URL和参数是分开的,一直以来我都以为GET是用来获取数据的,POST是用来提交修改数据的。带着这个困惑查阅了国内外众多资料,从HTTP到GET和POST,个人总结了一些见解,请往下看:
GET请求
向指定的资源发出“显示”请求,GET应该是安全的且是幂等的。
注: 这里仅对“安全”做下介绍,“幂等”比较难理解,有兴趣的同学可以查下,在此先不介绍
(HTTP协议声明,对于GET方法而言,除了进行获取资源信息外,这些请求不应当再有其他意义。也就是说,这些方法应当被认为是“安全的”。 客户端可能会使用其他“非安全”方法,例如POST,PUT及DELETE,应该以特殊的方式(通常是按钮而不是超链接)告知客户可能的后果(例如一个按钮控制的资金交易),或请求的操作可能是不安全的(例如某个文件将被上传或删除)。
但是,不能想当然地认为服务器在处理某个GET请求时不会产生任何副作用。事实上,很多动态资源会把这作为其特性。这里重要的区别在于用户并没有请求这一副作用,因此不应由用户为这些副作用承担责任。)
上面这一大段话的意思就是,GET请求应该是一些展示类的信息,比如说今日头条获取新闻的展示信息,而每天这些新闻有可能发生变化,这时候请求应该是用GET的。然后用户可能会去参与评论,留言自己的一些观点吐槽等,这时候就应该是POST的方式去提交信息(稍后会介绍下POST的作用和特点)
,所以总结下来,GET请求应该满足以下特点:
- GET 向服务器发送索取数据的请求
-
GET 将请求数据放在URL中
(如:/test/demo_form.asp?name1=value1&name2=value2)
-
GET 请求理论上无长度限制
(URL不存在参数上限的问题,例如限制1024字节是特定的浏览器及服务器对它的限制)
-
GET 请求不应在处理敏感数据时使用
(用户提交信息,账号、密码等)
-
GET 请求只应当用于取回数据
(获取展示类的列表如新闻列表等)
- GET 请求的数据在 URL 中对所有人都是可见的
-
GET 能够被缓存
(这就会导致某个你输完账号密码后登陆的界面被缓存,其他人查看游览器的历史记录就可以拿到你的账号密码了)
通过以上这些特点我们在平常开发中就能知道哪些场景中应该用GET请求了。下面再说下POST请求:
POST请求
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件),数据被包含在请求本文中。
- POST 向服务器提交数据的一种请求
- POST 将请求数据放在消息体中
- POST 请求理论上也无长度限制,起限制作用的是服务器的处理程序的处理能力
- POST 请求不会被缓存
- POST 数据不会显示在 URL 中
- POST 安全性比GET高
(因为请求参数不在URL中并且无法被缓存,所以参数不会被保存在浏览器历史或 web 服务器日志中)
综合以上所有特点,以及相应的一些介绍,大致可以总结出:
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
但是许多人会在更新资源时使用GET,而这样是不合理的,所以上面这个同学发的这个接口,合理的做法是POST请求去更新数据。
网友评论