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

CORS可以分成两种请求

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)

只要同时满足以下两大条件,就属于简单请求

  • 请求方法是以下三种方法之一:
HEAD
GET
POST
  • HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

不同时满足上面两个条件,就属于非简单请求。

简单请求时 Request Headers 会添加一个 Origin 字段

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,pt;q=0.2,fr;q=0.2
Cache-Control:no-cache
Connection:keep-alive
Host:b.code.com:8080
Origin:http://a.code.com:8080
Pragma:no-cache
Referer:http://a.code.com:8080/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

以上会出现本次请求来自哪个源(协议 + 域名 + 端口),
Origin 指定的源,不在许可范围内,服务器会返回一个正常的HTTP回应。

Connection:keep-alive
Content-Length:430
Content-Type:application/json; charset=utf-8
Date:Tue, 25 Apr 2017 14:08:44 GMT
ETag:W/"1ae-VP1n2Jqobg5OeVKZa52pn4FP1/k"
X-Powered-By:Express

Response Headers 没有包含 Access-Control-Allow-Origin 字段,
服务器抛出XMLHttpRequest不能加载的错误

XMLHttpRequest cannot load http://b.code.com:8080/getNews. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://a.code.com:8080' is therefore not allowed access.

如果 Origin 指定的域名在许可范围内,服务器返回的响应,会多出1个头信息字段。

Access-Control-Allow-Origin:http://a.code.com:8080

Access-Control-Allow-Origin的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。

// 限制当前请求http://a.code.com:8080可以获取数据
header("Access-Control-Allow-Origin", "http://a.code.com:8080");
// 接受任何请求
// header("Access-Control-Allow-Origin", "*");

以上就可以跨域资源共享,实现跨域。
查看实例代码
https://boloog.github.io/demos/Cross-domain/mp4/cors.mp4

2人点赞

日记本

作者:柏龙
链接:https://www.jianshu.com/p/e79024ba9cc7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

【转】什么是CORS相关推荐

  1. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  2. Access to XMLHttpRequest at file from origin ‘null‘ has been blocked by CORS policy谷歌浏览器本地打开项目js文件报错

    Access to XMLHttpRequest at 'file:///xxxxx/PQ.BaseInfo.proto' from origin 'null' has been blocked by ...

  3. kotlin设置CORS跨域资源共享,java设置允许跨域,服务端如何设置 springboot中设置跨域资源共享

    CORS通信过程,都是浏览器或http插件自动完成,不需要 用户/开发人员 参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码是完全一样的.浏览器一旦发现AJAX请求跨源,就会自动添 ...

  4. 转 小辉_Ray CORS(跨域资源共享)

    前言:上一篇文章在写如何使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享).虽然前些天也看了一下CORS相关的文章,但是 ...

  5. host ntrip 千寻rtk_什么是千寻知寸cors账号?它提供的定位服务精度如何?使用时需要注意哪些问题?...

    千寻知寸cors账号FindCM:基于RTK技术的厘米级差分数据播发服务,终端设备收到差分数据后,结合自己的卫星观测数据进行高精度定位解算,在观测环境良好的情况下,统计精度可以达到水平2~5厘米,高程 ...

  6. CORS漏洞利用检测和利用方式

    CORS全称Cross-Origin Resource Sharing, 跨域资源共享,是HTML5的一个新特性,已被所有浏览器支持,不同于古老的jsonp只能get请求. 检测方式: 1.curl访 ...

  7. ASP.NET Web API自身对CORS的支持:从实例开始

    在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来 ...

  8. 不同版本浏览器前端标准兼容性对照表以及CORS解决跨域和CSRF安全问题解决方案

    CORS也已经成为主流的跨域解决方案,不过CORF也会引发CSRF,本文先分享第三方的一个前端工具箱全面展示那些浏览器版本支持CORS,由于各家浏览器厂商因为各自原因在不同的版本里支持的标准不同,这个 ...

  9. HTTP访问控制(CORS)

    跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求.比如说,域名A(http://domaina.examp ...

  10. 跨域资源共享 CORS

    简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请 ...

最新文章

  1. css新闻列表优化-突破思维新方法更利于搜索引擎
  2. Zookeeper分布式一致性原理(二):一致性协议
  3. 人身三流指什么_电气隔离是什么意思呢?
  4. boost::fusion::traits::is_sequence用法的测试
  5. LeakCanary 源码分析
  6. JVM内存管理机制和垃圾回收机制
  7. 架构宣言: MDA 实战
  8. 【DP】小明游天界(zjoj 2149)
  9. 移动应用开发——实验六
  10. python 查询sqlserver 视图_在Python中,将SQL查询的输出显示为表,就像在SQL中一样...
  11. 【Android Developers Training】 1. 创建一个Android项目工程
  12. 人生每一件事都是为自己而做
  13. MxsDoc文档管理系统 - 中小型企业和个人用户最好的选择
  14. 皮卡丘为什么不进化_皮卡丘为什么不进化?
  15. 染色问题java_java地图路径染色寻找算法
  16. 中国历史各王朝的知识点总结记忆
  17. 如何写好博客——常用标点符号易错点正确用法汇总
  18. python计算行列式(使用下三角方式)
  19. 新晋小王子 doodoo.js Node.js开发框架
  20. mysql中长整型是longint_整型int和长整型long

热门文章

  1. centos踩坑指南之安装composer
  2. 洛谷P3628 [APIO2010]特别行动队(斜率优化)
  3. python开发学习笔记之六(面向对象)
  4. BZOJ 4034: [HAOI2015]T2 树链剖分
  5. win7 dos窗口输入命令必须加后缀问题,例如 java必须输java.exe
  6. 带给你灵感的3D街画艺术设计
  7. 华南师范大学计算机学院广东录取,华南师范大学2020年广东省各批次分专业录取分数统计(含位次)...
  8. 撤销 恢复快捷键 Linux,Linux Vim撤销和恢复撤销快捷键用法详解
  9. php npm,php – Laravel中NPM,Composer和Bower的区别?
  10. java中的集合框架_JAVA中的集合框架(上)List