CORS:没有'Access-Control-Allow-Origin'标题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CORS:没有'Access-Control-Allow-Origin'标题相关的知识,希望对你有一定的参考价值。
当我从浏览器向我的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
)
);
有任何想法吗?
答案
您在请求中缺少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: *");
?>
以上是关于CORS:没有'Access-Control-Allow-Origin'标题的主要内容,如果未能解决你的问题,请参考以下文章
CORS:没有'Access-Control-Allow-Origin'标题
Zend Framework 2 - 如何允许杀死CORS策略:没有'Access-Control-Allow-Origin'
CORS:在请求的资源上没有'Access-Control-Allow-Origin'标头。角,净芯