提升ASIO:文件不完整

时间:2015-12-21 19:59:23

标签: c++ boost-asio

我使用以下模板代码作为Boost ASIO套接字侦听器:

#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main()
{
  try
  {
    boost::asio::io_service io_service;

    tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 88));

    for (;;)
    {
      tcp::socket socket(io_service);
      acceptor.accept(socket);

      std::string message = "<!DOCTYPE html><html><body><h1>HELLO WORLD</h1></body></html>";

      boost::system::error_code ignored_error;
      boost::asio::write(socket, boost::asio::buffer(message), boost::asio::transfer_all(), ignored_error);
    }
  } catch (std::exception& e) { std::cerr << e.what() << std::endl; }

  return 0;
}

当我在浏览器中查看它时,它工作正常。

但是当我试图从另一个应用程序(例如Node.JS中的HTTP.request)读取它时,它失败并出现Parse Error。如果我通过https://validator.w3.org查看它,则会显示“I / O错误:由于非文档错误导致无法确定结果”。

1 个答案:

答案 0 :(得分:2)

请参阅HTTP规范(RFC7230)第19页第3节here

HTTP消息的格式为:

 HTTP-message   = start-line
                  *( header-field CRLF )
                  CRLF
                  [ message-body ]

进一步阅读将揭示起始行的限制和要求,标题的格式以及向接收者指示消息正文的长度(或在分块消息的情况下检测它的方法)的要求

上面的代码格式如下:

[ message-body ]