跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免的需要进行跨域操作,所以跨域能力也算是前端工程师的基本功之一。

和大多数跨域的解决方案一样,JSONP也是我的选择,可是某天PM的需求变了,某功能需要改成支持POST,因为传输的数据量比较大,GET形式搞不定。所以折腾了下闻名已久的CORS(跨域资源共享,Cross-Origin Resource Sharing,这边文章也就是折腾期间的小记与总结。

概述

  • CORS能做什么:
正常使用AJAX会需要正常考虑跨域问题,所以伟大的程序员们又折腾出了一系列跨域问题的解决方案,如JSONP、flash、ifame、xhr2等等。
本文介绍的CORS就是一套AJAX跨域问题的解决方案。
  • CORS的原理:
CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。
  • CORS浏览器支持情况如下图:
喜闻乐见、普大喜奔的支持情况,尤其是在移动终端上,除了opera Mini;
PC上的现代浏览器都能友好的支持,除了IE9-,不过前端工程师对这种情况早应该习惯了...

CORS启航

假设我们页面或者应用已在 http://www.test1.com 上了,而我们打算从 http://www.test2.com 请求提取数据。一般情况下,如果我们直接使用 AJAX 来请求将会失败,浏览器也会返回“源不匹配”的错误,"跨域"也就以此由来。
利用 CORS,http://www.test2.com 只需添加一个标头,就可以允许来自 http://www.test1.com 的请求,下图是我在PHP中的 hander() 设置,“*”号表示允许任何域向我们的服务端提交请求

  也可以设置指定的域名,如域名 http://www.test2.com ,那么就允许来自这个域名的请求

当前我设置的header为“*”,任意一个请求过来之后服务端我们都可以进行处理&响应,那么在调试工具中可以看到其头信息设置,其中见红框中有一项信息是“Access-Control-Allow-Origin:* ”,表示我们已经启用CORS,如下图。
PS:由于demo都在我厂的两台测试机间完成,外网也不能访问,所以在这就不提供demo了,见谅

简单的一个header设置,一个支持跨域&POST请求的server就完成了:)
当然,如果没有开启CORS必定失败的啦,如下图:

问题&小结

  • 刚刚说到的兼容性。CORS是W3C中一项较新的方案,所以部分浏览器还没有对其进行支持或者完美支持,详情可移至 http://www.w3.org/TR/cors/
  • 安全问题。CORS提供了一种跨域请求方案,但没有为安全访问提供足够的保障机制,如果你需要信息的绝对安全,不要依赖CORS当中的权限制度,应当使用更多其它的措施来保障,比如OAuth2。
自认为的cors使用场景:
  • cors在移动终端支持的不错,可以考虑在移动端全面尝试;PC上有不兼容和没有完美支持,所以小心踩坑。当然浏览器兼容就是个伪命题,说不准某个浏览器的某个版本就完美兼容了,说不准就有点小坑,尼玛伤不起!~
  • jsonp是get形式,承载的信息量有限,所以信息量较大时CORS是不二选择;
  • 配合新的JSAPI(fileapi、xhr2等)一起使用,实现强大的新体验功能。

参考资料:
http://www.w3.org/TR/cors/
http://www.html5rocks.com/en/tutorials/cors/
http://caniuse.com/#search=cors

作者:聂微东
出处:http://www.cnblogs.com/Darren_code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

转载于:https://www.cnblogs.com/colder/p/5704016.html

AJAX POST跨域 解决方案 - CORS(转载)相关推荐

  1. jquery ajax 跨域解决方案 - CORS

    这是一个系列,记录我前端开发常用的代码,小常识,有些是参考网上代码,(讲的可能有点烂,求不要打脸,嘤嘤嘤~~)送给那些需要的人.可以相互交流,喜欢的加我吧. Wx: Lxp911221 CORS 跨域 ...

  2. 跨域解决方案CORS

    #什么是跨域 出于浏览器的同源策略限制.同源策(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是 ...

  3. 前端JS跨域解决方案

    JS跨域请求 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何 ...

  4. 【PHP】Ajax跨域解决方案 、jsonp、cors

    [PHP]Ajax跨域解决方案 .jsonp.cors 参考文章: (1)[PHP]Ajax跨域解决方案 .jsonp.cors (2)https://www.cnblogs.com/xuzhengz ...

  5. Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持

    Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持 1.设置 document.domain为一致  推荐1 2.Apache 反向代理 推荐1 3. ...

  6. ajax跨域请求(cors实现),ajax跨域请求(CORS实现)

    场景:目前有项目A(基于servlet的WEB项目),和项目B(基于spring boot的WEB项目),使用同一CAS提供单点登陆,如今须要两个项目互相调用接口数据,因此涉及到ajax的跨域请求ja ...

  7. 跨域解决方案之CORS及其相关概念

    在讲解 CORS 之前先了解以下几个概念 同源策略 同源策略(Same origin policy)是一种约定,是浏览器限制一个域名与另外一个域名的资源的交互的规则,是浏览器最核心也最基本的安全功能, ...

  8. ajax 跨域请求数据,JQuery Ajax执行跨域请求数据的解决方案

    JQuery Ajax执行跨域请求数据的解决方案 今天前端因为需要ajax调用两个不同的项目,请求域不一样,所以涉及ajax跨域的问题 ,其实很简单,具体如下 原来的ajax请求如下: $.ajax( ...

  9. CORS 跨域解决方案

    CORS 跨域解决方案 跨源资源共享 跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它源(域.协议和端口),使得浏览器允许 ...

最新文章

  1. dotnet new 命令使用模板生成Angular应用
  2. uoj#38. 【清华集训2014】奇数国(线段树+数论)
  3. linux 更改配置文件 禁止ssh,配置linux用户实现禁止ssh登陆但可用sftp登录
  4. 一次 Discuz X3.2 切换数据库后无法登录的问题排查经历
  5. jQuery ajax post put 请求
  6. 嵌入式Linux截图工具gsnap移植与分析【转】
  7. Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
  8. ppt 母版的设置(一篇看懂)
  9. python已停止工作请关闭该程序_解决PyCharm的Python.exe已经停止工作的问题
  10. 洞察Tungsten Fabric内部的XMPP
  11. 网络安全求职该怎么写简历?
  12. css 一直图片适配所有手机背景图
  13. 运用EXCEL RAND RANK INDEX函数制作抽奖器
  14. 【它山之玉】慎重选择博士后(或博士生)导师-科学网马臻
  15. 【yum是什么?】centos7基于阿里云,配置网络yum
  16. dedecms教程:单页制作教程
  17. python简易电话簿系统_Python实现电话簿工具(代码分享)
  18. 对上传图片进行处理,大图片压缩补白,小图片适度放大四周补白
  19. Unity实用案例之——动画压缩
  20. Python 画沿着高对称性的能带图

热门文章

  1. Linux逻辑卷(LVM)技术详解
  2. Java代码中换行符怎么用
  3. Java三种类型之间的转换方法:Date、String、Calendar类型之间的转化
  4. 知乎人均985?Python爬50W数据,BI做出可视化后,我有了答案
  5. 案例学习BlazeDS+Spring之七InSync05新增联系人
  6. android 月牙动画,一加6月牙白版:可能是目前最漂亮的白色安卓旗舰
  7. 设置透明色有残留怎么办_冬天车玻璃结冰,车被冻住了怎么办?据说只有10%的人做对了...
  8. 小C的数学问题 线段树+分治
  9. Python脚本生成单个EXE文件
  10. 目标检测——模型效率的优化