我最近一直在用java编写自己的Web服务器,因为我觉得有一个很好,昨天我偶然发现一个问题,我仍然没有解决。我的浏览器(ungoogled chromium)似乎向服务器发送了一些空请求或类似的东西。我实现了一个请求处理程序,它应该读取get请求并提取请求的ressource。它的工作原理是这样的:它以请求为例:“get/index.htmlhttp/1.1”并将其放入一个字符串为.split(“”)的数组中;方法数组如下所示:[“get”,“/index.html”,“http/1.1”],然后我将数组的第二个值(在本例中是“/index.html”)存储在一个变量中,然后我可以使用该变量定位请求的文件并将其提供给用户。出于调试目的,我还打印出用户发送的完整请求,如下所示
get,/index.html,http/1.1主机:,localhost:8080 connection:,保持活动缓存控制:,最大年龄=0升级不安全请求:,1 dnt:,1用户代理:,mozilla/5.0,(x11;,linux,x8664),applewebkit/537.36,(khtml,like,gecko),chrome/86.0.4240.111,safari/537.36 accept:,text/html,application/xhtml+xml,application/xml;q=0.9,图像/avif,图像/webp,图像/apng,/;q=0.8,申请/签字交换;v=b3;q=0.9秒获取站点:,同一来源秒获取模式:,导航秒获取目的地:,文档引用者:,http://localhost:8080/index.html接受编码:,gzip,,deflate,,br接受语言:,en-us,en;q=0.9
但是,有时请求只是空的,它会打印如下内容:[]然后抛出arrayindexoutofboundsexception。这是相当恼人的,因为它与linux“curl”命令(curl)配合得非常好localhost:8080/index.html)我已经尝试过使用wireshark和寻找一些奇怪的东西来解决这个问题,但是我没有一次尝试去解决这个问题。我希望我能为任何人提供足够的信息来帮助我解决这个问题,我已经努力解决了两天了,如果有人帮助我,我将不胜感激。谢谢
对不起,这是我的第一个问题
1条答案
按热度按时间f0ofjuux1#
首先验证
request
字符串。如果是空的,避免处理,不需要拆分。修剪将删除前导/尾随空格。然后验证split()方法的结果,并将逻辑放在该块中。如果条件不正确,请避免处理它。