我需要从我的反应应用程序访问远程托管的web api。在服务器端,我在下面做了以允许跨域通信:
import javax.ws.rs.core.Response;
import com.mypackage.ResponseDto;
@Override
public Response fetch(String id, String env) throws ServiceException
{
ResponseDto res = new ResponseDto();
res = updateResp(id, env); // not important
return Response.ok().header("Access-Control-Allow-Origin","*").entity(res).build();
}
当我从邮递员检查时,我可以看到正确设置的cors标题如下:
access-control-allow-origin →*
content-type →application/json
date →Wed, 16 Aug 2017 11:07:16 GMT
server →web
transfer-encoding →chunked
但是当我从react app访问同一个端点时,浏览器开始抱怨以下错误:
无法加载Fetch API http://myservices.com/myservice-app/services/。回应 预检请求未通过访问控制检查:否 '访问控制允许来源'标题出现在请求的上 资源。起源' http://localhost:3000'因此是不允许的 访问。如果不透明的响应满足您的需求,请设置请求 模式为' no-cors'获取已禁用CORS的资源
有什么想法在这里发生?
编辑#1 以下更改仍然看到相同的错误:
return Response.ok()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.entity(response).build();
答案 0 :(得分:0)
我对您使用的Java库没有任何经验,但是这样的东西必须有效:
@Override
public Response options() throws ServiceException
{
ResponseDto res = new ResponseDto();
return Response.ok().header("Access-Control-Allow-Origin","*").entity(res).build();
}
如果图书馆的工作方式与我认为的一样,则会在您发送到服务器的每个200 OK
请求中发送OPTIONS
,标题为Access-Control-Allow-Origin = *
。这就是你应该瞄准的目标。