CORS原理及详细使用(转载)

跨源资源共享(CORS) 本文介绍了跨源资源共享(CORS)及常见示例,介绍了用于CORS的常见请求及相应字段及攻击等。 阅读详情

CORS:全称"跨域资源共享"(Cross-origin resource sharing)。

CORS需要浏览器和服务器同时支持,才可以实现跨域请求,目前几乎所有浏览器都支持CORS,IE则不能低于IE10。CORS的整个过程都由浏览器自动完成,前端无需做任何设置,跟平时发送ajax请求并无差异。so,实现CORS的关键在于服务器,只要服务器实现CORS接口,就可以实现跨域通信。

请求类型:
CORS分为简单请求和非简单请求(需预检请求)两类

符合以下条件的,为简单请求

请求方式使用下列方法之一:

  • GET
  • HEAD
  • POST

Content-Type 的值仅限于下列三者之一:

  • text/plain
  • multipart/form-data
  • application/x-www-form-urlencoded

对于简单请求,浏览器会直接发送CORS请求,具体说来就是在header中加入origin请求头字段。同样,在响应头中,返回服务器设置的相关CORS头部字段,Access-Control-Allow-Origin字段为允许跨域请求的源。请求时浏览器在请求头的Origin中说明请求的源,服务器收到后发现允许该源跨域请求,则会成功返回。

非简单请求(预检请求)

使用了下面任一 HTTP 方法:

  • PUT
  • DELETE
  • CONNECT
  • OPTIONS
  • TRACE
  • PATCH

 
Content-Type 的值不属于下列之一:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain

当发生符合非简单请求(预检请求)的条件时,浏览器会自动先发送一个options请求,如果发现服务器支持该请求,则会将真正的请求发送到后端,反之,如果浏览器发现服务端并不支持该请求,则会在控制台抛出错误。

前端代码与发送普通Ajax请求没有差异,我们只需在服务端设置即可

以node做服务端为例:

var express = require('express');
var app = express();
var allowCrossDomain = function (req, res, next) {
  res.header('Access-Control-Allow-Origin', 'http://localhost:3001');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
}
app.use(allowCrossDomain);

接下来,http://localhost:3001下的GET,PUT,POST,DELETE请求,自定义首部字段为Content-Type的非简单请求则会被正常访问,当然,你也可以将Access-control-Allow-Methods和Access-Control-Allow-Headers这两个配置删掉,删掉之后,将仅支持简单请求进行跨域。
--------------------- 

CORS字段介绍:
(1)Access-Control-Allow-Methods

该字段必需,它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。

(2)Access-Control-Allow-Headers

如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。

(3)Access-Control-Allow-Credentials

该字段与简单请求时的含义相同。

(4)Access-Control-Max-Age

该字段可选,用来指定本次预检请求的有效期,单位为秒。上面结果中,有效期是20天(1728000秒),即允许缓存该条回应1728000秒(即20天),在此期间,不用发出另一条预检请求。

总结:
总的来说,使用CORS简单请求,非常容易,对于前端来说无需做任何配置,与发送普通ajax请求无异。唯一需要注意的是,需要携带cookie信息时,需要将withCredentials设置为true即可。CORS的配置,完全在后端设置,配置起来也比较容易,目前对于大部分浏览器兼容性也比较好。CORS优势也比较明显,可以实现任何类型的请求,相较于JSONP跨域只能使用get请求来说,也更加便于我们使用。


原文地址:https://blog.youkuaiyun.com/badmoonc/article/details/82706246 

相关链接:AJAX详解-廖雪峰官网 

CORS配置与管理:允许跨域资源共享实战指南 CORS,全称为跨源资源共享(Cross-Origin Resource Sharing),是一种安全机制,允许一个域上的网页获取或操作另一个域上的资源。这种机制打破了传统的同源策略限制,使得网页可以更加灵活地访问不同域下的资源。CORS的作用体现在多个方面:允许安全的数据交换:CORS确保了跨域请求的安全性,只有被服务器明确授权的跨域请求才能被执行。支持现代Web应用开发:它支持多种类型的HTTP请求方法,包括GET、POST和PUT等,为现代Web应用提供了强大的开发能力。 阅读详情

相关推荐

用LangFuse+LangChain打造可观测的AI应用:从埋点到成本监控实战

本文详细介绍了如何将开源可观测性平台LangFuse深度集成到基于LangChain构建的AI应用中,特别是电商客服机器人场景。通过从基础SDK集成、提示词管理到成本监控的完整实战,帮助开发者实现对LLM应用内部工作流的清晰追踪、问题排查与费用分析,从而打造稳定、可控的生产级AI应用。

dapp9builder的博客 711

跨域访问方法介绍(7)--使用 CORS

CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。本文主要介绍 CORS 的基本使用,文中所使用到的软件版本:Chrome90.0.4430.212、jquery 1.12.4,Spring Boot2.4.4、jdk1.8.0_181。 1、CORS 简介 CORS 需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能..

chinaherolts2008的博客 747

ArcMap新手必看:Shape属性中的点ZM值到底是什么?如何快速处理

本文深入解析ArcMap中Shape属性中的点ZM值,揭示其在GIS数据中的隐藏维度作用,包括Z值(高程值)和M值(测量值)。针对ZM值可能引发的服务发布问题,提供三种高效处理方案,帮助新手快速掌握数据导入时的ZM值管控策略及精准去除方法。

weixin_42561476的博客 431

cors的使用

CORS是一种机制,它使得浏览器可以向不同域名的服务器发送XMLHttpRequest请求。在默认情况下,浏览器会阻止这种跨域请求,以保护用户的安全。但是,如果服务器允许跨域请求,那么浏览器就可以正常发送请求并接收响应。当浏览器遇到跨域请求时,它会先发送一个预检请求(OPTIONS请求),以确定服务器是否允许该请求。如果服务器返回的响应中没有包含正确的CORS配置信息,那么浏览器就会抛出一个错误。CORS(跨域资源共享)是一种Web标准,它允许浏览器向跨源服务器发送XMLHttpRequest请求。

m0_72231852的博客 842

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

手把手教你用STM32硬件SPI驱动BMI088陀螺仪(附完整代码)

本文提供了一份详尽的STM32硬件SPI驱动BMI088陀螺仪的实战指南。内容涵盖从硬件连接、SPI底层配置、驱动层封装到设备初始化、数据读取与同步策略,并深入探讨了数据处理、滤波融合及温度补偿等核心技巧,旨在帮助开发者构建稳定高效的IMU驱动框架,解决BMI088应用中常见的挑战。

quiet的专栏 529

跨域资源共享 CORS 详解

作者: 阮一峰日期: 2016年4月12日本文转载自跨域资源共享CORS - 阮一峰, 我觉得阮老师写的非常好!深入浅出!就转载过来啦~CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。本文详细介绍CORS的内部机制。一、简介CORS

Preeminent 1009

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

CORS 跨域原理

同源策略&跨域 什么是 CORS? CORS 全称 Cross-Origin Resource Sharing,即跨域资源共享。 CORS 是一种基于 HTTP Header 的机制,该机制通过允许服务器标示除了它自己以外的其它域。服务器端配合浏览器实现 CORS 机制,可以突破浏览器对跨域资源访问的限制,实现跨域资源请求。 CORS 验证机制 CORS 的验证机制分两种模式:简单请求和预检请求。 简单请求 简单请求模式下浏览器直接发送请求,并在请求头中携带 Origin。 服务器端接到请求.

StoneHui 1928

主动式桥梁防船撞预警系统的方案汇总

本系统以精密光电测高前端(2台,上下游各1台)、固态雷达(2台,上下游各1台)、AIS(1台)、偏航辅助前端(4台,上下游各2台)为核心,通过人工智能,对画面上的船舶目标进行深度学习、精确定位,再用系统集成方法将各设备有机结合在一起,构建成套的桥梁防撞主动预警系统,全天候监控过往船舶。主动式桥梁防船撞预警系统主要船舶监测采集单元、控制单元、船舶超高、偏航信息检测单元、以及视频监控单元组成,,通过声光警示、短信文字、船舶身份识别及海事对讲频道、视频录像取证等多种手段与船舶进行信息互动,主动防止船舶碰撞桥梁!

gdxixun的博客 977

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

本文介绍了在RAP中实现Excel文件上传处理的三种方法:1) 使用@Semantics.largeObject注解实现简单上传下载,但限制在ObjectPage页面使用;2) 通过自定义action弹窗实现上传功能,但存在无法自动刷新列表等限制;3) 结合CustomUIExtension实现更灵活的完整功能,但需要UI5开发技能。文章详细说明了每种方法的实现步骤,包括数据库表设计、注解配置、前端界面开发和后端处理逻辑,并比较了各自的优缺点。最后通过一个处理不同币种数据的示例,展示了如何实现业务处理逻辑。

DeveloperMrMeng的博客 624

【转载】CSRF & CORS

下面转的两篇文章分别说明了以下两个概念和一些解决方法: CSRF - Cross-Site Request Forgery - 跨站请求伪造 CORS - Cross Origin Resourse-Sharing - 跨域资源共享 一、 CSRF 转自:http://www.h3c.com.cn/About_H3C/Company_Publication/IP_Lh/2012/04/...

生有涯,知无涯 221

利用baostock获取上市公司财务指标

