【问题标题】:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource a跨域请求被阻止:同源策略不允许读取远程资源
【发布时间】:2014-10-17 17:23:40
【问题描述】:

我在我的代码的响应中编写了一个字体文件。响应代码工作正常。但是当我从它的 url 调用该代码时,我收到以下错误: “跨域请求被阻止:同源策略不允许读取远程资源” 它会自动关闭我的服务器。

但有时相同的代码可以工作......但最长时间它不起作用。 我正在使用带有 netbeans 7 和 jdk1.6 包的 tomcat 7 这是我的代码的一部分。 希望我能得到答案,因为我真的很困惑要搜索什么。

 File file = new File(SubsettedSavedPath);
byte[] buffer = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(buffer, 0, buffer.length);
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Access-Control-    Allow-Origin,FTPConectionClosed,CopyStreamException,Access-Control-Allow-Methods,Access-Control-Max-Age");
response.setContentType("font/ttf");
System.out.println("File Size"+file.length());


response.setContentLength((int) file.length());
OutputStream os = response.getOutputStream();

try {

os.write(buffer);

os.flush();
} catch (Exception excp) {


excp.printStackTrace();
} finally {
os.close();
fis.close();
}

【问题讨论】:

    标签: java javascript response httpresponse


    【解决方案1】:

    尝试将Access-Control-Allow-Origin 与具体域一起使用,而不是*。

    【讨论】:

      【解决方案2】:

      使用等于请求域名的Access-Control-Allow-Origin 值而不是*。

      字符串 uri = request.getScheme() + request.getServerName();

      response.setHeader("Access-Control-Allow-Origin", uri);

      【讨论】:

        【解决方案3】:

        Tomcat 7 有一个用于设置 cors 过滤器的集成库。您无需导入任何库即可使用以下功能:

        只需在 web.xml 中设置允许的“cors.allowed.origins”网站。您可以放置​​多个逗号分隔值。

        <filter>
            <filter-name>CorsFilter</filter-name>
            <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
            <init-param>
                <param-name>cors.allowed.origins</param-name>
                <param-value>http://www.the-target-domain.com</param-value>
            </init-param>       
        </filter>
        <filter-mapping>
            <filter-name>CorsFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        

        在 JavaScript 中,我对“http://www.the-target-domain.com/...”进行 GET 调用。

        通过在 web.xml 配置中设置 CorsFilter,我向 Firefox 保证 JavaScript 可以访问该站点。

        Pere Barceló 有一个很好的答案,您可以直接在 Apache Tomcat 中设置 http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter

        类似的问题: Set CORS header in Tomcat Access-Control-Allow-Origin: * in tomcat

        【讨论】:

          猜你喜欢
          • 2021-04-04
          • 2015-07-22
          • 2018-04-20
          • 2014-07-20
          • 1970-01-01
          • 2019-07-12
          相关资源
          最近更新 更多