Python中如何将HTTPS重定向到HTTP协议

发现在一些 APP 上强行把 HTTP 协议的 URL 转换成 HTTPS,因为没有做 HTTPS 的认证,所以就打不开网站了。。。

在没有 HTTPS 的证书情况下,怎么把 HTTPS 的流量重定向回 HTTP 上
Python中如何将HTTPS重定向到HTTP协议

11 回复

降级攻击?


在Python中,将HTTPS请求重定向到HTTP通常是在Web服务器层面(如Nginx、Apache)或应用框架层面(如Django、Flask)处理的。如果你需要在Python代码层面实现,最常见的是在Web框架中使用重定向。下面以Flask和Django为例:

1. Flask示例 在Flask中,你可以使用redirect函数,并指定http://开头的URL。如果整个站点需要强制HTTP,可以在请求钩子中处理:

from flask import Flask, redirect, request

app = Flask(__name__)

@app.before_request
def redirect_https_to_http():
    if request.url.startswith('https://'):
        http_url = request.url.replace('https://', 'http://', 1)
        return redirect(http_url, code=301)

@app.route('/')
def home():
    return "这是HTTP版本"

if __name__ == '__main__':
    app.run(ssl_context='adhoc')  # 仅测试用,实际部署用生产服务器

2. Django示例 在Django中,可以编写中间件来实现:

# middleware.py
from django.http import HttpResponsePermanentRedirect

class RedirectHttpsToHttpMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.scheme == 'https':
            http_url = request.build_absolute_uri().replace('https://', 'http://', 1)
            return HttpResponsePermanentRedirect(http_url)
        return self.get_response(request)

# settings.py中添加:
# MIDDLEWARE = ['path.to.middleware.RedirectHttpsToHttpMiddleware', ...]

关键点说明:

  • 代码层面的重定向会返回301/302状态码,告诉浏览器重新用HTTP访问。
  • 实际生产环境中,更推荐在Web服务器(如Nginx)配置重定向,效率更高。
  • 注意:现代网站普遍使用HTTPS,反向操作(HTTP到HTTPS)更常见,请确保你确实有特殊需求要降级到HTTP。

总结:在应用代码中实现HTTPS到HTTP的重定向。

既然没有 HTTPS,这个应该实现不了吧。。重定向之前总是要连到一个什么服务器上的。
现在证书这么好弄,配个更好吧,Let’s Encrypt 之类的

cloudflare

用 Nginx 的 rewrite 试试?
shell<br>server {<br> listen 80;<br> server_name <a target="_blank" href="http://my.domain.com" rel="nofollow noopener">my.domain.com</a>;<br> [....]<br>}<br><br>server {<br> listen 443 ssl;<br> server_name <a target="_blank" href="http://my.domain.com" rel="nofollow noopener">my.domain.com</a>;<br> return 301 http://$server_name$request_uri;<br>}<br>
简化的 Nginx 配置文件,楼主可以参考一下

谢谢,我试下

没证书……就算加了跳转也会先提示证书错误吧,甚至如果没有部署监听 443,可能直接就打不开了

这是不可行的,首先这需要能通过 HTTPS 访问你的网站。

但是能通过 HTTPS 访问了,还转 HTTP 干啥?

ios 都必须 SSL 把。。

#首先, 要 https 能访问

然后可以这样

<br>if ( $scheme = https ){<br> return 301 http://$server_name$request_uri;<br>}<br>

打不开网站,应该是 nginx 没有监听 443 端口,按 4 楼说的补齐配置就好。

回到顶部