利用baostock获取上市公司的财务指标 1、导入模块,登录baostock import baostock as bs import pandas as pd import time # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) 2、查询股票代码、行业板块 # 查询股票代码 rs=.

firefox_yau的博客 2099

(转载)构建public APIs与CORS

from: https://segmentfault.com/a/1190000000709909 理由:在操作层面详细的讲解了跨域的操作。尤其是对于option请求的详解。收藏。   在构建Public APIs的过程中,首先要解决的第一个问题就是跨域请求的问题。 网络应用安全模型中很重要的一个概念是“同源准则”(same-origin policy)。该准则要求一个网站(由协议+主

Ryan Miao的博客 501

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【转载】ajax跨域及解决方案(jsonp、cors)

题纲关于跨域,有N种类型,本文只专注于ajax请求跨域(,ajax跨域只是属于浏览器"同源策略"中的一部分,其它的还有Cookie跨域iframe跨域,LocalStorage跨域等这里不做介绍),内容大概如下:什么是ajax跨域原理表现(整理了一些遇到的问题以及解决方案)如何解决ajax跨域JSONP方式CORS方式代理请求方式如何分析ajax跨域http抓包的分析一些示例什么是ajax跨域。

2401_84091938的博客 1352

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

CORS实现原理

1.简介 CORS,跨域资源共享,需要浏览器和服务器同时支持,基本思想为使用自定义的HTTP头部让浏览器和服务器通信 2.分类 浏览器将CORS分为两类: 简单请求 HEAD,GET,POST, HTTP头部信息不超出几个字段 非简单请求 HEAD请求 只请求页面的首部,可以判断一个资源是否存在 3.简单请求 浏览器直接发出CORS请求,在头信息中添加一个Origin字段,用来...

文生同学 2440

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

CORS的原理及应用

CORS的原理及应用 CORS是跨站资源共享,同样是解决浏览器的同源策略 其本质是设置响应头,使得浏览器允许跨域请求。 第三方网站返回数据的时候在浏览器的响应头中添加允许的域名,允许所有的用* 1 简单请求 简单请求是只发一次请求 ajax请求不变,第三方后台修改 s4的后台,在返回值中添加允许的域名和端口,注意不同后面写具体的域名,自己出错是在后面加上了cors 允许所有的,用* d...

dianyi3179的博客 365

【转】什么是CORS

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 AJAX 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 CORS与JSONP的使用目的相同,但是比JSONP更强大。JSONP只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。 CORS可以分成两种请求 浏...

sinolover的专栏 1195

CORS介绍

文章目录CORS简单请求处理流程非简单请求处理流程如何携带Cookie简单请求参考文档 CORS CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 为了解决跨域AJAX请求不能发送而出现的。 当浏览器发现AJAX请求跨域,会进行一些特殊处理,若目标服务器按照CORS标准进行了配置,就可以处理跨域请求。 简单请求处理流程 简单请求的定义...

东京易冷 1031

CORS/JSONP比较

CORS 跨域 实现思路及相关解决方案 本篇包括以下内容: CORS 定义 CORS 对比 JSONP CORS,BROWSER支持情况 主要用途 Ajax请求跨域资源的异常 CORS 实现思路 安全说明 CORS 几种解决方案 自定义CORSFilter Nginx 配置支持Ajax跨域 支持多域名配置的CORS Filter keyword:cors,跨域,ajax,403,filter,RESTful,origin,http,nginx,jsonp 原创作品,转载请附

HideInTime的博客 594

ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)

什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。本文详细介绍CORS的内部机制。 一、简介 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 整个...

davy57345的博客 197

CORS理解

1. CORS cross-origin resource sharing, 跨域资源共享. 因为出于安全的考虑, 浏览器不允许Ajax调用当前源之外的资源. 即浏览器的同源策略. CORS需要浏览器和服务器同时支持。目前,所有主流浏览器都支持该功能,IE浏览器不能低于IE10。在浏览器端, 整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求

YUAN_YONG_的博客 703

CORS原理及漏洞利用

转载至https://threezh1.com/2020/02/19/CORS%E5%8E%9F%E7%90%86%E5%8F%8A%E5%88%A9%E7%94%A8%E6%95%B4%E7%90%86/ 刚入门的时候也学习过CORS,那个时候的对寻找漏洞的标准是: 1修改`Origin:`,使得返回的HTTP字段中的`Access-Control-Allow-Origin: `出现你所输入的值,表明此网站存在CSOR漏洞 原理、利用、绕过都没有进一步了解。这次趁着实习的机会,好好的将CORS相关知识总

weixin_50464560的博客 2073

PHP开启CORS

CORS 定义 Cross-Origin Resource Sharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误...

weixin_30905981的博客 470
上一篇: 原生Ajax和jQuery版本的使用
下一篇: JSON用法
友人C君~
博客等级 码龄9年 131粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值