常见的接口类型:
get
它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
格式:请求数参数写在网址后面,用"?"连接,多个参数之间用"&"连接;
场景:get型接口用于获取信息,多用于查询数据,如列表查询功能,点击查询按钮就调用一个get接口,然后把信息返回出来;
特点:1)请求数据量小,2)参数暴露于url地址中,故存在安全隐患。
post
post向服务器提交数据,这个方法用途广泛,几乎目前所有的提交操作都是靠这种方式完成。它用来向指定资源提交数据进行处理请求(例如:提交表单和上传文件),数据包被包含在请求体中,post请求可能导致新的资源的建立或者已有的资源的修改。
说明:向指定资源位置提交数据(如提交表单、上传文件)来进行请求,post请求可能会导致新资源的建立。场景:如注册、上传、发帖等功能,如用户在豆瓣网站对某本书进行收藏、写笔记、发表评论。
特点:请求数据量大,安全性高。
如,豆瓣的发表评论的开放api
POST
https://api. douban. com/v2/book/reviews
put比较少见,HTML表单也不支持此方式。本质上来讲, put和post极为相似,都是向服务器发送数据,但它们之间有一个重要区别,put通常指定了资源的存放位置,而post则没有,post的数据存放位置由服务器自己决定,客户端向服务器传送的数据取代指定文档的内容。
说明:put请求用于向指定资源位置上传最新内容。
场景:如用户在豆瓣网站修改对某本书的收藏、修改某篇笔记或修改评论。
如豆瓣的修改评论的开放api。
PUT https:// api. douban. com/v2/book/review/ :id
delete
delete删除某一个资源,基本上这个也很少见,比如amazon的S3云服务里面就用的这个方法来删除资源。
说明:请求服务器删除请求里url所标识的资源;
场景:如用户在豆瓣网站取消对某本书的收藏、删除某篇笔记或删除评论;
如豆瓣的删除评论的开放api。
DELETE
https://api. douban. com/ v2/book/review/ :id
1.提交数据的形式
GET方法一般是指获取服务器上的数据,请求参数(query string查询字符串)直接跟着URL后边,以?分割URL和传输数据,参数之间以&相连(?key1=value1&key2=value2)的形式,直接可以放到浏览器地址栏里,例如登录就是采用GET方法。
如:login.actionname=hyddd&password=idontknow&verify=%E4%BD%A0%E5 %A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST方法是指客户端给服务器上提交表单数据,会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数,所以POST是通过表单提交的,请求参数放在body中,如网页上的新用户的注册、调查问卷和答题就是采用POST方法。
2.提交数据的大小/长度
get是直接在浏览器地址栏输入,直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响:比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。由于浏览器有限制,一般整个URL的长度可以很长,但是不能超过2049KB的大小限制,而post没有大小限制。
post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的处理能力。所以大小的限制还是得受各个web服务器配置的不同而影响。
3.提交数据的安全性
由于get的参数是在浏览器地址栏URL直接拼接,用户名和密码将明文出现在URL上,暴露在互联网中,安全性差,不能用来传递敏感信息。
post请求参数放在body里,是通过表单数据提交,post比get方式的安全性要高。
get方式安全性弱因为以下几个原因:
(1)登录页面有可能被浏览器缓存;
(2)其他人查看浏览器的历史纪录,那么别人就可以拿到账号和密码;
(3)当遇上跨站的攻击时,安全性的表现更差;
4.编码方式
get的参数只能支持ASCII;
post没有限制,也允许二进制数据;
5.请求方式
get是获取指定的资源
post是向指定的资源提交要被处理的数据
6.请求体
get没有请求体;
post有请求体;
7.效率方面
get产生一个tcp数据包;
post产生两个tcp数据包,post需要两步,时间上消耗要多一点,get比post更有效;
8.请求过程
对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据),get请求的过程:
1.浏览器请求tcp连接(第一次握手);
2.服务器答应进行tcp连接(第二次握手);
3.浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http 会在此时进行第一次数据发送);
4.服务器返回200OK响应;
而对于post,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200ok(返回数据),post请求的过程:
1.浏览器请求tcp连接(第一次握手);
2.服务器答应进行tcp连接(第二次握手);
3.浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在 此时进行第一次数据发送);
4.服务器返回100 Continue响应;
5.浏览器发送数据;
6.服务器返回200 OK响应;
转自:https://mp.weixin.qq.com/s?__biz=MzI5MTg1NjA4Nw==&mid=2247486271&idx=1&sn=a97c366054f2c1432f37a8013f104b50&chksm=ec0b0087db7c8991a18fa1ec1894c72f0572b936035d7477e24f57500a1d27949476ad04d7af&scene=21#wechat_redirect