3

HTTP 経由でデータをストリーミングする単純な C++ アプリケーションを作成しました。ブラウザでサーバーの 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);

OK、Wireshark と Opera DragonFly の助けを借りて、発生するいくつかの問題を分離しました。

  • HTTPRequest の "responseText" は常に "" (空の文字列) ですが、Wireshark ではデータが適切に受信されていることが簡単にわかります。
  • ストリームがサーバー側から終了していなくても、応答を受信すると、「readyState」は常に 4 です。
4

1 に答える 1

1

ストリームの正確なサイズをバイト単位で示す content-length ヘッダーを指定する必要があります。また、好奇心から、(コンテンツ タイプで示されているように) プレーン テキストをストリーミングしていますか? はいの場合\r\n\r\n、HTTP で意味を持つため、コンテンツの長さがないことが問題になる可能性があります

于 2012-11-12T20:34:23.023 に答える