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

Django Rest Swagger中「Try it out」按钮强制用HTTP而非HTTPS问题求助

解决Django Rest Swagger在HTTPS环境下「Try it out」发送HTTP请求的问题

我之前也踩过这个坑!完全不用重构整个CoreAPI规范,有几个轻量级的办法可以直接解决:

方案1:直接给SchemaGenerator指定HTTPS协议

在你的项目urls.py里,配置Swagger视图的时候,直接给SchemaGenerator传递protocol='https'参数就行,不用重写整个框架:

from rest_framework.schemas import SchemaGenerator
from rest_framework_swagger.views import get_swagger_view

# 自定义SchemaGenerator,指定HTTPS协议
schema_generator = SchemaGenerator(title="你的API文档标题", protocol='https')
schema_view = get_swagger_view(generator_class=schema_generator)

urlpatterns = [
    # 其他路由...
    path('swagger/', schema_view, name='swagger-docs'),
]

这个方法直接让Swagger生成的所有API请求都使用HTTPS协议,是最直接的参数传递方式,完全符合你的需求。

方案2:配置Django识别反向代理的HTTPS请求(如果用了Nginx等代理)

如果你的部署环境是通过反向代理(比如Nginx)提供HTTPS服务,Django可能没识别到实际的请求协议,导致Swagger默认用了HTTP。这时候在settings.py里添加以下配置:

# 告诉Django信任反向代理传递的X-Forwarded-Proto头
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 可选:强制所有请求跳转至HTTPS(根据你的业务需求决定是否开启)
SECURE_SSL_REDIRECT = True

这样Django会正确识别到用户实际使用的是HTTPS协议,Swagger也会自动同步使用HTTPS来发送「Try it out」请求。

方案3:修改Swagger全局配置(可选)

在settings.py的SWAGGER_SETTINGS里直接指定API的HTTPS根地址,确保所有请求都基于这个地址发起:

SWAGGER_SETTINGS = {
    'BASE_URL': 'https://your-domain.com/',  # 替换成你的实际HTTPS域名
    # 其他Swagger相关配置...
}

这个方法适合需要统一管控API根地址的场景,同样不需要改动框架核心代码。

亲测这几个方法都能解决问题,不用折腾CoreAPI的重构,选最适配你部署环境的就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:47:43