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
本文介绍了如何从零开始编写一个Web服务器,重点讲解了HTTP部分,包括HTTP请求过程、请求分类和状态码。文章提到了实现HTTP功能的关键步骤,如字符串解析,并给出了HTTP类的设计和HTTP_CODE的含义。通过分析和代码实现,帮助读者理解Web服务器的工作原理。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=112717323&d=1&t=3&u=9c3938f9e99e4c82a16dea6c6999ee77)
2990

被折叠的 条评论
为什么被折叠?



