应用层协议

应用层协议

负责应用程序之间的数据沟通-----而应用程序是程序员写的,所以应用层协议实际上是程序员自己定的。

**1.**自定制协议的思路:(私有协议)

客户端需要将多个数据对象,进行格式组织,然后通过网络传输,传递给服务端。
如何进行格式组织呢? — 使用结构体
使用结构体进行数据对象的二进制结构化组织,进行数据传输/可持久化数据存储。

2. 序列化/反序列化的概念
序列化:将数据对象按照指定协议进行组织成可持久化存储/数据传输的二进制数据串。
反序列化:将持久存储/数据传输的二进制数据串按照指定协议解析出各个数据对象。
而使用结构体来组织数据其实就是数据对象的二进制序列化。

常见的数据结构序列化方式有很多: json序列化 : protobuf序列化

HTTP协议:超文本传输协议--------HTTP协议给程序员留有一定的自定制空间。
网址: 统一资源定位符(定位网络中唯一的资源) URL
URL的格式以及所包含的要素:
https://username:[email protected]/s?wd=c%2B2B&rsv spt=1#ch
应用层协议
URL编码:将特殊字符的每一个字节,都转化成16进制数字的字符,在对每一个字节进行转化后,需要在前边加上%表示紧跟其后的两个字符经过了url编码。
URL解码:得到查询字符串后,在val中遇到%,则认为紧跟其后的两个字符需要解码。

HTTP协议格式

首行:

1)、 请求首行:包含三大信息,以空格进行间隔,并且以\r\n作为结尾;
( 请求方法 URL 协议版本\r\n)

  • 请求方法: 不同的请求方法,具有不同的主要负责功能
    GET : 请求获取一个资源,并要求服务器返回实体数据
    HEAD:请求获取一个资源,但并不要求服务器返回实体数据,只要响应头部信息
    POST:向服务器提交表单数据。
    GET/POST:get也能向服务器提交数据,但是提交的数据是在URL的查询字符串中(get没有正文)而post提交的数据在正文中。
    get提交的数据是不太安全的,并且URL的长度是有限的,早期是1k,现在是4K/8k。
    应用层协议

URL:主要的信息是请求的资源路径以及提交的查询字符串。

  • 协议版本:HTTP/1.1 / 0.9 / 1.0 / 2
    0.9: 默认只支持GET请求方法,并且是短连接,http在传输层使用tcp协议,短连接指发送一个请求,得到响应后关闭连接。
    1.0:支持GET/HEAD/POST请求方法,并且支持长连接。
    1.1:支持更多的请求方法,并且新增了更多的特性,比如默认支持长连接,实现管线化传输…(管线化意思是可以连续发送多个请求,不用等服务器响应在发送)
    2.0: 比如以前都是客户端主动向服务器发送请求,但在2.0中,支持服务端向客户端主动推送信息…

2)、响应首行: 包含三大信息,以空格进行间隔,并且以\r\n作为结尾;
(协议版本 响应状态码 状态码描述\r\n)
响应状态码:向客户端反应本次请求的处理结果状态
1xx:一些描述信息
应用层协议
2xx:本次请求正确处理完毕 200–请求成功
应用层协议
3xx:重定向,本次请求的资源可能移动到其他位置,请客户端重新请求新的位置 301–永久重定向/ 302 临时重定向/ 303 查看其他
应用层协议
4xx:客户端错误; 404 /400
应用层协议
5xx: 服务端错误 500/ 502 / 504
应用层协议

状态码描述:对于本次状态码的描述信息。