【问题标题】:HTTP Response code when there is a error in TCP layerTCP 层出错时的 HTTP 响应代码
【发布时间】:2021-05-19 01:11:33
【问题描述】:

我有一个 python 函数,它在服务器上执行 HTTP 调用以执行业务逻辑。使用以下library通过重试机制实现python函数中对服务器的Http调用。该库有助于根据 'status_forcelist' 中传递的 Http 状态代码重试 http 请求。我有点不确定 HTTP stats 代码是否存在 TCP 错误,以及由于网络层中的错误可以预期的可能的 http 状态代码,可以额外添加到 'status_forcelist' 列表。

如果没有收到Http状态码但抛出异常,这种情况下retiaries应该如何处理

【问题讨论】:

    标签: python http tcp


    【解决方案1】:

    事实上,在网络堆栈中,每个协议都有一定程度的责任,更高的协议只是假设更低的级别可以完成他们的工作。例如,TCP 保证以正确的顺序接收所有数据包,但并不真正关心数据包的内容:较低级别的协议(以太网上的 HDLC)应该已经处理了它。事实上,要么 TCP 数据包在较低级别是正确的,要么它不会被传递,并且 TCP 的重新发送部分会要求发送者再次发送它。如果无法恢复,TCP 连接将被中止。

    在更高级别 (HTTP) 上,它会给出连接或读取错误。这些由 urllib3 模块明确处理,它允许程序员决定每次连接、读取或协议错误(和/或总错误)的重试次数以及连接和读取(或总)超时。

    【讨论】:

    • 谢谢你的详细解释,对理解很有帮助。您能否通过在库中设置标志total 来确认我是否正确理解,例如retryConfig = Retry(total=3, backoff_factor=10, status_forcelist=[502],raise_on_status=False, allowed_methods = frozenset(['POST'])) 将重试status_forcelist 中提到的连接级别错误和http 状态响应
    猜你喜欢
    • 2017-08-17
    • 2020-11-12
    • 2017-12-06
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多