gpt4 book ai didi

javascript - 无法远程连接到 dlib 网络服务器,localhost 可以正常工作

转载 作者:行者123 更新时间:2023-11-28 07:26:56 30 4
gpt4 key购买 nike

我目前正在开发一个 html/javascript 前端,并使用 c++ 后端进行所有计算。两者都通过一个集成的小型 dlib 网络服务器连接,该服务器处理所有请求。前端请求这样的数据:

pop=$.ajax({ //load Population array of 90
type:"POST",
url: "Pop90",
async:false
});
eval(pop.responseText);

网络服务器然后在单个字符串中返回一个大数组(长度约为 4 000 000)。如果我通过本地主机连接,这将完美运行,但我无法在另一台计算机上远程访问服务器。浏览器只是加载了一会儿然后超时,但我可以看到服务器上的所有请求。服务器抛出错误:dlib.server_http:来自客户端的 http 字段太长。但是来自客户端的 http 请求不应该太大,来自服务器的实际帖子是。非常感谢!详细说明一下。我刚刚在 firefox 中测试了该页面,即使通过本地主机也无法正常工作。错误控制台是数组初始值设定项,它是网络服务器的响应字符串,它是这样的,但有大约 400 万个条目:

"ar=[-99999, -99999, ...]" 

处理请求的网络服务器类如下所示:

    class web_server : public server_http
{
vector<vector<double>> pop90;
vector<vector<double>> pop95;
vector<vector<double>> pop00;
public: web_server::web_server()
{
cout<<"init...";
loadArray("data/raw/afp90g.asc", &pop90);
cout<<" 90 loaded...";
loadArray("data/raw/afp95g.asc", &pop95);
cout<<" 95 loaded...";
loadArray("data/raw/afp00g.asc", &pop00);
cout<<" 00 loaded...";
cout<<"ready!"<<endl;
}
const std::string on_request (const incoming_things& incoming, outgoing_things& outgoing)
{
cout<<"---------------------------"<<endl;
cout<<incoming.path<<endl;
ostringstream sout;
sout<<get_file_contents("Seite.html");
cout<<"content type: "<<incoming.content_type<<endl;
cout<<"request type: "<<incoming.request_type<<endl;
string filename=incoming.path.substr(1,incoming.path.length());
if (incoming.path.substr(0,1) == "/" && incoming.path.length()>1)
{
if (incoming.path=="/css/Style.css") outgoing.headers["Content-Type"] == "text/css";
if (incoming.path.substr(0,8)=="/Pop90") return parseArray(pop90);
if (incoming.path.substr(0,8)=="/Pop95") return parseArray(pop95);
if (incoming.path.substr(0,8)=="/Pop00") return parseArray(pop00);
return get_file_contents(filename.c_str());
}
return sout.str();
}
};

好的,所以我修改了 server_http.cpp 文件以创建传入流的完整转储。只要在本地连接,就好像完美的 http 消息之间有随机的 -1 值(EOF)一样。如果我通过我的实际 ip 远程连接,则只有 -1 值进入。我停用了我的防火墙/防病毒软件。端口转发应该没问题。我仍然不知道该怎么做。

最佳答案

为了防止客户端淹没服务器并耗尽其内存,dlib 的 Web 服务器对 HTTP header 和查询路径字符串的长度有限制。具体来说,它要求每个单独的长度都小于 16KB,如果客户端尝试发送超过 16KB 的长度,它会给出您看到的“来自客户端的 http 字段太长”错误消息。

所以您一定以某种方式生成了一条很长的路径,或者您可能正在发回一个非常大的 header (可能来自您正在创建的大 cookie?)。您可以通过编辑 dlib/server/server_http.cpp 中的第 129 行将 16KB 限制更改为其他内容。如果这可以通过调用成员函数来设置会更好(因为我是 dlib 的作者 :))我将在下一个版本中将其作为一个功能。

但是无论如何,您达到 16KB 的限制是令人惊讶的,因为考虑到路径字符串和 HTTP header 的通常长度,这确实是一个相当大的限制。因此,您的 HTTP 客户端代码中可能发生了其他事情。

关于javascript - 无法远程连接到 dlib 网络服务器,localhost 可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600497/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com