平时在web项目开发中会经常遇到一些跨域操作,但由于由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),会造成Origin null is not allowed by Access-Control-Allow-Origin”错误。目前经常用于跨域操作的两个解决方案: JSONP和CORS(Cross Origin Resource Sharing )
问题原因
这是由于浏览器的同源策略限制的缘故,简单来说,从HTML中发出XMLHttpRequest 请求时,Browser会做检查,如果发现Response中没有Access-Control-Allow-Origin Header或Access-Control-Allow-Origin Header Header的值与 HTML的 orgin 不同时,Browser会拒接绝该Response,Javascript就收不到该Response。 本地HTML的Origin是 null, 而Server端没有发出Access-Control-Allow-Origin Header Header给Browser, 所以会有了“Origin null is not allowed by Access-Control-Allow-Origin”错误。JSONP和CORS比较
- JSONP 只能用于GET请求,并且有一定的安全隐患,因为JSONP的实现机制实际上类似于注入脚本
- CORS Cross Origin Resource Sharing (CORS) W3C标准,专门用来解决跨域问题。支持各种形式的请求。由于这是比较新的标准,旧的浏览器会不支持。