Добавить параметр Access-Control-Allow-Origin в cpp-netlib

#http #boost #http-headers #cpp-netlib

#http #повысить #http-заголовки #cpp-netlib

Вопрос:

Я попытался реализовать HTTP-сервер с помощью cpp-netlib. На самом деле мне удалось создать простой 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 32bit
  • повысить 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 amp;request,
                     server::response amp;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 amp;e) {
        std::cerr << e.what() << std::endl;
        return 1;
    }

    return 0;
}
  

Ответ №1:

Этому вопросу несколько месяцев, но я обнаружил, что работаю с cpp-netlib, и мне пришлось сделать то же самое. Итак, я подумал, что отвечу для всех, кто сталкивается с этим вопросом:

В заголовке return необходимо задать параметр 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);
  

Надеюсь, это поможет.