js:get/post/put/delete/option请求

总结

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博客

http跨域时的options请求 - 简书

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dodo_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值