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”
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值