在cpp-netlib中添加Access-Control-Allow-Origin选项

时间:2014-07-07 06:46:04

标签: http boost http-headers cpp-netlib

我尝试使用cpp-netlib实现HTTP服务器。实际上我可以成功创建一个简单的http服务器。但现在我不知道如何为我的服务器设置Access-Control-Allow-Origin选项。

当我尝试通过jQuery客户端访问此服务器时发现此问题。当我尝试访问此服务器时,它返回如下所示的错误。服务器在不同的网络中运行。

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

那么如何在此代码中设置“Access-Control-Allow-Origin:*”?我调查了cpp-netlib文档,但没有建立任何信息。

环境:

  • Visual Studio 2010 Professional 32位
  • boost 1.54.0
  • cpp-netlib 0.9.4

我的代码:

#include <boost/network/protocol/http/server.hpp>
#include <iostream>

namespace http = boost::network::http;

struct hello_world;
typedef http::server<hello_world> server;

struct hello_world {
    void operator() (server::request const &request,
                     server::response &response) {
        server::string_type ip = source(request);
        std::ostringstream data;
        data << "Hello, " << ip << "!";
        response = server::response::stock_reply(
            server::response::ok, data.str());
    }
    void log(...) {
        // do nothing
    }
};


int main(int argc, char * argv[]) {

    if (argc != 3) {
        std::cerr << "Usage: " << argv[0] << " address port" << std::endl;
        return 1;
    }

    try {
        /*<< Creates the request handler. >>*/
        hello_world handler;
        /*<< Creates the server. >>*/
        server server_(argv[1], argv[2], handler);
        //server server_("127.0.0.1", 12344, handler);
        /*<< Runs the server. >>*/
        server_.run();
    }
    catch (std::exception &e) {
        std::cerr << e.what() << std::endl;
        return 1;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

这个问题已经有几个月了,但我发现自己正在使用cpp-netlib并且必须这样做。所以我想我会回答遇到这个问题的其他人:

需要在返回标头中设置Access-Control-Allow-Origin。因此,在您的请求处理程序中,您需要自己设置响应标头(尚未测试下面的代码,但要点就在那里):

response = server::response::stock_reply(
        server::response::ok, data.str());

server::response_header cors_header;
cors_header.name = "Access-Control-Allow-Origin";
cors_header.value = "*"; // "*" meaning allow any other server;

response.headers.push_back(cors_header);

希望这有帮助。

相关问题