BurpSuite连接浏览器代理无法打开部分网页问题

本人写这篇记录时,尚未熟悉bp基本操作,仅记录该次探索bp功能解决问题的心路历程。

发现并解决问题

最近两天为能打开尘封已久的bp,抓包做题,卸载了jdk20,下了jdk1.8(高版本jdk破解用的java命令完全不能执行,挣扎了一天尝试找功能相同的jdk20代码,以失败告终),一顿操作后发现居然有的页面还是无法打开(不使用代理可以正常打开),尤其是靶机页面,首先报错显示连接重置connection reset,等我根据网上找的资料把bp设置的时间限制判断全部删光之后,又报错连接超时移除服务Timeout in communication with remote server
打不开的网页有:有道翻译(fanyi.youdao.com)、至少两个CTF练习网站的靶机网页等。

下图为连接重置报错

下图为删除了时间限制判断

下图为连接超时移除服务报错

不理解为什么有的页面能访问,有的就不行,而且这些不能访问的页面也没有什么共同特点,于是我决定抓包再分析一下。

下图为历史抓包结果(抓包修改内容的时候没有截图,直接翻历史记录了)

发现请求包中有一行connection: close,连接关闭看上去不是个好词,我把它删除然后发出了请求包,结果发现页面正常显示了,而且反应很快。

删除connection: close后接收到的数据包如下图

接收到的数据包connection的设置是keep-alive。

既然很有可能是connection: close的问题,我又抓包测试了某CTF题目练习网站的其他web靶机页面,只要删除请求包中的这一行,网页就能正常访问了。但是问题又来了,我总不能请求一次页面手动改一次请求包吧。

为了搞清原理,彻底解决问题,我在网上查找请求包中connection设置为close的相关资料,发现报错的问题可能是bp的设置导致的,bp的设置可以对请求包进行修改(截至2024.4.30还没有彻底搞清楚原理,不知道到底是原本请求包中就有connection: close还是bp加上去的)

涉及到的选项设置如下

只要取消勾选红框内的选项,就相当于将connection设置为keep-alive,原本报错超时的网页就可以正常打开了。
在此之后又有一个发现,connection设置为keep-alive后,原本能打开的网站(connection: close能打开的网站)访问需要的时间显著变长,超级慢,但是仍然可以打开。


解决方法总结

在使用bp代理的时候,如果遇到只有部分网页报错显示连接重置(connection reset)或者连接超时移除服务(Timeout in communication with remote server),可以尝试在bp代理模块(Proxy)的选项设置(Options)中,取消勾选“将连接关闭设置为接收请求”(Set response header "Connection: close")。
如果有页面加载时间过长,可以尝试勾选“将连接关闭设置为接收请求”(Set response header "Connection: close")。


关于Connection的两种选项对HTTP请求的影响

HTTP 协议中的 Connection 头字段用于决定客户端和服务器之间的连接是否应该保持打开状态。在发送 HTTP 请求时,Connection 头字段可以设置为 close 或 keep-alive,这两个选项决定了连接在请求处理后的行为。

  1. Connection: close

    • 当请求头中包含 Connection: close 时,它告诉服务器在完成响应后应该立即关闭这个连接。这意味着每次请求都会建立一个新的连接,并在收到响应后立即断开这个连接。

    • 使用 close 可以确保每个请求都拥有自己独立的连接,收到相应后立即断开的特点在某些特定场景下有好处,比如希望服务器或客户端能确切知道连接何时结束。

    • 适用于只需要单次请求或不需要长时间保持连接的场景。

  2. Connection: keep-alive

    • 当请求头中包含 Connection: keep-alive 时,它告诉服务器在响应后不要关闭连接,以便后续可以在同一个连接上发送更多的请求。这样可以避免频繁地建立和关闭连接,从而提高性能。

    • 使用 keep-alive 机制,多个请求可以复用一个 TCP 连接,无需为每个请求都新建一个连接。这减少了延迟,更有效地利用了网络资源。
      它们的作用和原理:

    • 适用于需要频繁与服务器交互或希望减少连接建立和关闭开销的场景。

HTTP/1.1 默认使用 keep-alive,如果请求头中没有明确指定 Connection 字段,那么默认就会保持连接开放。但是并非所有服务器和客户端都支持持久连接,在这种情况下,即使指定了 keep-alive,连接也可能在一次请求后被关闭。

posted @ 2024-04-30 17:16  skdtxdy  阅读(1473)  评论(0编辑  收藏  举报