HTTP部分详细讲解以及代码实现
本文是从零开始Web服务器的第二篇,本篇将正式从代码入手讲解整个网络编程
给出笔者学习期间接触到的Web服务器代码(C/C++)连接
https://github.com/EZLippi/Tinyhttpd
https://github.com/qinguoyi/TinyWebServer
https://github.com/oatpp/oatpp
本文中的部分代码来自以上项目,感谢他们的开源
HTTP—Hyper Text Transfer Protocol(超文本传输协议)
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。
HTTP请求过程
这里给出一篇参考博客:Http请求过程
HTTP请求分类
请求方法 | 意义 |
---|---|
OPTIONS | 请求一些选项信息,允许客户端查看服务器的性能 |
GET | 请求指定的页面信息,并返回实体主体 |
HEAD | 类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
DELETE | 请求服务器删除指定的页面 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
下面给出这些请求,在代码层面的表现,如果你想查看自己当前浏览器所发出的HTTP报文,按F12,找到Network,然后F5刷新界面,随便点击Name中的一项,找到Request Headers即可显示出当前的请求头情况。
GET / HTTP/1.1
Host: 192.168.0.23:47310
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*; q = 0.8
Accept - Encoding: gzip, deflate, sdch
Accept - Language : zh - CN, zh; q = 0.8
Cookie: __guid = 179317988.1576506943281708800.1510107225903.8862; monitor_count = 5
状态码(Status-Code)
- 1xx:表示通知信息,如请求收到了或正在进行处理
- 100 Continue:继续,客户端应继续其请求
- 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议
- 2xx:表示成功,如接收或知道了
- 200 OK: 请求成功
- 3xx:表示重定向,如要完成请求还必须采取进一步的行动
- 301 Moved Permanently: 永久移动。请求的资源已被永久的移动到新 UR