Access-Control-Allow-Origin与跨域

简介: Access-Control-Allow-Origin与跨域

什么是跨域?

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题。怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域。通常来说,跨域分为以下几类:


url 说明 是否允许通讯

http://www.a.com/a.js

http://www.a.com/b.js 同一域名下 允许

http://www.a.com/lab/a.js

http://www.a.com/script/b.js 同一域名下不同文件夹 允许

http://www.a.com:8000/a.js

http://www.a.com/b.js 同一域名,不同端口 不允许

http://www.a.com/a.js

https://www.a.com/b.js 同一域名,不同协议 不允许

http://www.a.com/a.js

http://170.32.82.74/b.js 域名和域名对应ip 不允许

http://www.a.com/a.js

http://script.a.com/b.js 同一域名,不同二级域名 不允许

http://www.a.com/a.js

http://a.com/b.js 二级域名和一级域名 不允许(cookie这种情况下也不允许访问)

http://www.b.com/a.js

http://www.a.com/b.js 不同域名 不允许

跨域例子

此例子存在跨域问题,如需测试,修改地址即可。


<html>  

   <head>  

       <title>title</title>  

       <script src="http://code.jquery.com/jquery-1.7.1.min.js"/>

       <script>  

           $.ajax({  

               url:"http://map.oicqzone.com/gpsApi.php?lat=22.502412986242&lng=113.93832783228",  

               type:'GET',  

               success: function(data){  

                   $('body').append( "Name: " + data );  

               }  

           });  

       </script>  

   </head>  

   <body>    

   测试Ajax跨域问题

   </body>

</html>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

执行代付,会返回如下错误信息:


XMLHttpRequest cannot load http://map.oicqzone.com/gpsApi.php?lat=22.502412986242&lng=113.93832783228.

Origin http://localhost is not allowed by Access-Control-Allow-Origin. AJAX

1

2

解决跨域问题

需要在目标页面的response中包含Access-Control-Allow-Origin这个header信息,并且它的值里有请求的域名时,浏览器才允许拿到它页面的数据进行下一步处理。如:


Access-Control-Allow-Origin: http://www.a.com

1

2

如果它的值设为 * ,则表示谁都可以用,当然这在生产环境中是不被允许的。


Access-Control-Allow-Origin: *

1

与Spring集成使用

新建CORSInterceptor类,实现HandlerInterceptor接口,并重写preHandle方法,在此方法中为Header添加此信息:


public class CORSInterceptor implements HandlerInterceptor {


   @Override

   public boolean preHandle(HttpServletRequest request, HttpServletResponse response,

                            Object handler) throws Exception {


       response.addHeader("Access-Control-Allow-Origin", "http://www.a.com");


       return true;

   }


   @Override

   public void postHandle(HttpServletRequest request, HttpServletResponse response,

                          Object handler, ModelAndView modelAndView) throws Exception {


   }


   @Override

   public void afterCompletion(HttpServletRequest request, HttpServletResponse response,

                               Object handler, Exception ex) throws Exception {


   }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

然后在Spring配置文件中实例化此类:


<mvc:interceptor>

   <mvc:mapping path="/**"/>

   <bean class="com.test.CORSInterceptor"/>

</mvc:interceptor>

1

2

3

4

参考文章:

http://www.tuicool.com/articles/7FVnMz

http://my.oschina.net/BearCatYN/blog/509590

http://www.oicqzone.com/pc/2014083019610.html



目录
相关文章
|
Java 微服务 Spring
@EnableDiscoveryClient注解的作用
@EnableDiscoveryClient注解的作用 @EnableDiscoveryClient 及@EnableEurekaClient 类似,都是将一个微服务注册到Eureka Server(或其他 服务发现组件,例如Zookeeper、Consul等)
1878 0
|
2月前
|
API 定位技术 调度
实现精准定位的—坐标系经纬度转换API技术说明和行业应用
在地图服务、物流调度等应用中,多源地理位置数据因采用不同坐标系(如WGS84、GCJ02、BD09)需统一转换,以避免位置偏移影响路径规划与分析精度。本文介绍坐标转换背景、技术方案及Python调用示例,强调其在智慧交通与物流系统中的重要性。
389 0
|
JavaScript 数据格式
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
1740 0
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
|
安全 API 网络安全
API接口安全加固:应对黑客攻击的实战指南
**API安全摘要:** API成为黑客目标,攻击类型包括未授权访问、CSRF、DDoS、数据泄露和注入攻击。防御策略包括使用OAuth 2.0和JWT进行认证授权,防止CSRF攻击,限制请求速率,避免数据泄露,以及实施注入攻击防护。开发者应定期更新安全措施,确保API安全性。示例代码展示了Node.js中JWT认证的实现。
476 0
springCloud之服务调用RestTemplate、OpenFeign
springCloud之服务调用RestTemplate、OpenFeign
241 0
springboot创建并配置环境2 - 配置基础环境
springboot创建并配置环境2 - 配置基础环境
springboot创建并配置环境2 - 配置基础环境
|
前端开发 JavaScript API
proxy配置
proxy配置
295 0
|
JavaScript 前端开发
forEach中return会退出循环吗
forEach中return会退出循环吗
739 0
|
存储 数据库
elasticsearch 主键生成策略以及如何指定特定字段为id主键列
elasticsearch 主键生成策略以及如何指定特定字段为id主键列
1204 0
|
JavaScript 前端开发 安全
vue中解决ajax跨域问题(no “access-control-allow-origin”)
产生原因 跨域是是因为浏览器的同源策略限制,是浏览器的一种安全机制,服务端之间是不存在跨域的。 所谓同源指的是两个页面具有相同的协议、主机和端口,三者有任一不相同即会产生跨域。
577 0