CORS:No' Access-Control-Allow-Origin'标题存在

时间:2017-12-21 18:41:29

标签: typescript java-ee jax-rs

当我从浏览器向我的servlet发出请求时,我收到此错误消息:

  

对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:3000'因此不允许访问。响应的HTTP状态代码为405.如果不透明的响应满足您的需求,请将请求的模式设置为“无人”状态'在禁用CORS的情况下获取资源。

在我的服务器中,我创建了此过滤器:

@Provider
public class CORSFilter implements ContainerResponseFilter
{

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException
    {   
        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
        responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        responseContext.getHeaders().add("Access-Control-Max-Age", "1209600");
    }

}

这是我的打字稿代码:

var oHeaders = {
      'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=minimal',
      "Odata-Version": "4.0",
      "Odata-MaxVersion": "4.0",
      "Prefer": "odata.allow-entityreferences"
    };

    var metadataRequest =
    {
      headers: oHeaders,
      requestUri: "http://localhost:8080/olingo/odata/$metadata",
      data: null
    };

    this.odata$ = Observable.create(o =>
      oData.read(
        metadataRequest,
        (data, response) => {
          o.next({ data, response });
          o.complete();
        },
        (error) => o.error(error),
        null
      )
    );

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的请求中缺少Origin标头。加上这个:

'Origin': 'http://example.com'

到你的javascript中的标题。我也会尝试添加内容类型标题:

'Content-Type': 'text/html; charset=utf-8'    // For example

如果没有一个解决问题,请在页面顶部手动添加接收PHP文件中的"Access-Control-Allow-Origin", "*",如下所示:

<?php
    header("Access-Control-Allow-Origin: *");
?>
相关问题