我制作了一个简单的 Linux 套接字网络服务器并观察了它的 http 流量。通常,当它将 HTTP 200 或 404 发送回请求 GET 或 POST 客户端(Web 浏览器或扫描仪)时,客户端会回显服务器刚刚发送回它的消息。他们为什么这样做?他们期望从我的服务器得到什么答案?
block 引用> block 引用>new connection 0 established with 37.236.190.20:39889
new message 0 received from 37.236.190.20:39889
GET / HTTP/1.1 Connection: Keep-Alive Keep-Alive: 300 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHT ML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Host: 18.231.188.211
sent file login.html to 0 37.236.190.20:39889 successfully | nsent = 550
new message 0 received from 37.236.190.20:39889
HTTP/1.1 200 OK Connection: close Content-Length: 465 Content-Type: text/html
[html page I sent here]
sent file login.html to 0 37.236.190.20:39889 successfully | nsent = 550
connection 0 with 37.236.190.20:39889 was forcebly closed. cause: echoing
最佳答案
由于我在任何地方都没有找到此类行为的任何记录,因此在 gdb 的帮助下,我发现我正在使用一个无符号变量来保存错误时返回 -1 的函数的返回值。
msg_buffer.length = recv(connected[i].socket, msg_buffer.data, msg_buffer.size, 0);
if (msg_buffer.length < 0) { // no message
因此第二行中的评估永远不会为真,并且消息的长度将为 0xffffffffffffffff。但由于缓冲区保存了我之前发送的消息,并且没有收到新消息来覆盖该消息,因此客户端似乎正在回显我的服务器。 谢谢大家的帮助。并对这个错误表示歉意。
关于c - 为什么客户端将网络服务器的消息回显给它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100446/