gpt4 book ai didi

c++ - Google Chrome浏览器在访问网站时发送第二个长度为0的请求吗?

转载 作者:行者123 更新时间:2023-12-02 10:32:24 25 4
gpt4 key购买 nike

我正在开发在Nintendo Switch上运行的小型轻量级HTTP Server,因此在类似UNIX的系统(freeBSD内核)上运行。我使用原始的socket()bind()listen()等方法构建了一个不带任何库的HTTP服务器。

我注意到,当我使用Google Chrome打开服务器的地址时,它首先发送带有所有 header 的标准HTTP GET请求,然后发出第二个0字节长的请求(可能甚至没有请求,它只会打开)与服务器建立第二个连接,然后什么也不发送)。

由于我的实现,这不容易处理,因为我使用recv()从连接中接收了所有数据,会阻止直到读取所有数据。因此,在Chrome发送的第二个请求中,它将阻止“永远”(存在超时),因为Chrome不会发送任何数据。

这是Chrome的已知错误,我有什么方法可以检测和/或阻止这种情况的发生?我在Firefox和Edge上进行了测试,这些浏览器没有打开第二个套接字。

谢谢!

最佳答案

解决方案比我想象的要容易。您可以忽略第二个套接字,并将MSG_DONTWAIT作为标志传递给recv()调用。有关here的更多信息。

另外,我的问题是我正在对没有URL的所有请求返回HTTP 501响应。对于第二个长度为0的套接字,显然确实弄坏了它并使Chrome显示错误。我添加了处理,当长度为0的请求时,它不会返回错误。它只会默默关闭它。

关于c++ - Google Chrome浏览器在访问网站时发送第二个长度为0的请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61783138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com