c++编写一个简单的Http服务器

1.http协议格式

请求:
在这里插入图片描述

  • 首行:方法 + url + 版本号(/favicon.ico???)
  • Header:请求的属性,冒号分割的键值对,每组属性用 \n 分割,遇空行结束
  • body:空行后面都是body的内容,body可以为空,如果body有内容,Header会有一个属性content-length来标识body的长度

响应:
在这里插入图片描述

  • 首行: 版本号 + 状态码 + 状态码解释
  • Header:请求的属性,冒号分割的键值对,每组属性用 \n 分割,遇空行结束
  • body:空行后面都是body的内容,body可以为空,如果body有内容,Header会有一个属性content-length来标识body的长度, 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

2.GET 和 POST 的区别

GET 往往把参数放到 query_string 中
POST 把参数放在 body 中

3.HTTP状态码

在这里插入图片描述
在这里插入图片描述

4.常用Header

在这里插入图片描述

5.实现简单http服务器

github头文件:tcp_pthread_server.hpp与tcp_socket.hpp

#include"tcp_pthread_server.hpp"
#include<string>
using namespace std;

void HttpProcess(string& req, string* resp)
{
 string first_line = "HTTP/1.0 200 OK\n";
 string body = "<html><div><h1>hello world</h1></div></html\n";
#if 0
 string body = "<html lang=\"zh-cn\">\
                <!测试 test>\
                <body bgcolor=\"White\">\
                <div>\
                <br/>\
                <h1 align=\"center\">hehe</h1>\
                <hr/>\
                <br/>\
                <p style = \"background-color:Red\">Hello World</p>\
                <hr/>\
                <p style = \"front-family:arial;color:yellow;front-size:20px;\">HAHA.</p>\
                <a href=\"http://ww.w3school.com.cn\">w3school</a>\
                </div>\
                <img src=\"test.jpg\" width=\"104\" height=\"142\" />\
                </body>\
                </html>\n";
#endif
 string header = "Content-Type: text/html\ncharset: gbk\nContent-Length:"
            +to_string(body.size())+"\n\n";
 *resp = first_line + header + body;
 //service firewalld stop 关闭防火墙 #centos 7
 //service firewalld status
}
int main()
{
  TcpPthreadServer server("0.0.0.0",9090);
  server.Start(HttpProcess);
  return 0;
}

编译, 启动服务. 在浏览器中输入 http://[ip]:[port], 就能看到显示的结果 “Hello World”
在这里插入图片描述

发布了56 篇原创文章 · 获赞 63 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览