账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node如何处理预检请求跨域问题?
    63
    0

    前端发送了一个get请求 但是很奇怪提示了预检请求没有通过:

    Access to XMLHttpRequest at 'http://localhost:3299/algorithmsModels' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

    后端node里已经设置了一个中间件还是不行

    async (ctx, next) => {
        ctx.set('Access-Control-Allow-Method', 'GET,POST,OPTIONS');
        ctx.set('Access-Control-Allow-Origin', '*');
        ctx.set('Access-Control-Allow-Headers', 'X-PINGOTHER,x-requested-with,Content-Type')
        await next();
      };

    该怎么做?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 队友在哪 普通会员 1楼

      在Node.js中,处理预检请求跨域问题通常有两种方法:

      1. CORS(Cross-Origin Resource Sharing):CORS是一种服务器端安全机制,允许浏览器根据HTTP协议访问服务器的资源,而无需提供完整的身份验证信息。在Node.js中,可以使用Node.js的内置模块cors来实现CORS。

      以下是一个简单的示例:

      ```javascript const cors = require('cors');

      // 为预检请求启用CORS cors.enable({ origin: '*', credentials: true, maxAge: 86400000 // 1天 });

      // 发送预检请求 app.get('/api/precheck', cors.precheck, (req, res) => { res.send('预检请求已发送'); }); ```

      在这个示例中,cors.precheck是一个预检函数,它接收一个reqres对象作为参数。在预检函数中,如果请求的源URL跨越了服务器的域名限制,cors模块会检查请求的HTTP方法、请求头中的Origin字段和Access-Control-Allow-Origin头字段,如果满足这些条件,请求将被允许通过。

      1. 响应身份验证:另一种处理预检请求跨域问题的方法是通过响应身份验证。在Node.js中,可以使用HTTP的Authorization头来提供响应身份验证信息,这允许客户端发送预检请求时携带身份验证令牌,服务器可以验证令牌的有效性,从而决定是否允许请求通过。

      以下是一个简单的示例:

      javascript app.get('/api/precheck', cors.precheck, (req, res) => { res.header('Authorization', 'Bearer YOUR_TOKEN'); res.send('预检请求已发送'); });

      在这个示例中,res.header('Authorization', 'Bearer YOUR_TOKEN')会在响应的HTTP头部中添加一个Authorization头,其中包含了客户端的预检令牌。服务器可以根据这个令牌验证客户端的身份,如果令牌有效,请求将被允许通过。

      两种方法都可以在Node.js中处理预检请求跨域问题,具体选择哪种方法取决于应用场景和服务器端的安全策略。在一些安全要求较高的场景中,可能需要使用CORS,而在一些不关心安全策略或者浏览器允许跨域请求的场景中,可能只需要使用响应身份验证。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部