Linux网络通信环境中的应用层是直面程序员的一层,应用程序是程序员开发的,所以应用层的协议都是程序员自己定制的。
自定制协议:程序员根据应用的特点来根据数据的格式、数据的描述信息定义协议。
功能:客户端发送两个数字以及一个运算符给服务端,服务端获取到数据后运算完成返回结果。
三个数据对象:int num1、int num2、char op
1. 将所有数据转换成字符串并使用特殊字符间隔
num1 ;num2 ;op ;这样就将数据按照指定格式组织起来了。
2. 采用结构体构造二进制数据对象
struct cal_t:结构体中存放数据成员num1、num2、op
cal_t tmp:定义对象tmp,tmp.num1、tmp.num2、tmp.op进行赋值
数据解析:将数据按照结构体的格式进行解析
优点:自动约定数据的格式,不用将数据进行类型转换,将多个对象构造成一个数据对象进行传输。
序列化:将各个数据对象按照指定的协议组织成为持久化存储或者数据传输的二进制数据串。(组织)
序列化方式:json序列化、protobuf序列化、二进制序列化(结构体),选择一个合适的序列化方式需要考虑解析性能及传输性能等多方面的因素。
反序列化:将二进制数据串按照指定协议解析得到各个数据对象。(解析)
HTTP协议也叫超文本传输协议,早期用于传输超文本数据HTML。
HTML称为超文本标记语言,是一种标识性的语言,它通过标记符号来标记要显示的网页中的各个部分,网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容。
网址:统一资源定位符(URL),在网络中唯一定位服务器上的某个资源,向指定服务器请求指定资源。
如下图以百度为例进行分析:
HTTP协议格式:不论是请求信息还是相应信息都包含 1.首行、2.头部、3.空行、4.正文
fiddler:浏览器和服务器之间的通信抓包工具(代理)
wireshark:网卡抓包工具,抓取流经网卡的所有数据流量
1.请求方法
序号方法描述1GET请求实体资源(指定的页面信息),将数据作为查询字符串放到URL中提交,长度有限制,不安全2POST向指定资源提交数据进行处理请求(提交表单或者上传文件),将数据存放于正文中提交,长度无限制,安全3HEAD类似于GET请求,请求实体资源,只不过返回的响应中没有具体的内容,用于获取报头4PUT传输的数据取代指定文档内容5PATCHPUT方法的补充(对已知资源进行局部更新)6DELETE请求服务器删除指定页面7OPTIONS允许客户端查看服务器的性能8TRACE回显服务器收到的请求(用于测试或诊断)9CONNECTHTTP1.1中预留给能够将连接改为管道方式的代理服务器2.URL
网址:统一资源定位符(URL),在网络中唯一定位服务器上的某个资源,向指定服务器请求指定资源。
3.协议版本
序号版本特性1HTTP 0.9HTTP协议格式不完整,仅用于传输HTML数据,仅支持GET请求方法2HTTP 1.0正式规定了HTTP协议格式,支持传输不同文件格式的数据流,支持GET、POST、HEAD请求方法3HTTP 1.1支持长连接管线化传输,在HTTP 1.0的基础上支持更多的请求方法4HTTP 2.0采用二进制流传输(之前都是明文传输)并且进行多路复用,还允许服务端向客户端主动推送消息HTTP基于在传输层TCP实现通信,TCP是面向连接的。
短连接: 建立连接发送请求,得到响应之后关闭连接。 长连接: 一次连接可以发送多条请求,请求各种各样的信息。 管线化传输: 连续发送多条请求,按顺序进行响应,提高信道的利用率,但是会队头阻塞。 多路复用: 连续发送多条请求,响应顺序不用与请求顺序保持一致(头部中标识了请求信息),大大提高信道的利用率。
响应首行:HTTP1.1 303 SeeOther1.协议版本
HTTP 0.9、1.0、1.1、2.0等版本上面表格进行了详细讲解
2.响应状态码
响应状态码表示服务端对本次请求的处理结果
序号状态码分类描述11××描述信息,服务器收到请求,需要请求者继续执行操作22××请求成功,请求被成功接收并处理33××重定向,需要进一步操作完成请求44××客户端错误,请求包含语法错误或无法完成请求55××服务器错误,服务器在处理请求的过程中发生错误注意: 200: 请求成功
301为永久重定向: 请求的资源被永久移动到新的URL中,客户端后来使用更新的URL。
302为临时重定向: 请求的资源被临时移动到新的URL中,客户端继续使用原有的URL。
400: 请求错误、404: 请求的资源不存在
500: 服务器内部错误、502: 代理请求失败、504: 代理请求超时
3.状态码描述
对状态码的描述信息,可以是官方文档对应描述也可以是自定义描述。
Cookie:客户端通过Cookie向服务端传递信息 Set-Cookie:服务端通过Set-Cookie向客户端传递信息
客户端发出请求,服务端会为每个登录的客户端创建一个Session(会话),保存当前的会话信息、客户端认证信息存储到数据库中,Session保存在服务端,并且会生成一个Sessionid(会话id),服务端给客户端响应时,响应头部中会有Set-Cookie信息,Sessionid,客户端收到响应后,将Sessionid存入到Cookie中,在客户端每次通信时,请求头部信息中都有Cookie,Cookie中有sessionid,服务端获取到sessionid后,就能通过sessionid找到对应的客户端信息,解决了HTTP协议是一个无状态协议的弊端,实现了状态的保持。另外Session的产生,解决了Cookie不安全的问题,敏感的信息放在服务端保存的Session当中。
Cookie和Session的区别Cookie是一种小型文本文件,用来辨别用户身份,进行Session跟踪而保存在客户端上的数据,保存的是服务器返回给自己的关键信息。
Session是一种会话控制,服务器为客户端建立的会话,其中保存特定服务端会话所需的属性以及配置信息。
Session保存在服务端而Cookie保存在客户端。
空行就是用来间隔头部与正文的
正文就是客户端提交给服务器的数据或者服务端响应给客户端的实体资源
