跨域请求 向和风天气发送请求 预检成功 真实请求失败 请求解答
为什么在预检请求前就先真实请求了 是不是这个问题 怎么解决呢?
因为我下面的请求都是向和风天气发送的 没问题
请求时,不能带多余的字段比如authorization,只能有content-type字段
不能带多余的字段
浏览器同源校验,你有没有发现你虽然预检了,但是请求头authorization你没有设置进去
如果是自己的后台可以把访问域加上,如果不可以的话,可以加一个后台,使用http的模拟程序发送请求来处理。以java为例,可以使用httpcliennt来实现
has been blocked by CORS policy : Request header filed authorization is not allowed by Access-Control-Headers in preflight response
已被CORS策略阻止:飞行前响应中的访问控制标头不允许请求标头字段授权
思路:
在跨域请求头中添加相应的允许字段,在Access-Control-Allow-Headers字段中添加自己自定义的字段
参考代码:
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
HttpServletResponse response = ctx.getResponse();
// 这些是对请求头的匹配
response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Methods","GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH");
// 这行代码添加相应的的允许字段
response.setHeader("Access-Control-Allow-Headers","authorization, content-type,token,identify");
response.setHeader("Access-Control-Expose-Headers","X-forwared-port, X-forwarded-host");
response.setHeader("Vary","Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())){
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(HttpStatus.OK.value());
ctx.set("isSuccess", true);
return null;
}
ctx.setSendZuulResponse(true);
ctx.setResponseStatusCode(HttpStatus.OK.value());
ctx.set("isSuccess", true);
return null;
}
参考链接:https://blog.csdn.net/m0_67401746/article/details/123420769
来学习一下 真是不错