我有swagger (docker: swaggerapi/swagger-ui)运行在swagger.mydomain.com与两个定义的api服务器运行在a.mydomain.com和b.mydomain.com
a和b都是flask (python)服务器。由于在第四个子域名上提供web应用程序,a.mydomain.com已经设置了一段时间的CORS。这在子域和swagger中都能很好地工作。现在我为b.mydomain.com做了相同的CORS设置,但是没有成功。
两个服务器上的设置如下:
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app, origins=r"^.*(mydomain.com)")
正如我所说,这适用于a.mydomain.com,但不适用于b.mydomain.com。
Preflight看起来是一样的,除了url,状态码(分别为200和400)以及工作请求有一个额外的allow: POST, OPTIONS
标头。我看不出代码有什么区别来证明这个额外的头。
失败的预飞行请求需要150ms,是工作请求的两倍。
通过swagger执行请求提供了一个curl请求。在本地执行此操作会得到预期的输出,因此请求通常是正确的。
我不知道还能尝试什么。据我所知,a和b.m mydomain.com的设置完全相同。这里有什么问题吗?
a400是一个非常不寻常的飞行前响应代码。这表明端点可能被配置为期望请求中的特定请求体/有效负载或标头,而不管请求的HTTP方法是什么。但是,由于对于预飞行OPTIONS
请求,浏览器没有发送请求正文和额外的标头,服务器代码没有收到预期的内容。
对于这种情况,解决方法是确保您为该路由/端点配置了一个特定的、单独的OPTIONS
请求处理程序。