3

我为自己制作了一个简单的 C++ 应用程序,通过 HTTP 流式传输数据。当我在浏览器中打开服务器 IP 和端口时,我可以在浏览器窗口中看到流。但是从浏览器向 C++ 服务器发出的任何 XHR 请求都会在收到标头后立即从客户端自动关闭。使用 TELNET 或 PHP 甚至没有任何脚本的浏览器可以毫无问题地为我提供流数据。将 Ajax 连接到生成虚拟流的 PHP 脚本也可以。

什么可能导致这个问题?可能是因为发送的第一个字节是“\0”吗?或者它可能是由于使用的端口不是80引起的?

C++ 服务器和 PHP 脚本都在同一台 Debian Linux 机器上运行。JS 脚本已经在多种浏览器中进行了测试,包括 Opera、Mozzila Firefox 和 Chrome。

服务器发送这些标头:

write(*con, "HTTP/1.1 200 OK\n",16);
write(*con, "X-Powered-By: Darker\n",21);
write(*con, "Pragma: no-cache\n",17);
write(*con, "Content-Type: text/plain; charset=\"utf-8\"\n",42);
write(*con, "Connection: keep-alive\n",23);

好的,所以在 Wireshark 和 Opera DragonFly 的帮助下,我分离了几个发生的问题:

  • HTTPRequest 中的“responseText”始终是“”(一个空字符串),尽管在 Wireshark 中我可以很容易地看到数据被正确接收。
  • 接收响应时,“readyState”始终为 4,即使流尚未从服务器端结束。
4

1 回答 1

1

您应该指明内容长度标头,指示流的确切大小(以字节为单位)。另外,出于好奇,您是否正在流式传输纯文本(如您的内容类型中所示)?如果是,则没有内容长度可能是问题,因为它\r\n\r\n在 HTTP 中有意义

于 2012-11-12T20:34:23.023 回答