您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发

【原】Access-Control-Allow-Origin重复跨域问题

不忘初心 不忘初心 2018-09-20 围观() 评论() 点赞() JAVA开发

简介:之前在备案期间,由于解析不了域名,所以就将域名全部代理到了本地,项目之间涉及到多个域名,碰到了字体文件跨域问题。以前一直用windows系统,本地nginx配置

之前在备案期间,由于解析不了域名,所以就将域名全部代理到了本地,项目之间涉及到多个域名,碰到了字体文件跨域问题。

Access-Control-Allow-Origin重复跨域问题

以前一直用windows系统,本地nginx配置也很好办的,header中加一个Access-Control-Allow-Origin就好了

location ~ .*\.(eot|ttf|woff|svg|otf|woff2)$ {
    if (!-e $request_filename) {
        proxy_pass http://cdn;
    }
    proxy_redirect off;
    proxy_set_header Host $host;

    add_header Access-Control-Allow-Origin *;
}

但是现在公司配置的mac电脑,使用的是Charles(一个抓包工具,兼代理),这个工具由于不熟悉,不知道如何配置跨域,所以就临时在代码里面加了一个拦截器Interceptor来处理

package com.wolffy.cdn.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 使用本地代理时,在这里处理跨域,线上使用nginx处理跨域
 * Created by SongFei on 2018/9/12.
 */
public class CorsInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.setHeader("Access-Control-Allow-Origin", "*");
        // response.setHeader("Access-Control-Allow-Credentials", "true");
        // response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        // response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, " + "X-CSRF-TOKEN");
        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 {

    }

}

这里使用过滤器Filter也是可以的,不一定非要拦截器。

本地使用图简单,就直接用 *,如果大家在线上也用代码来处理的话,那可以从请求头中解析出指定域名,再放到Access-Control-Allow-Origin响应头中。

等到备案通过之后,代码忘记改回去了,线上访问的时候一直报错“The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.”,错误提示的很好看懂,有多次跨域,但是只有一次是允许的,此时才猛然想起来,代码里面的跨域设置和nginx中的跨域设置重复。

既然原因知道了,那我们直接移除掉一个就行了,我这里选择移除代码中的跨域设置,毕竟这些工作还是让nginx来做比较方便和安全。

ajax跨域重复跨域跨域

看完文章,有任何疑问,请加入群聊一起交流!!!

很赞哦! ()

文章评论

  • 请先说点什么
    人参与,条评论

请使用电脑浏览器访问本页面,使用手机浏览器访问本页面会导致下载文件异常!!!

雨落无影

关注上方公众号,回复关键字【下载】获取下载码

用完即删,每次下载需重新获取下载码

若出现下载不了的情况,请及时联系站长进行解决

站点信息

  • 网站程序:spring + freemarker
  • 主题模板:《今夕何夕》
  • 文章统计:篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们