总结
get:获取数据
post:增加
put:修改
delete:删除
option: 预检请求
1、GET
get请求是用来获取数据的,只是用来查询数据,不对服务器的数据做任何的修改,新增,删除等操作。
在这里我们认为get请求是安全的,以及幂等的。安全就是指不影响服务器的数据,幂等是指同一个请求发送多次返回的结果应该相同。
特点:
get请求会把请求的参数附加在URL后面,这样会产生安全问题,如果是系统的登陆接口采用的get请求,需要对请求的参数做一个加密。
get请求其实本身HTTP协议并没有限制它的URL大小,但是不同的浏览器对其有不同的大小长度限制
示例:js 原生 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);
}
};
示例:jquerry ajax
2、POST
post请求一般是对服务器的数据做改变,常用来数据的提交,新增操作。
特点:
post请求的请求参数都是请求体中
post请求本身HTTP协议也是没有限制大小的,限制它的是服务器的处理能力
jquerry ajax
var login_ip = 'http://192.168.1.254;//登录的URL
var login_data = {
"username": "admin",
"password": "password"
};
$.ajax({
headers: {
// 'Content-Type': 'application/x-www-form-urlencoded',
'Accept':'application/json,application/xml,application/xhtml+xml,text/html,text/xml,text/plain'
},
url: login_ip,//sale_services",
type: "POST",
data: JSON.stringify(login_data),//JSON.stringify(login_data),
dataType: "json",
// contentType: "application/json",
success: function (data) {
console.log(data);
}
});
}
3、PUT
put请求与post一样都会改变服务器的数据,但是put的侧重点在于对于数据的修改操作,但是post侧重于对于数据的增加。
var wirte_ip = 'http://192.168.1.254:9080/api/device/luatest/control_by_name';//写入数据的URL
var wirte_data = {
"key": "DB104.10",
"value": 222,
"value_type": 1
};
function writedata() {
$.ajax({
headers: {
// 'Content-Type': 'application/json;charset=UTF-8',
// 'Accept':'application/json,application/xml,application/xhtml+xml,text/html,text/xml,text/plain'
},
url: wirte_ip,//sale_services",
type: "put",
data: JSON.stringify(wirte_data), //JSON.stringify(wirte_data),
contentType: 'application/json',
dataType: "json",
async: false, // 默认为异步请求
timeout: 50000,
error: function (xhr) {
console.log("状态码:" + xhr.status);
},
success: function (data, status, xhr) {
console.log("请求结果:" + JSON.stringify(xhr));
}
});
}
4、DELETE
delete请求用来删除服务器的资源。
5、OPTIONS
options请求属于浏览器的预检请求,查看服务器是否接受请求,预检通过后,浏览器才会去发get,post,put,delete等请求。至于什么情况下浏览器会发预检请求,浏览器会会将请求分为两类,简单请求与非简单请求,非简单请求会产生预检options请求。
出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢?
浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-simple-request),简单请求浏览器不会预检,而非简单请求会预检。这两种方式怎么区分?
同时满足下列三大条件,就属于简单请求,否则属于非简单请求
1.请求方式只能是:GET、POST、HEAD
2.HTTP请求头限制这几种字段:Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID
3.Content-type只能取:application/x-www-form-urlencoded、multipart/form-data、text/plain
对于简单请求,浏览器直接请求,会在请求头信息中,增加一个origin字段,来说明本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,来决定是否同意该请求,服务器返回的响应会多几个头信息字段,如图所示:上面的头信息中,三个与CORS请求相关,都是以Access-Control-开头。
1.Access-Control-Allow-Origin:该字段是必须的,* 表示接受任意域名的请求,还可以指定域名
2.Access-Control-Allow-Credentials:该字段可选,是个布尔值,表示是否可以携带cookie,(注意:如果Access-Control-Allow-Origin字段设置*,此字段设为true无效)
3.Access-Control-Allow-Headers:该字段可选,里面可以获取Cache-Control、Content-Type、Expires等,如果想要拿到其他字段,就可以在这个字段中指定。比如图中指定的GUAZISSO
非简单请求是对那种对服务器有特殊要求的请求,比如请求方式是PUT或者DELETE,或者Content-Type字段类型是application/json。都会在正式通信之前,增加一次HTTP请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,服务器允许之后,浏览器会发出正式的XMLHttpRequest请求,否则会报错。
参考:GET,POST,PUT,DELETE,OPTIONS等请求方式简单总结_get post options_槐月十九的博客-CSDN博客