小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
虽然天天都在和get、post打交道,但是对他们的书面认识越来越淡忘了~
GET和POST,两者都是HTTP协议中发送请求的方法,本质上都是TCP链接,并无差别,,但是由于HTTP的规定和浏览器服务器的限制,导致他们在应用过程中会体现出一些区别。
GET请求:
var httpRequest = new XMLHttpRequest(); //第一步:建立所需的对象
httpRequest.open('GET', 'url', true); //第二步:打开连接 将请求参数写在url中 ps:"./Ptest.php?name=test&nameone=testone"
httpRequest.send(); //第三步:发送请求 将请求参数写在URL中
/**
* 获取数据后的处理程序
*/
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var json = httpRequest.responseText; //获取到json字符串,还需解析
console.log(json);
}
};
POST请求:
var httpRequest = new XMLHttpRequest(); //第一步:创建需要的对象
httpRequest.open('POST', 'url', true); //第二步:打开连接
httpRequest.setRequestHeader(
'Content-type',
'application/x-www-form-urlencoded'
); //设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send('name=teswe&ee=ef'); //发送请求 将情头体写在send中
/**
* 获取数据后的处理程序
*/
httpRequest.onreadystatechange = function () {
//请求后的回调接口,可将请求成功后要执行的程序写在其中
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
//验证请求是否发送成功
var json = httpRequest.responseText; //获取到服务端返回的数据
console.log(json);
}
};
参数位置
在携带参数的时候,GET的参数是放在url中,POST的参数是放在body中。
这里只是约定,并不属于 HTTP 规范,相反的,我们可以在 POST 请求中 url 中写入参数,或者 GET 请求中的 body 携带参数
参数长度
HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。
IE 对 URL 长度的限制是 2083 字节
(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。
这里限制的是整个 URL 长度,而不仅仅是参数值的长度;
服务器处理长 URL 要消耗比较多的资源,为了性能和安全考虑,会给 URL 长度加限制。
数据包
- GET:浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);
- POST:浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200。
注意: 不是所有浏览器都会在 POST 中发送两次包,Firefox 就只发送一次。
安全性
POST 比 GET 安全
,因为数据在地址栏上不可见,然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文,只有使用 HTTPS 才能加密安全