当我从浏览器向我的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
)
);
有什么想法吗?
答案 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: *");
?>