它是反向代理吗

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

按模型,is_reverse("server") 交回什么?

贯穿本节的反向代理模型(判题机不联网、也没 nginx,这是它的确定模型):route(路径, 表) 按前缀把路径转给对应后端(表是 [(前缀, 后端名)],先到先匹配,都不中走 web);strip_prefix(路径, 前缀) 把命中的前缀去掉再转(空了给 /);forward(路径, 表, 后端) 交回选中后端的地址;is_reverse(部署方)=服务端部署的才是反向代理;backend_count/upstream_list 数后端个数 / 列后端名。

# 反向代理坐在后端前面,替客户端把请求转发给后端、再把响应带回来;客户端只认代理
def is_reverse(deployed_by):
    # 反向代理由服务端部署(正向代理由客户端一侧部署)
    return deployed_by == "server"


def route(path, table):
    # 按前缀把路径转发到对应后端(table: [(前缀, 后端名)],先到先匹配);都不匹配走 "web"
    for prefix, name in table:
        if path.startswith(prefix):
            return name
    return "web"


def strip_prefix(path, prefix):
    # proxy_pass 常把匹配到的前缀去掉再转给后端;去不掉就原样
    if path.startswith(prefix):
        return path[len(prefix):] or "/"
    return path


def forward(path, table, backends):
    # 转发:先按路径选后端名,再交回该后端地址
    return backends[route(path, table)]


def backend_count(backends):
    return len(backends)


def upstream_list(backends):
    # upstream 里配了哪些后端名(按加入序)
    return list(backends.keys())

print(is_reverse("server"))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论