跨域请求问题

通俗说就是从baidu.com请求google.com,从一个域名发起请求访问另一个域名的api接口

 

解决方案:

1、 ajax中提供属性如: dataType : 'jsonp' 没有测试过

 

2、如果用servlet实现的,在需要跨域请求的对应servlet配置如下信息:

 1 <servlet-name>abc</servlet-name>
 2 
 3         <servlet-class>xxx.xx.xx.xx.pressAgencyCtrl</servlet-class>
 4 
 5         <init-param>
 6 
 7             <description>跨域访问</description>
 8 
 9             <param-name>accessControlAllowOrigin</param-name>
10 
11             <param-value>*</param-value>
12 
13         </init-param>
14 
15 </servlet>
16 
17 <servlet-mapping>
18 
19         <servlet-name>abc</servlet-name>
20 
21         <url-pattern>/kyqq</url-pattern>
22 
23 </servlet-mapping>

 

 

3、如果使用了springmvc等框架,实现filter

 1 public class kuayu implements Filter {
 2   @Override
 3   public void init(FilterConfig config) throws ServletException{}
 4 
 5   @Override
 6   public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain){
 8     HttpServletResponse httpResponse = (HttpServletResponse) response;
 9     HttpResponse.setHeader("Access-Control-Allow-Origin","*");
10     httpResponse.setHeader("Access-Control-Allow-Headers","Authentication");
11     chain.doFilter(request,httpResponse);
12   }
13 
14   @Override
15   public void destroy(){}16 }

 

 web.xml配置

 1 <filter>
 2 
 3     <filter-name>kuayu</filter-name>
 4 
 5     <filter-class>xxx.xx.kuayu</filter-class>
 6 
 7 </filter>
 8 
 9 <filter-mapping>
10 
11     <filter-name>kuayu</filter-name>
12 
13     <url-pattern>/*</url-pattern>
14 
15 </filter-mapping>

 

 

第二种方法直接使用springmvc提供的注解在controller控制器中,在controller注解上添加@CrossOrigin注解

 

4、在Nginx中配置

nginx.conf:

http{

.........

add_header Access-Control-Allow-Origin *;

add_header Access-Control-Allow-Headers X-Requested-With;

add_header Access-Control-Allow-Method GET,POST,OPTIONS;

..........

}

Access-Control-Allow-Origin: 允许跨域访问的域,可以是一个域的列表,也可以是通配符"*"。这里要注意Origin规则只对域名有效,并不会对子目录有效。即http://foo.example/subdir/ 是无效的。但是不同子域名需要分开设置,这里的规则可以参照同源策略

Access-Control-Allow-Credentials: 是否允许请求带有验证信息,XMLHttpRequest请求的withCredentials标志设置为true时,认证通过,浏览器才将数据给脚本程序。

Access-Control-Expose-Headers: 允许脚本访问的返回头,请求成功后,脚本可以在XMLHttpRequest中访问这些头的信息

Access-Control-Max-Age: 缓存此次请求的秒数。在这个时间范围内,所有同类型的请求都将不再发送预检请求而是直接使用此次返回的头作为判断依据,非常有用,大幅优化请求次数

Access-Control-Allow-Methods: 允许使用的请求方法,以逗号隔开

Access-Control-Allow-Headers: 允许自定义的头部,以逗号隔开,大小写不敏感

转载于:https://www.cnblogs.com/codechange/p/8331026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值