文档章节

ajax 跨域请求,每次会发送两个请求?

dubox
 dubox
发布于 03/08 10:12
字数 468
阅读 165
收藏 2
点赞 1
评论 0

跨域已经是个老话题了,但是最近搞百度的语音接口的时候,在服务端配置了 CORS ,跨域倒是没问题,但是每次都会发送两个请求:

第一条的请求信息是这样的:

method 是 OPTIONS,并且没有返回数据

然后第二条才是正常的请求;

查了资料发现这个 OPTIONS 是浏览器的预检请求,

而导致浏览器预检的原因是浏览器认为这次跨域请求为复杂请求( not-so-simple request 非简单请求);

浏览器对简单请求的判定规则是:

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

来自:http://www.ruanyifeng.com/blog/2016/04/cors.html

如果不能同时满足上面两个条件则为复杂请求;

而百度 API 要求了 

Content-Type:audio/wav; rate=8000 header 项,所以不满足简单请求;

 

但同时浏览器也支持对预检结果的缓存,可以通过在服务端添加header 设置缓存时间:

add_header Access-Control-Max-Age 3600;

这是在 nginx 的配置方式,3600 是秒数

但是各浏览器支持的最长缓存时间也是不一样的:

返回结果可以用于缓存的最长时间,单位是秒。在Firefox中,上限是24小时 (即86400秒),而在Chromium 中则是10分钟(即600秒)。Chromium 同时规定了一个默认值 5 秒。
如果值为 -1,则表示禁用缓存,每一次请求都需要提供预检请求,即用OPTIONS请求进行检测。

来自:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Max-Age 

 

有个需要注意的地方,调试的时候如果开启了 disable cache 则是无法缓存的,

 

© 著作权归作者所有

共有 人打赏支持
dubox
粉丝 2
博文 82
码字总数 22271
作品 0
西安
程序员
AJAX跨域总结

蚂蚁金服的实习即将结束,将知识总结一下。 我们这个项目前端使用antD,antD是采用React封装的一套组件库,目前开源http://ant.design/,所有组件都是拿来即用,大大缩短了开发周期,强烈推荐...

炁元
2016/08/20
97
0
史上最全ajax全套讲解

博客好久没有更新文章,主要最近在做一个聊天的功能,虽然不是很尽人意,但是最起码实现了功能。其中里面用到最多的就是数据交互问题了。所以ajax自然是最好的选择了。 话说我从没有有系统的...

VIP_web
2016/08/05
0
0
CAS环境下的AJAX跨域

情况说明: 在单点登录的环境下,所有的文件上传都是通过webuploader上传到文件管理服务器。而webuploader的上传可以参考ajax的请求,相当于是跨域操作。 首先,跨域请求访问的问题,可以通过...

战五渣
2015/10/09
90
0
Ajax与JSON的一些总结

1.1.1 摘要 Ajax技术的核心是XMLHttpRequest对象(简称XHR),可以通过使用XHR对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现。虽然名字中包含XML,但Ajax通讯与数据格式无关...

长平狐
2012/06/11
662
0
详解5种跨域方式及其原理

同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin)。 以下是同源检测的示例 URL 结果 原因 http://store.company.com/d...

飞翼
2016/12/12
22
0
Jquery跨域获得Json

这两天用 Jquery 跨域取数据的时候,经常碰到 invalid label 这个错误,十分的郁闷,老是取不到服务器端发送回来的 json 值, 一般跨域用到的两个方法为:$.ajax 和$.getJSON 最后,仔细安静...

吞吞吐吐的
2017/10/04
0
0
.Net Core Cors中间件解析

同源策略和资源跨域共享  1、同源策略    同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。...

MicroHeart!
07/13
0
0
再也不学AJAX了!(三)跨域获取资源 ② - JSONP & CORS

浏览器的“同源策略”固然保障了互联网世界的数据隐私与数据安全,但是如果当我们需要使用AJAX跨域请求资源时,“同源策略”又会成为开发者的阻碍。在本文中,我们会简单介绍需要跨域请求资源...

LiBin
2017/12/06
0
0
ajax跨域资源共享的10种方式

同源策略 在客户端编程语言中,如JavaScript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本...

hcwccc
2014/04/22
0
0
原生JS封装Ajax插件(同域&&jsonp跨域)

抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习。。。 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的。。。简单说说思路...

LuckyWinty
2016/05/02
300
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6用的外库遇到的问题

要用到wmi库 pip install wmi 装后不能用还要安装pywin32库。 要用到crypto加密模块安装pip instal pycrypto装后不能用。要安装pycryptodome。...

oisan_
8分钟前
0
0
select, poll, epoll I/O复用介绍

什么是I/O复用? 内核监视多个文件描述符(I/O文件句柄),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知应用程序进行相应的读写操作。 I/O多路复用又被称为“事件驱动”(比如读写事...

xiaoxlm
9分钟前
0
0
【Spring 系列 给IOC容器添加组件的几种方式总结】

给Spring 注册Bean的几种方式总结。其中使用@Import注解是Spring Boot 完成自动配置的一个核心注解。 1、Spring 中给IOC容器添加组件的几种方式 在Spring的配置文件中,配置Bean(基于XML方式...

HansonReal
10分钟前
3
0
bootstrapTable语言包设置

###方法一引入不同的语言包 <script src="bootstrap-table-zh-CN.js"></script> ###方法二引入全语言包 <script src="bootstrap-table-locale-all.min.js"></script>//然后在初始化前设计默......

momo1987
11分钟前
0
0
Saltstack 常用命令

1、拷贝文件到客户端 # salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt 2、拷贝目录到客户端 # salt 'slaver.test.com' cp.get_dir salt://test /tmp 3、显示存活的客户......

硅谷课堂
11分钟前
0
0
致初学者-如何学好Python这门编程语言?[图]

致初学者-如何学好Python这门编程语言?[图]: 对于很多Python3初学者,往往会面临以下问题:Python2和Python3我该学习哪一个?是否要安装Linux系统学习Python?Python3有各种版本我该安装哪...

原创小博客
14分钟前
1
0
E31---setopt=protected_multilib=false

今天在云服务器上装nginx,需要先安装一些依赖库比如zlib, ,但是安装zlib时候报错。 yum install -y zlib zlib-devel 1 (-y 指的是如果需要选yes no的自动y)下面是报错 Protected multil...

侠客行之石头
18分钟前
0
0
HTTP常见面试题

Http与Https的区别: HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 ,而 HTTPS 的标准端口是443 在OSI 网络模型中,H...

JK_OPERA
20分钟前
0
0
python爬取站长素材网页图片保存到ppt中

网站地址:http://sc.chinaz.com/tupian/index.html 直接上代码: import requestsfrom bs4 import BeautifulSoupfrom pptx import Presentationfrom pptx.util import Inchesimpor......

你为什么不吃药
21分钟前
1
0
Ubuntu 18.04 swap空间的修改

一、准备工作 执行“sudo swapon -s”命令,查看是否已经存在swap file 二、修改swap file # 如果第一步存在swapfile则需要先禁用sudo swapoff /swapfile# 修改swap 空间的大小为2Gs...

Iceberg_XTY
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部