V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
onnethy
V2EX  ›  Python

flask 内能做跨域转发吗?

  •  
  •   onnethy · 2022-07-18 10:33:15 +08:00 · 3346 次点击
    这是一个创建于 866 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教: 现在有个 flask 应用 应用 A: http://127.0.0.1:8080/ 应用 B: http://127.0.0.1:5004/

    路由先请求的到应用 A: http://127.0.0.1:8080/abc/qwe/ghj 判断请求的 url 中包含某个关键字,如:qwe

    就将请求转发到应用 B 的相同路由上: http://127.0.0.1:5004/abc/qwe/ghj

    这个能在 flask 中实现吗?

    12 条回复    2022-07-26 16:54:29 +08:00
    ranleng
        1
    ranleng  
       2022-07-18 10:41:56 +08:00
    https://medium.com/customorchestrator/simple-reverse-proxy-server-using-flask-936087ce0afb
    不知道是不是你想实现的,反代

    但这种不是应该用 nginx 之类的么
    onnethy
        2
    onnethy  
    OP
       2022-07-18 10:55:24 +08:00
    @ranleng 是的 最好的办法其实应该是用 nginx 来做反向代理 不过想知道在 flask 上能不能做
    onnethy
        3
    onnethy  
    OP
       2022-07-18 10:58:31 +08:00
    我大概自己 google 了一下,貌似 flask 自身不支持,这个是 http 的事情,只能通过 http 相关的库来解决
    mekingname
        4
    mekingname  
       2022-07-18 11:03:42 +08:00
    如果你的网页是做的后端渲染,Jinja2 渲染页面然后通过 Flask 返回,那么可以实现。你返回的时候做 302 跳转就可以了。

    但如果你的前端是用 Nginx 来托管的,似乎就没有办法纯通过 Flask 实现,需要 Js 来配合。
    tomczhen
        5
    tomczhen  
       2022-07-18 11:08:49 +08:00 via Android   ❤️ 3
    xy 问题。
    cz5424
        6
    cz5424  
       2022-07-18 13:59:19 +08:00
    可以做到
    cz5424
        7
    cz5424  
       2022-07-18 14:00:01 +08:00
    跨域是前端的概念(浏览器限制),后端没有这个问题
    Blake2Wang
        8
    Blake2Wang  
       2022-07-18 17:20:02 +08:00
    @cz5424 七楼正解,跨域是前端的概念,后端没有跨域这一说,只要你网络可达,用 flask 做规则请求分发或者简单的负载均衡转发又有何不可
    gausszhou
        9
    gausszhou  
       2022-07-18 18:19:33 +08:00
    Kobayashi
        10
    Kobayashi  
       2022-07-19 06:47:18 +08:00 via Android
    XY 问题,为什么非要在 Flask 中实现代理?

    方案一,在服务器如 Nginx 做分流。
    方案二,通过 WSGI 中间件将两个 app 实例组织到一起并分流,最终作为一个 app 运行起来,避免开两个服务。这样不经过网络,只是代码中转发请求到对应的路由函数。
    方案三,服务 A 向服务 B 做微服务请求。感觉是个烂方案。
    方案四,为服务 A 通过代码实现反代,转发请求到 B 。https://werkzeug.palletsprojects.com/en/2.1.x/middleware/http_proxy/

    方案一优先,避免两个 app 代码耦合。我自己的话绝对不会使用方案二,且避免使用方案四。
    ForNickey
        11
    ForNickey  
       2022-07-24 13:40:50 +08:00 via iPhone
    不就是个路由问题? Nginx 就应该跳了,不应进入代码
    onnethy
        12
    onnethy  
    OP
       2022-07-26 16:54:29 +08:00
    @Kobayashi 我的题意可能写的不是那么明确 就是请求是必须先导服务 A ,然后通过 A 应用判断请求路由包含某关键字 如果包含 则需要将请求转发到 B 应用上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:05 · PVG 07:05 · LAX 15:05 · JFK 18:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.