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

React+Flask部署IIS遇POST方法不允许(405错误)求助

解决React+Flask部署IIS后POST请求405错误的问题

可能的原因及对应解决方法

1. 处理OPTIONS预检请求

跨域POST请求会先发OPTIONS预检请求,IIS默认可能未正确响应,导致后续POST被拦截。需在web.config中添加专门的OPTIONS处理规则,同时补充必要的请求头:

修改后的web.config配置:

<?xml version="1.0"?>
<configuration>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
            <!-- 补充允许的请求头,适配POST请求的Content-Type等参数 -->
            <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />
        </customHeaders>
    </httpProtocol>
    <rewrite>
        <rules>
            <!-- 优先处理OPTIONS预检请求,直接返回200 -->
            <rule name="Handle OPTIONS" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{REQUEST_METHOD}" pattern="OPTIONS" />
                </conditions>
                <action type="CustomResponse" statusCode="200" statusReason="OK" statusDescription="OK" />
            </rule>
            <!-- 保留原React路由重写规则 -->
            <rule name="React Routes" stopProcessing="true">
                <match url=".*" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                </conditions>
                <action type="Rewrite" url="/" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
</configuration>

2. 检查Flask端路由与CORS配置

即使IIS配置了CORS,Flask本身如果存在路由定义错误或未启用跨域支持,也会导致405:

  • 在Flask中安装并启用flask-cors:
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 全局启用跨域,或指定允许的域名范围

# 确保路由明确指定POST方法
@app.route('/api/your-endpoint', methods=['POST'])
def handle_post_request():
    # 编写POST请求处理逻辑
    return {"status": "success"}
  • 确认Flask路由的methods参数包含POST,默认路由仅支持GET请求,未指定会直接返回405。

3. 验证IIS模块安装情况

确保IIS已安装URL Rewrite和CORS模块:

  • 打开IIS管理器,查看服务器节点下的「模块」列表,确认两个模块存在;
  • 若未安装,通过服务器管理器添加Web服务器角色的对应功能,或下载官方安装包手动安装。

4. 核对API请求路径

确认React中POST请求的URL是否正确指向Flask API:

  • 检查路径是否匹配web.config中排除重写的^/(api)规则,避免API请求被错误重定向到React首页;
  • 注意Flask路由默认区分大小写,确保请求URL的大小写与路由定义一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:15:27