FortiGate 60F REST API调用遇CORS错误,求绕过OPTIONS请求方案
问题:FortiGate API跨域OPTIONS请求401,想绕过直接发GET
我不是专业开发者,但懂React和Nest.js,现在在做一个React/Nest.js的Web应用,用来集中管理客户数据。其他功能都正常,唯独调用FortiGate API获取客户许可证数据和运行时间的时候出问题。
应用发请求前会先发送OPTIONS请求,但FortiGate好像没正确允许、识别或者处理这个请求。要说明的是,直接在浏览器里点请求URL能正常打开新标签显示JSON数据,说明GET请求本身是好的。
我已经在FortiGate里把“CORS Allow Origin”设成*了(之后会改),现在想找个能绕过OPTIONS请求直接发GET请求的办法。
错误详情
Request URL: https://FORTIGATEIP/api/v2/monitor/license/status Request Method: OPTIONS Status Code: 401 Unauthorized Remote Address: FORTIGATEIP Referrer Policy: strict-origin-when-cross-origin content-length: 503 content-security-policy: frame-ancestors 'self' content-type: text/html; charset=iso-8859-1 date: Thu, 20 Mar 2025 01:04:28 GMT x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block :authority: FORTIGATEIP :method: OPTIONS :path: /api/v2/monitor/license/status :scheme: https accept: */* accept-encoding: gzip, deflate, br, zstd accept-language: en-GB,en;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6 access-control-request-headers: authorization access-control-request-method: GET origin: http://localhost:3001 priority: u=1, i referer: http://localhost:3001/ sec-fetch-dest: empty sec-fetch-mode: cors sec-fetch-site: cross-site user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
解决办法
1. Nest.js代理转发(最稳妥)
既然你已经在用Nest.js,直接让后端当中间层转发请求,彻底避开浏览器跨域预检:
- 在Nest.js里新增一个接口,比如
/api/fortigate/client-license - 这个接口内部用
axios或者fetch向FortiGate API发送GET请求,带上需要的认证信息 - React前端直接请求自己的Nest.js后端,同域请求不会触发OPTIONS预检
2. 补全FortiGate的CORS配置
你只设置了CORS Allow Origin,但FortiGate的CORS规则还需要补充关键配置:
- 登录FortiGate控制台,找到CORS配置项
- 确保
Allowed Methods包含OPTIONS和GET - 确保
Allowed Headers包含authorization(你的OPTIONS预检请求明确要求了这个头) - 保存配置后重新测试,FortiGate应该能正确响应OPTIONS请求了
3. 规避预检触发(此方法不适用于你的场景)
浏览器发送OPTIONS预检的原因是请求带了自定义头(比如authorization),如果能去掉自定义头就不会触发,但FortiGate API需要认证,所以这条路走不通。
内容的提问来源于stack exchange,提问作者Goudemand Lucas
相关产品推荐
相关产品推荐

