跨域请求 向和风天气发送请求 预检成功 真实请求失败

跨域请求 向和风天气发送请求 预检成功 真实请求失败 请求解答

img

img

img

为什么在预检请求前就先真实请求了 是不是这个问题 怎么解决呢?
因为我下面的请求都是向和风天气发送的 没问题

请求时,不能带多余的字段比如authorization,只能有content-type字段

img

img

不能带多余的字段

浏览器同源校验,你有没有发现你虽然预检了,但是请求头authorization你没有设置进去

img


你请求头有authorization就应该是这样,不然就有多余的字段了
Access-Control-Allow-Headers: 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

跨域了,配置一下代理

前端解决跨域问题(9个方法)_chenkhcn的博客-CSDN博客_前端解决跨域 什么是跨域?跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。这里说明一下,无法跨域是浏览器对于用户安全的考虑,如果自己写个没有同源策略的浏览器,完全不用考虑跨域问题了。是浏览器的锅,对。同源策略限制了一下行为:Cookie、LocalStorage 和 IndexDB 无法读取DOM 和 JS 对象无法获取Ajax请求发送不出去说的更直白一点,就是我们在前端使用ajax发送异步请求,如果这个请求的URL地址与当前 https://blog.csdn.net/Crazykun/article/details/118365808?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166735141316800186516634%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166735141316800186516634&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_click~default-2-118365808-null-null.nonecase&utm_term=%E5%89%8D%E7%AB%AF%E8%B7%A8%E5%9F%9F&spm=1018.2226.3001.4450

来学习一下 真是不错