You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mantis BT跨域API请求预检错误问题(ColdFusion客户端开发)

解决Mantis BT API跨域Preflight 401错误的方案

看起来你遇到的是典型的CORS预请求(Preflight)认证拦截问题——浏览器在发送跨域的非简单请求前,会自动发起OPTIONS预请求,但Mantis BT的API可能对OPTIONS请求也要求认证,而预请求本身不会携带你的凭证(比如Token、Cookie),所以返回了401 Unauthorized。下面是一步步的解决方案:

1. 先明确核心问题:OPTIONS请求被认证拦截

同域请求时浏览器不会触发预请求,所以一切正常;但跨域(包括同域名不同端口)时,浏览器先发送OPTIONS请求确认服务器允许跨域,而如果Mantis BT的API没有配置放行OPTIONS请求,就会把它当成普通请求要求认证,导致401。

2. 配置服务器放行OPTIONS请求(以Apache为例)

如果你的Mantis BT部署在Apache上,修改项目根目录的.htaccess文件,添加以下规则:

# 处理OPTIONS预请求,直接返回200
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

# 设置CORS响应头
Header always set Access-Control-Allow-Origin "http://localhost:8500"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
Header always set Access-Control-Allow-Credentials "true"
  • Access-Control-Allow-Origin替换成你的ColdFusion应用域名(这里是http://localhost:8500),如果需要支持多个域名,可以用动态规则判断Origin请求头。
  • Access-Control-Allow-Credentials: true是必须的,如果你需要在跨域请求中携带Cookie或认证凭证。

3. 修改Mantis BT API入口,直接处理OPTIONS请求

如果服务器层面的配置不生效,可能需要直接修改Mantis BT的REST API入口文件(通常是rest/api.php),在文件最开头添加对OPTIONS请求的处理:

// 处理OPTIONS预请求,跳过认证
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    // 允许你的ColdFusion域名跨域
    header("Access-Control-Allow-Origin: http://localhost:8500");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
    header("Access-Control-Allow-Headers: Content-Type, Authorization");
    header("Access-Control-Allow-Credentials: true");
    exit(0); // 直接返回,不执行后续认证逻辑
}

这样就能确保OPTIONS请求不会进入Mantis BT的认证流程,直接返回200和正确的CORS头。

4. 确保ColdFusion端请求配置正确

在你的ColdFusion客户端代码中,确保跨域请求携带凭证:

  • 如果使用AJAX(比如jQuery):
$.ajax({
    url: "https://localhost/mantis/api/rest/users/me",
    type: "GET",
    xhrFields: {
        withCredentials: true // 携带Cookie/凭证
    },
    headers: {
        // 你的认证头,比如Authorization: "Bearer xxx"
    }
});
  • 如果使用ColdFusion的cfhttp标签:
<cfhttp url="https://localhost/mantis/api/rest/users/me" method="GET">
    <cfhttpparam type="header" name="Origin" value="http://localhost:8500">
    <cfhttpparam type="header" name="Authorization" value="Bearer YOUR_TOKEN">
    <!--- 如果需要携带Cookie,设置相关属性 --->
    <cfhttpparam type="header" name="Access-Control-Allow-Credentials" value="true">
</cfhttp>

5. 测试验证

用curl命令单独发送OPTIONS请求,检查响应是否正确:

curl -X OPTIONS https://localhost/mantis/api/rest/users/me -H "Origin: http://localhost:8500" -i

如果返回状态码200,并且包含正确的CORS头,说明配置生效了,再测试你的ColdFusion客户端请求应该就能正常工作。

内容的提问来源于stack exchange,提问作者Irimescu Cosmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:22:38