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

1.http协议格式

请求:
c++编写一个简单的Http服务器_第1张图片

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

响应:
c++编写一个简单的Http服务器_第2张图片

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

2.GET 和 POST 的区别

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

3.HTTP状态码

c++编写一个简单的Http服务器_第3张图片
c++编写一个简单的Http服务器_第4张图片

4.常用Header

c++编写一个简单的Http服务器_第5张图片

5.实现简单http服务器

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

#include"tcp_pthread_server.hpp"
#include
using namespace std;

void HttpProcess(string& req, string* resp)
{
 string first_line = "HTTP/1.0 200 OK\n";
 string body = "

hello world

; #if 0 string body = "\ \ \
\
\

hehe

\
\
\

Hello World

\
\

HAHA.

\ w3school\
\ \ \ \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”
c++编写一个简单的Http服务器_第6张图片

你可能感兴趣的:(网络)