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

如何在CherryPy原生Web服务器中实现HTTP自动跳转HTTPS

CherryPy 同进程HTTP转HTTPS实现方案

有符合要求的实现方案,可直接复用CherryPy原生的多服务挂载能力,无需启动额外独立进程、无需依赖第三方服务即可完成全量HTTP请求重定向到HTTPS。

实现逻辑

在你已有的HTTPS服务所在的同一CherryPy进程内,新增绑定80端口的服务实例,给该实例单独挂载全局重定向逻辑即可,不需要修改原有HTTPS业务代码,也不会和原有HTTPS服务逻辑冲突。

完整示例代码

import cherrypy
from cherrypy._cpserver import Server

# 全局重定向逻辑,自动保留原请求路径和查询参数
def http_to_https_redirect():
    # 提取请求域名,去掉端口部分
    host = cherrypy.request.headers.get('Host', '你的实际域名').split(':')[0]
    # 构造HTTPS目标地址
    target_url = f"https://{host}{cherrypy.request.path_info}"
    # 保留原请求的查询参数
    if cherrypy.request.query_string:
        target_url += f"?{cherrypy.request.query_string}"
    # 301永久重定向,对SEO更友好
    raise cherrypy.HTTPRedirect(target_url, status=301)

# --------------------------
# 这里保留你原有的HTTPS服务所有配置和代码,完全不需要修改
# 比如你原有挂载业务应用、配置HTTPS证书、启动HTTPS服务的代码
# --------------------------

# 新增HTTP 80端口的重定向服务
# 单独创建空应用用于重定向,和业务应用隔离
redirect_app = cherrypy.Application(None, '')
# 给重定向应用挂载全局前置钩子,所有请求优先走跳转逻辑
redirect_app.toolboxes['main'].hooks.attach('before_handler', http_to_https_redirect)

# 配置80端口服务
http_server = Server()
http_server.socket_host = "你的服务器绑定IP"
http_server.socket_port = 80
# 绑定重定向应用到80端口服务
http_server.wsgi_app = redirect_app
http_server.subscribe()

# 统一启动CherryPy引擎,HTTPS服务和80端口重定向服务会同时在同进程内运行
cherrypy.engine.start()
cherrypy.engine.block()

注意事项

  • 需确保服务器防火墙已开放80端口的公网访问权限
  • 如果你的HTTPS服务没有使用默认443端口,构造target_url时需要在域名后补充对应的端口,格式为https://{host}:HTTPS端口{路径}
  • 可根据需求修改重定向状态码,比如临时跳转用302即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:36:05