GET和POST的区别(可能有纰漏)
区别 |
GET |
POST |
参数的位置不同 |
①GET把请求参数直接暴露在URL上,因此GET比POST更不安全,不能用来传递敏感信息 ②GET请求发送的参数会被完整的保留在浏览器历史记录里 |
①POST把请求参数放在Request Body请求体中,即地址栏上不可见,所以POST比GET更安全②POST请求发送的参数不会保留在浏览器历史记录中 |
传输的数据大小不同 |
GET一般来说提交的数据最大是2K |
POST理论上没有限制 |
传输的数据类型不同 |
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-urlencoded 和 multipart/form-data 都是浏览器原生支持的
4. text/xml
一般用来发送文本内容,它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范