谷歌浏览器在访问网站时发送第二个 0 长度的请求?
Google Chrome sending a second, 0-length request when visiting a website?
我正在开发一个运行在Nintendo Switch上的小型轻量级HTTP服务器,因此在类UNIX系统(freeBSD内核(上运行。我使用原始socket()
、bind()
、listen()
等方法构建了一个没有任何库的HTTP服务器。
我注意到,当我使用 Google Chrome 打开服务器的地址时,它首先发送一个包含所有标头的标准 HTTP GET 请求,然后发送第二个 0 字节长的请求(可能甚至不是请求,它只是打开与服务器的第二个连接,然后什么也不发送(。
由于我的实现,这不容易处理,因为我使用recv()
从连接接收所有数据,它会阻塞直到读取所有数据。因此,在 Chrome 发送的第二个请求中,它将"永久"阻止(有超时(,因为 Chrome 不发送任何数据。
这是Chrome的已知错误吗,我有什么方法可以检测和/或防止这种情况发生吗?我用Firefox和Edge测试了它,这些浏览器没有打开第二个套接字。
谢谢!
解决方案比我想象的要容易。您可以忽略第二个套接字,MSG_DONTWAIT
并将其作为标志传递给recv()
调用。更多关于这一点的信息 这里.
此外,我的问题是我向所有没有 URL 的请求返回 HTTP 501 响应。对于第二个 0 长度的套接字,这显然破坏了它并使 Chrome 显示错误。我添加了处理,当有 0 长度的请求时不会返回错误。它只会默默地关闭它。
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 打印无序映射的第二个元素,即集合
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 需要使用模板查找数组的第二个最小和最小值
- c++:交换向量中所有元组的第一个和第二个元素
- 如果条件,当我想第二个参数时
- 谷歌浏览器在访问网站时发送第二个 0 长度的请求?
- 求和的阶乘-请求第二个代码