尝试用C实现一个简单的http服务器,遇到了些小问题,请大神帮帮忙
流程:
启动服务器监听端口 -> accept 请求后创建线程处理 -> 返回结果
问题:
- 向客户端send完结果之后,如果 close() 浏览器页面就会显示 “连接被重置”
- 如果不close , 页面就会一直加载中
思考:
是我返回的http数据不完整还是其他原因呢?
代码:
char buf[1024];
//发送header
sprintf(buf, "HTTP/1.0 200 OK\r\n");
send(client_fd, buf, strlen(buf), 0);
sprintf(buf,"Content-Type: text/html;charset=utf-8\r\n");
send(client_fd, buf, strlen(buf), 0);
sprintf(buf, "\r\n");
send(client_fd, buf, strlen(buf), 0);
//发送内容
sprintf(buf, "<HTML><head><title>test</title></head>");
send(client_fd, buf, strlen(buf), 0);
sprintf(buf, "<body><h1>welcome</h1></body></HTML>");
send(client_fd, buf, strlen(buf), 0);
//关闭连接
close(client_fd);
因为你的浏览器不知道你的数据是否返回完毕了,你需要把你要响应的正文长度告诉浏览器,使用HTTP响应头里面的Content-Length
还有另外一种方式,稍微麻烦一些,头里面用“Transfer-Encoding:chunked”,相关细节你百度一下。