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”