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

Jira API v2调用异常排查:FastAPI+Next.js架构下422及XSRF问题

Jira API代理请求错误修复方案

问题梳理

  • 核心报错:422 Unprocessable Entity(请求体格式不被Jira接受)
  • 服务器部署后:
    • CORS模式触发XSRF校验失败
    • no-cors模式返回422错误
  • 本地运行:添加X-Atlassian-Token: no-check后仍触发XSRF校验失败

具体修复步骤

1. 前端代码修正

no-cors模式会限制浏览器传递自定义头和读取响应内容,直接导致代理逻辑失效,必须改用默认的cors模式,同时确保请求体符合Jira API要求:

const response = await fetch("你的后端Proxy地址", {
    method: "POST",
    // 移除no-cors,默认即为cors模式
    headers: {
        "Content-Type": "application/json",
        "X-Atlassian-Token": "no-check",
        "Target": "https://你的域名.atlassian.net/rest/api/2/issue",
        Authorization: 'Basic 你的有效Token'
    },
    // 替换为Jira要求的创建Issue格式,示例如下
    body: JSON.stringify({
        fields: {
            project: { key: "你的项目Key" },
            summary: "测试Issue",
            description: "通过代理创建的测试Issue",
            issuetype: { name: "Task" }
        }
    }),
    redirect: 'follow'
})

2. 后端代理代码修正

原代码对请求体的处理逻辑错误,导致转发给Jira的请求体格式混乱,同时调整头信息过滤规则避免触发XSRF:

from fastapi import FastAPI, Body, Header, Request
from fastapi.middleware.cors import CORSMiddleware
import requests

app = FastAPI()

# 配置CORS,允许所有来源、方法和自定义头
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.post("/proxy")
async def proxy_post(request: Request, body: dict = Body(), target: str = Header(alias="Target")):
    # 过滤可能触发Jira XSRF校验的浏览器头,保留必要的认证和自定义头
    headers = {}
    for key, value in request.headers.items():
        lower_key = key.lower()
        if lower_key not in ['host', 'origin', 'referer']:
            headers[key] = value
    
    # 直接转发原始请求体字典,不要做字符串替换操作
    response = requests.post(target, json=body, headers=headers)
    
    try:
        return response.json()
    except:
        return {"detail": response.text, "status_code": response.status_code}

3. 关键错误点说明

  • 422错误根源:原前端请求体{test: "Test"}完全不符合Jira创建Issue的格式要求,必须严格按照Jira API文档构造请求体。
  • XSRF校验失败:通过代理转发时,需过滤浏览器的Origin/Referer头,否则Jira仍会触发XSRF校验,X-Atlassian-Token: no-check头需完整转发。
  • no-cors模式问题:该模式会限制请求头传递和响应内容读取,导致代理无法正常工作,绝对不能使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:36