浏览器向自己的服务器发送空请求
Browser sending Empty Request to own Server
我最近在 Java 中编写自己的 Web 服务器,因为我认为拥有一个很好,昨天我偶然发现了一个问题,但我仍然没有解决。
我的浏览器(未经谷歌搜索的 Chromium)似乎向服务器发送了一些空请求或类似的东西。
我已经实现了一个请求处理程序,它应该读取 GET 请求并提取请求的资源。
它是这样工作的:它以请求为例:“GET /index.html HTTP/1.1”并将其放入一个数组中,其中包含 String.split(" ");方法数组然后看起来像这样:["GET", "/index.html", "HTTP/1.1"]
然后我将数组的第二个值(在本例中为“/index.html”)存储在一个变量中,然后我可以使用该变量来定位请求的文件并将其提供给用户。
出于调试目的,我还打印出用户发送的完整请求,看起来像这样
GET, /index.html, HTTP/1.1
主持人:, localhost:8080
连接:,保持活动状态
缓存控制:, max-age=0
升级不安全请求:,1
DNT:, 1
User-Agent:, Mozilla/5.0, (X11;, Linux, x86_64), AppleWebKit/537.36, (KHTML, like, Gecko), Chrome/86.0.4240.111, Safari/537.36
接受:,text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site:, 同源
Sec-Fetch-Mode:, 导航
Sec-Fetch-Dest:, 文档
Referer:, http://localhost:8080/index.html
接受编码:, gzip, deflate, br
接受语言:, en-US,en;q=0.9
然而,有时请求只是空的,它打印的正是这个:[]
然后它显然会抛出 ArrayIndexOutOfBoundsException。
这很烦人,因为它与 Linux“curl”命令(curl localhost:8080/index.html)完美配合
我已经尝试通过使用 wireshark 并寻找一些奇怪的东西来解决这个问题,但是 none 我尝试解决这个问题的尝试很遗憾。
我希望我能为任何人提供足够的信息来帮助我解决我的问题,我已经尝试解决这个问题 2 天了,如果有人帮助我,我将非常感激。
谢谢
抱歉文本格式不佳,这是我的第一个 Whosebug 问题
if (!request.trim().isEmpty())
{
String[] requestArray= request.split(" ");
if (requestArray.length > 1)
{
//your logic as usual
}
else
{
log.error("The request has an incorrect format: "+request);
//...
}
}
/*else
{
log.error("The request is empty");
//...
} uncomment this only if needed, as you could get spammed by empty requests */
首先验证 request
字符串。如果为空,则避免处理,无需拆分。 Trim 将删除 leading/trailing 个空格。
然后验证 split() 方法的结果,并将您的逻辑放在该块中。如果条件不成立,则避免处理。
我最近在 Java 中编写自己的 Web 服务器,因为我认为拥有一个很好,昨天我偶然发现了一个问题,但我仍然没有解决。 我的浏览器(未经谷歌搜索的 Chromium)似乎向服务器发送了一些空请求或类似的东西。 我已经实现了一个请求处理程序,它应该读取 GET 请求并提取请求的资源。 它是这样工作的:它以请求为例:“GET /index.html HTTP/1.1”并将其放入一个数组中,其中包含 String.split(" ");方法数组然后看起来像这样:["GET", "/index.html", "HTTP/1.1"] 然后我将数组的第二个值(在本例中为“/index.html”)存储在一个变量中,然后我可以使用该变量来定位请求的文件并将其提供给用户。 出于调试目的,我还打印出用户发送的完整请求,看起来像这样
GET, /index.html, HTTP/1.1 主持人:, localhost:8080 连接:,保持活动状态 缓存控制:, max-age=0 升级不安全请求:,1 DNT:, 1 User-Agent:, Mozilla/5.0, (X11;, Linux, x86_64), AppleWebKit/537.36, (KHTML, like, Gecko), Chrome/86.0.4240.111, Safari/537.36 接受:,text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site:, 同源 Sec-Fetch-Mode:, 导航 Sec-Fetch-Dest:, 文档 Referer:, http://localhost:8080/index.html 接受编码:, gzip, deflate, br 接受语言:, en-US,en;q=0.9
然而,有时请求只是空的,它打印的正是这个:[] 然后它显然会抛出 ArrayIndexOutOfBoundsException。 这很烦人,因为它与 Linux“curl”命令(curl localhost:8080/index.html)完美配合 我已经尝试通过使用 wireshark 并寻找一些奇怪的东西来解决这个问题,但是 none 我尝试解决这个问题的尝试很遗憾。 我希望我能为任何人提供足够的信息来帮助我解决我的问题,我已经尝试解决这个问题 2 天了,如果有人帮助我,我将非常感激。 谢谢
抱歉文本格式不佳,这是我的第一个 Whosebug 问题
if (!request.trim().isEmpty())
{
String[] requestArray= request.split(" ");
if (requestArray.length > 1)
{
//your logic as usual
}
else
{
log.error("The request has an incorrect format: "+request);
//...
}
}
/*else
{
log.error("The request is empty");
//...
} uncomment this only if needed, as you could get spammed by empty requests */
首先验证 request
字符串。如果为空,则避免处理,无需拆分。 Trim 将删除 leading/trailing 个空格。
然后验证 split() 方法的结果,并将您的逻辑放在该块中。如果条件不成立,则避免处理。