AJAX中出现两次请求,OPTIONS请求和GET请求

在项目中发现ajax中出现两次请求,OPTIONS请求和GET请求,得到的数据出错,所以想要去掉OPTIONS请求。

ajax请求如下:

ajaxRequestGet: function (lastPath, requestParams, successFun) {
            $.ajax({
                headers: {
                    ‘GISTTOKEN‘: getToken()
                },
                url : this.baseUrl+lastPath,
                type : "get",
                data: requestParams,
                success : function(data){
                    successFun(data);
                }
            });
        },

查看到浏览器NetWork有两次请求,请求url一样:

查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别。

XMLHttpRequest会遵守同源策略(same-origin policy). 也即脚本只能访问相同协议/相同主机名/相同端口的资源, 如果要突破这个限制, 那就是所谓的跨域, 此时需要遵守CORS(Cross-Origin Resource Sharing)机制。

那么, 允许跨域, 不就是服务端设置Access-Control-Allow-Origin: *就可以了吗? 普通的请求才是这样子的, 除此之外, 还一种叫请求叫preflighted request。

preflighted request在发送真正的请求前, 会先发送一个方法为OPTIONS的预请求(preflight request), 用于试探服务端是否能接受真正的请求,如果options获得的回应是拒绝性质的,比如404\403\500等http状态,就会停止post、put等请求的发出。

那么, 什么情况下请求会变成preflighted request呢?

1、请求方法不是GET/HEAD/POST
2、POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
3、请求设置了自定义的header字段

上面请求中设置了自定义的headers字段,出现了option请求。把自定义headers字段删掉后,只剩下get请求:

ajaxRequestGet: function (lastPath, requestParams, successFun) {
            $.ajax({
                url : this.baseUrl+lastPath,
                type : "get",
                data: requestParams,
                success : function(data){
                    successFun(data);
                }
            });
        },

原文地址:https://www.cnblogs.com/deityjian/p/11700709.html

时间: 2024-10-07 17:52:05

AJAX中出现两次请求,OPTIONS请求和GET请求的相关文章

httpURLConnection-网络请求的两种方式-get请求和post请求

GET请求 /** * 从网络获取json数据,(String byte[}) * @param path * @return */ public static String getJsonByInternet(String path){ try { URL url = new URL(path.trim()); //打开连接 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); if(200 ==

前端ajax中运用post请求和get请求之于session验证

首先我们来看下ajax两种请求的区别: Ajax中POST和GET的区别Get和Post都是向服务器发送的一种请求,只是发送机制不同. 1. GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器.当然在Ajax请求中,这种区别对用户是不可见的. 2. 首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了.而实际上,URL不存在参数上限的问题,HTTP协

Ajax中get请求和post请求

我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1.使用Get请求时,请求所带的参数会跟在URL后传递,而Post请求则是作为HTTP消息的实体内容发送给WEB服务器. 2.使用Get请求发送数据量小,通常不能大于2KB:而Post请求发送数据量大,理论上不受限制. 3.Get方式请求的数据会被浏览器缓存起来,可从浏览器的历史记录中读取到这些数据,

Ajax相关——get请求和post请求的区别

一.完整的URL由以下几部分组成: scheme:通信协议,常用的有:http/ftp. host:主机,服务器(计算机)域名或IP地址 port:端口,整数,可选,省略时使用默认端口,http的默认端口是80. path:路径,由零或多个"/"符号隔开的字符,一般用来表示主机的一个目录或者文件地址 query:查询,可选,用于给动态网页(如用CGI.ISAPI.PHP/ASP/JSP/ASP.NET等技术制作的网页)传递参数,用"&"符号隔开,每个参数的名

HttpClient之Get请求和Post请求示例 编辑

HttpClient的撑持在HTTP/1.1标准中界说的一切的HTTP办法:GET, HEAD, POST, PUT, DELETE, TRACE 和 OPTIONS.每有一个办法都有一个对应的类:HttpGet,HttpHead,HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions.一切的这些类均完成了HttpUriRequest接口,故可以作为execute的履行参数使用.恳求URI是可以使用恳求的一致资本标识符. HTTP恳求的URI包括一个协

HttpClient之Get请求和Post请求示例

HttpClient之Get请求和Post请求示例 博客分类: Java综合 HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, DELETE, TRACE 和 OPTIONS.每有一个方法都有一个对应的类:HttpGet,HttpHead,HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions.所有的这些类均实现了HttpUriRequest接口,故可以作为execute的执行参数使

浅说Get请求和Post请求

Web 上最常用的两种 Http 请求就是 Get 请求和 Post 请求了.我们在做 java web 开发时,也总会在 servlet 中通过 doGet 和 doPost 方法来处理请求:更经常地,我们会在 doGet 方法的实现中调用 doPost 方法.尽管做了近两年的 web 开发,我对诸如 Get 请求和 Post 请求的基本概念仍不是十分了解.近日阅读< javascript 高级程序设计>(很长时间没有看书了!),重新整理了一下 Get 请求和 Post 请求的概念,算是读书

HTTP的GET请求和POST请求

1.HTTP请求概述 在前面有一篇文章对HTTP协议又详细的描述,这里就不再过多的做说明,值是简单的作为这篇文章的引子. HTTP协议又被称为超文本传输协议,他的的设计目的是保证客户机与服务器之间的通信.HTTP 的工作方式是客户机与服务器之间的请求-应答协议.在客户机和服务器之间进行请求-响应时,有两个最基本的请求方式:GET 和 POST. 其中,GET请求表示从指定的资源请求数据,POST请求表示向指定的资源提交要被处理的数据. 2.HTTP请求格式 在HTTP请求中,首先是请求行,注意这

iOS开发网络篇—GET请求和POST请求

iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:u