options请求_跨域共享资源(CORS)和OPTIONS 请求
域名、协议、端口均相同。
什么是跨域?
跨域:指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器的安全限制!
我们用 koa 写一个简单的 server:
并在前端页面中请求/api
接口(前端页面跑在3000端口):
因为端口不同产生了跨域,所以可以看到报错如图:
分析错误原因:没有“Access-Control-Allow-Origin”标头。但是我们能在server端的log中看到:
并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。当我们在 server 端配置 Access-Control-Allow-Origin 标识允许哪个域的请求 (* 简单粗暴的表示所有都可以)。
前端就可以正常访问到结果了。简单请求
某些请求不会触发 CORS 预检请求。
若请求满足所有下述条件,则该请求可视为“简单请求”:
• 请求方法为 GET、HEAD、POST 时发的请求
• 人为设置了规范集合之内的首部字段,如 Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width
• Content-Type 的值仅限于下列三者之一,即 application/x-www-form-urlencoded、multipart/form-data、text/plain
• 请求中的任意 XMLHttpRequestUpload 对象均没有注册任何事件监听器
• 请求中没有使用 ReadableStream 对象
上边的 demo 就是符合一个简单请求。预检请求不满足简单请求时,要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。“预检请求”的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。修改前端的请求,通过设置HEAD字段,使它不再是一个简单请求:
就可以看到,浏览器多发出了一个options请求:
预检请求header中包含关键字段:Access-Control-Request-Method:告知服务器,实际请求将使用的方法。Access-Control-Request-Headers:告知服务器,实际请求将携带的自定义请求header字段。服务端则需要设置相对应的:Access-Control-Allow-Methods:表明服务器允许客户端使用什么方法发起请求。Access-Control-Allow-Headers:服务器允许的自定义请求 header 中的字段。比如:(允许 header 中携带 sign 字段)
PS:koa 框架有对应的 cors 模块,使用起来会更加简单。请求携带cookies
对于跨域请求浏览器默认不会携带cookie信息,fetch方式需要设置 credentials: "include"
,XMLHttpRequest设置 withCredentials:"include"
。
服务端需要同时设置 Access-Control-Allow-Credentials:true
注:如果我们在请求中设置了 credentials: "include"
,服务端就不能设置 Access-Control-Allow-Origin: "*"
只能设置为一个明确的地址。OPTIONS请求优化
当触发预检时,跨域请求便会发送2次请求,既增加了请求数,也延迟了请求真正发起的时间,影响性能。
• 转化为简单请求• Access-Control-Max-Age 表示预请求的返回结果,即 Access-Control-Allow-Methods / Access-Control-Allow-Headers 可以被缓存多久,单位为秒。
设置缓存时间为10分钟,则一分钟只能不会重复发送 OPTIONS 请求。
options请求_跨域共享资源(CORS)和OPTIONS 请求相关推荐
- cors跨域_跨域,不止CORS
我们通常提到跨域问题的时候,相信大家首先会想到的是 CORS(跨源资源共享),其实 CORS 只是众多跨域访问场景中安全策略的一种,类似的策略还有: COEP: Cross Origin Embedd ...
- 【AJAX 笔记】AJAX 基本、HTTP 基本、原生 AJAX 的使用,jQuery / Axios / fetch 发送请求、跨域(JSONP/CORS)
文章目录 1 Ajax 概述 1.1 AJAX 简介 1.2 XML 简介 1.3 AJAX 的特点 1.3.1 AJAX 的优点 1.3.2 AJAX 的缺点 1.4 AJAX 属性和方法 2. H ...
- authorization 传 就跨域_跨域访问接口上传图片出现options请求问题解决方法
1.首先因为服务器端会先发送一个option请求到后台 在后台返回一个post给页面 页面在处理post请求给接口 2.先写一个过滤器, 我们自己定义一个过滤器 package com.adtime ...
- 跨域 已被CORS策略阻止 请求的资源上没有Access-Control-Allow-Origin标头 (使用Access-Control-Allow-Origin解决跨域)
问题:已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头(跨域请求失败) 解决方法一 : 右击 Goolge 浏览器 ,选择属性 , 快捷方法:目标最 ...
- yii2 跨域请求配置_如何在SpringBoot应用中实现跨域访问资源和消息通信?
允许跨域访问 CORS ( Cross Origin Resource Sharing,跨域资源共享)机制允许Web应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行.浏览器支持在API容器中 ...
- options请求(跨域预检)
概述 options 请求就是预检请求,可用于检测服务器允许的 http 方法.当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起 OPTIONS 请求,即 CORS 预检 ...
- xmlhttprequest 跨域_跨域资源共享(CORS)安全性
跨域资源共享(CORS)安全性 背景 提起浏览器的同源策略,大家都很熟悉.不同域的客户端脚本不能读写对方的资源.但是实践中有一些场景需要跨域的读写,所以出现了一些hack的方式来跨域.比如在同域内做一 ...
- 【前端44_前后端交互_跨域】前端解决:JSONP、后端解决:CORS 、后端代理
文章目录 跨域 什么是跨域 前端解决: JSONP 实现原理 步骤 前端:创建标签,拼接传递参数 后端:接收值,返回值 封装 Ajax 代码 在封装的 Ajax 中添加 JSONP 需求 思路 练习: ...
- CORS跨域共享相关响应头
CORS跨域共享相关响应头 一.CROS概念 二.支持跨域配置 三.响应头详解 四.预检请求 一.CROS概念 CORS是一个W3C标准,Cross-origin resource sharing,跨 ...
- AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)
根据视频进行整理 [https://www.bilibili.com/video/BV1WC4y1b78y?p=1] 视频资料 百度网盘: 链接:[https://pan.baidu.com/s/1n ...
最新文章
- opencv图像恢复逆滤波_OpenCV之快速的图像边缘滤波算法
- 使用MLeaksFinder检测项目内存泄露总结
- 15合并两个排序的链表
- 用存储过程还原数据库
- 日常生活小技巧 -- 文件对比工具 Beyond Compare
- python定期自动运行_干货分享 | 适合 Python 入门的 8 款强大工具,不会就你还不知道吧!...
- 发明了计算机科学中的 bug 一词的是,为什么经常把计算机中存在的问题叫bug?...
- python获取网页图片_Python获取网页上图片下载地址的方法
- MVCWebForm对照学习:文件上传(以图片为例)
- EF/SQL/新闻中分页应用
- 前端性能优化(十一)
- ovirt4.4.10安装配置USB重定向
- Ubuntu版Julia安装与入门
- Javaweb常用单词
- 生来只为丈量天空,开普勒的传奇一生
- 电源完整性之DC-DC
- Electron编译报错:include: could not find: ****StdUtils.nsh“的解决
- 超全MySQL题(104道、含MySQL新特性解法)由浅入深、笔试必备!(第四部分40-52)
- 在线展示pdf和word并且不能显示下载和打印按钮
- 人生把我当成了戏子,我只好把你们当成婊子
热门文章
- (String)、toString()、String.valueOf区别
- mysql把A表的数据插入到B表
- 原来 Python 还有这些实用的功能和特点!
- 「镁客·请讲」ETC社区发起人邹来辉(Roy):我为什么要做ETC社区和狗狗币基金会?...
- 至少出现k次重复的子串的最大长度
- 《ANTLR 4权威指南》——第2章 纵 观 全 局 2.1 从ANTLR元语言开始
- 递归大总结之斐波那契
- 2015年9月01日【磁盘和文件系统管理】-JY1506402-19+liuhui880818
- ubuntu 14.04 32bit依赖库解决
- 剑指offer 29 多于一半的数