在秋招准备项目时,对于牛客C++WebServer项目的基础理论知识进行了总结
HTTP
HTTP协议格式
1)HTTP请求
1.首行:[方法]+[url]+[版本]
**2.Header:**请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
**3.Body:**空行后面的内容都是body,body允许为空字符串,如果body存在,则在Header中会有一个Content-length属性来标识Body的长度
注:前面三部分是一般是HTTP协议自带的,是由HTTP协议自行设置的,而请求正文一般是用户的相关信息或数据;如果用户在请求时没有信息要上传给服务器,此时请求正文就为空字符串。
- 请求报头内容组成:
1.Host:请求的资源在哪个主机的端口上
2.Connection:该请求支持长连接(heep_alive)
3.Content-Length:正文内容长度
4.Content-Type:数据类型
5.User-Agent:声明用户的操作系统和浏览器版本信息
6.Accent:发起了请求
7.Referer:当前页面是从哪个页面跳转过来的
8.Accept-Encoding:接受的编码
9.Accept-Language:接受的语言类型
10.Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能
- HTTP如何进行解包
1.请求行和请求报头是HTTP的报头信息,而这里的请求正文实际就是HTTP的有效载荷,而请求当中的空行起到分离报头和有效载荷的作用
2.读取一个请求时,通过报头中的Content-Length(正文的长度)来精准控制读取该请求正文的长度,从而将连续的几个请求进行分开。
2)HTTP响应
- 响应格式视图:
- 响应格式组成:
1.状态行:[版本号]+[状态码]+[状态码解释]
2.响应报头Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
3.相应正文Body:空行后面的内容都是body,body允许为空字符串,如果body存在,则在Header中会有一个Content-length属性来标识Body的长度;如果服务器返回了一个html界面,那么html页面内容就在body中。
HTTP的方法
最常见的是Get方法和Post方法
- GET方法和POST方法对比:
1.GET方法一般用于获取某种资源信息,而POST方法一般用于将数据上传给服务器,上传数据时也有可能使用GET方法,比如搜索提交数据时
2.GET方法和POST方法都可以带参:GET方法通过url传参的;POST方法是通过正文传参的
3.POST通过正文传参能传递更多参数,GET方法通过url传参,url的长度是有限的,所以GET方法传参有限
4.POST方法传参更加私密,因为GET方法将参数回显到url上,POST方法在正文中不会被别人轻易看到,但是实际两种方法都不安全,POST方法传参可以被截取,要做到安全只能通过加密来完成
HTTP的状态码
在开发一个网站之后,用户通过URL对资源进行操作,服务端要告诉用户交互的结果。一个较好的方法就是遵循HTTP协议,使用请求相应的HTTP状态码来进行判断。
- HTTP的状态码:
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informatonal(信息性状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error&#x |