CORS:没有'Access-Control-Allow-Origin'标题

问题描述 投票:0回答:1

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

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,'http://localhost:3000'原产地不允许进入。响应具有HTTP状态代码405.如果不透明响应满足您的需要,请将请求的模式设置为“no-cors”以获取禁用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
      )
    );

有任何想法吗?

typescript java-ee jax-rs
1个回答
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: *");
?>
© www.soinside.com 2019 - 2024. All rights reserved.