GET和POST的区别、Promise的两个方法及POST请求常见的参数类型

GET和POST的区别(可能有纰漏)

区别GETPOST
参数的位置不同①GET把请求参数直接暴露在URL上,因此GET比POST更不安全,不能用来传递敏感信息 ②GET请求发送的参数会被完整的保留在浏览器历史记录里①POST把请求参数放在Request Body请求体中,即地址栏上不可见,所以POST比GET更安全②POST请求发送的参数不会保留在浏览器历史记录中
传输的数据大小不同GET一般来说提交的数据最大是2KPOST理论上没有限制
传输的数据类型不同GET只接收ASCII字符POST没有限制
产生的数据包不同GET产生一个TCP数据包POST产生两个TCP数据包

注意:FireFox的POST请求就只发送一个TCP数据包。

到底发多少个tcp包,不是http协议的事情,是操作系统tcp协议栈和框架代码里write调用的事情。

对此问题的详解请移步:文章一文章二

从w3schools得到的标准答案的区别如下:

GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。
 
GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。
 
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而POST没有。
 
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
 
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Requestbody中


Promise.all()方法

Promise.all 方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

var p = Promise.all([p1,p2,p3]);

上面代码中,Promise.all 方法接受一个数组作为参数,p1、p2、p3 都是 Promise 对象的实例。(Promise.all 方法的参数不一定是数组,但是必须具有 iterator 接口,且返回的每个成员都是 Promise 实例。)

p 的状态由 p1、p2、p3 决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

下面是一个具体的例子。

// 生成一个Promise对象的数组
var promises = [2, 3, 5, 7, 11, 13].map(function(id){
  return getJSON("/post/" + id + ".json");
});
 
Promise.all(promises).then(function(posts) {
  // ...  
}).catch(function(reason){
  // ...
});

Promise.race()方法

Promise.race 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

var p = Promise.race([p1,p2,p3]);

上面代码中,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的返回值。

如果Promise.all方法和Promise.race方法的参数,不是Promise实例,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。


POST请求常见的参数类型

1. application/json

用来告诉服务端消息主体是序列化的JSON字符串,需要用到 JSON.stringify() 将参数转化为JSON字符串。

2. multipart/form-data

一般用来上传文件,各大服务器的支持也比较好。所以我们使用表单上传文件时,必须让表单的 enctype 属性值为 multipart/form-data

3. application/x-www-form-urlencoded

浏览器的原生form表单如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

jQuery的Ajax请求中如果不设置 contentType 属性,默认也会以此种方式提交数据。

application/x-www-form-urlencodedmultipart/form-data 都是浏览器原生支持的

4. text/xml

一般用来发送文本内容,它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值