跨源请求已阻止:同源策略禁止读取远程资源a

时间:2014-08-24 11:02:30

标签: java javascript response httpresponse

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

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

 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();
}

3 个答案:

答案 0 :(得分:0)

尝试将Access-Control-Allow-Origin用于具体域而不是*

答案 1 :(得分:0)

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

  

String uri = request.getScheme()+               request.getServerName();

     

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

答案 2 :(得分:0)

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可以访问该站点。

PereBarceló有一个很好的答案,你可以直接在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