当前位置: 首页 > 知识库问答 >
问题:

HTTP代理如何知道何时关闭连接

白光耀
2023-03-14

此问题仅适用于HTTPS请求。

让我们将问题分为 3 个方面。

  1. 起源。这是用户发送HTTPS请求
  2. 代理。这将处理请求,将其转发到远程设备,反之亦然
  3. 遥控器。这是请求应该到达的服务器

当您通过代理发出HTTPS请求时,会发生以下情况:

>

  • Origin使用HTTP发送(未加密):

    CONNECT remote.url:443 HTTP/1.1 ...

    代理回复:

    HTTP/1.1 200连接已建立

    Origin向代理发送完全加密的请求:

    C i J, H; U*#cR{g吴Y

    代理接受它,并将其转发到html" target="_blank">远程:

    C i J, H; U*#cR{g吴Y

    远程回复,它也是完全加密的:

    cR￾{gリ ᄋ�ᅣ゙WuᅠY

    代理将此传递到原点:

    cR￾{gリ ᄋ�ᅣ゙WuᅠY

    Origin知道如何解密这个,它很高兴收到响应。

    问题是,代理如何知道响应被终止?。代理只是读取流,并不知道它的结束。此外,它不能读取HTTP头来知道长度,因为它们是加密的。

    我在Java面临这个问题,我不知道如何处理。

  • 共有2个答案

    韩晋
    2023-03-14

    http连接只不过是两个套接字之间的网络连接。要结束 HTTP 连接 socket.close(),需要调用。普通 HTTP 连接(非管道连接)使用此方法

    有多种场景可供选择。让我们举一个简单的例子来模拟您的场景。

    • 客户端调用代理服务器。这是客户端之间的HTTP连接

    因此,两个HTTP连接都被终止了。而且它不需要代理来读取加密数据。

    施阎宝
    2023-03-14

    加密的通信从客户端传输到服务器,代理是不知道的。然而,字节流遍历两个TCP连接:一个是从客户端到代理,另一个是从代理到服务器。

    如果其中一个被终止,代理可以关闭另一个。终止由网络堆栈指示,代理仅将该消息转发到另一个连接。

    因此,如果客户端挂断,代理会注意到客户端挂断并终止其与服务器的连接。在服务器端注意到客户端的终止。如果服务器挂断,另一个方向也会发生同样的情况。

     类似资料:
    • 在请求完成后,应该如何告诉OkHttp关闭与HTTP服务器的连接? 假设我使用以下代码向google发出请求。通用域名格式 通过使用“连接:关闭”,我能够让远程服务器发送FIN(如果我不这样做,远程服务器只是挂起等待新请求)。尽管如此,在客户端没有产生FIN,并且连接保持半打开显然有一段不确定的时间。

    • 问题内容: 我正在实现一个小型TCP服务器。我怎么知道我的一位客户是否关门?我应该只是尝试读取或写入并检查是否为零? 问题答案: 该线程“ 的最佳方式可靠地检测TCP连接被关闭 ”,使用了“ ”(也可见于或或许多其他情况下): 为了检测超时,建议: 更新2019:tuxedo25在评论中提到: 在Go 1.7+中,零字节读取立即返回,并且永远不会返回错误。 您必须读取至少一个字节。 参见commi

    • 问题内容: 我试图了解哪些是应用程序的“物理”限制。 在客户端: 在服务器端: 在OSX中达到文件限制(256)时,统计信息如下 让我感到困惑的是: 如果我强行关闭连接(这是我想对客户端执行的操作,为什么我仍在使用文件句柄(因此达到文件限制),请执行以下操作:编辑:添加延迟似乎使服务器可以保持呼吸并且永远不会达到文件限制)? 有没有一种方法可以完全关闭套接字,以便可以确定很少达到文件限制(我知道可

    • 根据IBM文档:清除策略指定在检测到陈旧连接或致命连接错误时如何清除连接。有效值为EntirePool和FailingConnectionOnly。 问题:服务器如何/何时知道连接已过时?它是否会尽快(立即)清洗池任何连接都会过时,或者按照收获时间发生? 假设收割时间为180秒。假设收割线程上次在下午3:05运行,连接在下午3:06失效,服务器是在下午3:06自己清除池,还是只在下午3:08清除池

    • 问题内容: 我在使用HTTP代理(仅允许http连接)的网络的笔记本电脑(Ubuntu)上。 当我将svn用作诸如“ http:// .....”之类的url时,一切都很酷(google chrome存储库工作完美),但是现在我需要使用svn:// …从服务器进行svn了。我看到连接被拒绝。 我已经在/ etc / subversion / servers中设置了代理配置,但这没有帮助。 有人有意