作家
登录

ajax跨域,这应该是最全的解决方案了

作者: 来源: 2017-12-20 09:06:35 阅读 我要评论

【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?

第三种现象:No 'Access-Control-Allow-Origin' header is present>


媒介

大年夜刚接触前端开提议,跨域这个词就一向以很高的频率在身边反复竽暌箍现,一向到如今,已经调试过N个跨域相干的问题了,16年时也整顿过一篇相干文┞仿,然则感到照样差了点什么,于是如今从新梳理了一下。

实现流程

小我见识有限,如出缺点,请多多见谅,迎接提出issue,别的看到这个标题,请勿喷~

题纲

关于跨域,有N种类型,本文只专注于ajax请求跨域(,ajax跨域只是属于浏览器"同源策略"中的一部分,其它的还有Cookie跨域iframe跨域,LocalStorage跨域等这里不做介绍),内容大年夜概如下:

  • 什么是ajax跨域
    • 表示(整顿了一些碰到的问题以及解决筹划)
  • 若何解决ajax跨域
    • JSONP方法
    • CORS方法
    • 代劳请求方法
  • 若何分析ajax跨域
    •  http抓包的分析
    •  一些示例

什么是ajax跨域

ajax跨域的道理

ajax出现请求跨域缺点问题,重要原因就是因为浏览器的“同源策略”,可以参考

浏览器同源政策及其规避办法(阮一峰)

CORS请求道理

CORS是一个W3C标准,全称是"跨域资本共享"(Cross-origin resource sharing)。它许可浏览器向跨源办事器,发出XMLHttpRequest请求,大年夜而克服了AJAX只能同源应用的限制。

根本上今朝所有的浏览器都实现了CORS标准,其实今朝几乎所有的浏览器ajax请求都是基于CORS机制的,只不过可能日常平凡前端开辟人员并不关怀罢了(所以说其实如今CORS解决筹划主如果推敲后台该若何实现的问题)。

关于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)

凡是不应时知足膳绫擎两个前提,就属于非简单请求。

ajax跨域的表示

说实话,当初整顿过一篇文┞仿,然后作为了一个解决筹划,然则后来发明仍然有很多人照样不会。无奈只能耗时又耗力的调试。然而就算是我来分析,也只会根据对应的表示来断定是否是跨域,是以这一点是很重要的。

ajax请求时,如不雅存在跨域现象,并且没有进行解决,会有如下表示:(留意,是ajax请求,请不要说为什么http请求可以,而ajax不可,因为ajax是伴跟着跨域的,所以仅仅是http请求ok是不可的)

第一种现象:No 'Access-Control-Allow-Origin' header is present>

解决筹划: 后端许可options请求

第二种现象:No 'Access-Control-Allow-Origin' header is present>

这种现象和第一种有差别,这种情况下,后台办法许可OPTIONS请求,然则一些设备文件中(如安然设备),阻拦了OPTIONS请求,才会导致这个现象

这种现象和第一种和第二种有差别,这种情况下,办事器端后台许可OPTIONS请求,并且接口也许可OPTIONS请求,然则头部匹配时出现不匹配现象

比如origin头部检查不匹配,比瘸蕾了一些头部的支撑(如常见的X-Requested-With头部),然后办事端就会将response返回给前端,前端检测到这个后就触发XHR.onerror,导致前端控制台报错

解决筹划: 后端增长对应的头晨支撑

第四种现象:heade contains multiple values '*,*'

表示现象是,后台响应的http头部信罕见两个Access-Control-Allow-Origin:*

若何分析ajax跨域

留意:具体的后端跨域设备请看题纲地位。

说实话,这种问题出现的重要原因就是进行跨域设备的人不懂得道理,导致了反复设备,如:

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)