应用层:
应用层程序之间的数据交流,就是程序员自己所写的程序,程序与程序之间进行数据交流时,就需要有一种协议来保证数据的准确传送。协议分为:
一. 自定制协议:
序列化:就是数据以指定协议格式进行持久化存储或者是发送端以一种特定格式进行数据传输时的排布方式。
反序列化:接收端按照指定的协议格式对传输过来的数据进行解析的过程。
二. 知名协议:http协议(超文本传输协议)
网址:统一资源定位符简称URL
最早的URL是由:协议方案名://用户名:密码@服务器地址:端口/资源路径?查询字符串#片段标识符。组成。这种方式由于使得用户信息的安全性大大降低,所以在后面的URL中已经去掉用户名和密码。而常用的协议对应端口也去除。因为它已经众所周知。发展到现在的一种升级版协议即https协议。
URL编码与解码:针对的是用户提交的数据。用urlencode编码,urldecode解码。
由于像 / ?: 等这样的自符,会被URL转作另一种特殊意义,所以像这种的字符不可随意出现。如果要出现就必须对其进行转义。
转义规则:将需要转码的字符转为16进制,之后从右往左取四位,每两位做一位前面加上%。如C++为:C%2B%2B。
http协议是由三大部分组成即:首行,头部,正文。
首行又分为:请求首行,和响应首行。
在请求首行:常用的请求方法有(GET,POST,HEAD,PUT,DELETE) 后面接着 URL 再接着协议的版本号(0.9/1.0/1.1/2)\r\n.
其中GET是获取资源。POST是传输实体主体。PUT是传输文件,HEAD是获得报文首部。DELETE是删除文件
请求方法中GET无正文,POST有正文。
在响应首行:协议版本 状态码(1~~,2~~,3~~,4~~,5~~) 后面跟状态码的描述信息\r\n
1XX是信息描述码。2XX是对操作成功的状态码。如常见的202(OK)。3XX,状态码是针对重定向的。常见的有302(Redirect,重定向)。4XX,是客户端错误状态码。常见的有404(Not Found),403(Forbidden)。5XX:服务器错误状态码。常见的有:502(Bad Gateway)。
头部:一个个以: 间隔的键值对,键值对之间以\r\n间隔;每条头部信息都包含特殊含义。
存在形式:key: val\r\nkey: val\r\n
通常包括:Content-Length:正文长度。
Content-Type:正文数据类型。如果是html类型将直接打开。如果是text格式将下载该文件。
Cookie:用于在客户端保存客户的个人相关信息。session:是用户第一次登录时,服务器为用户建立的一次会话,将会话信息保留到session中,session再通过set-Cookie,将会话信息存储在客户端的Cookie中。便于下次用户不再手动登陆,直接提取Cookie相关信息与服务器进行匹配登陆。
Referer:用来记录当前页面是从哪一个页面跳转而来的。
Transfer-Encoding:数据分块,适用于当不确定数据的长度。
Location:与3XX搭配使用,说明重定向的地址。
Host:客户端告知服务器,所请求的资源在哪个主机的哪个端口上。
User-Agent:声明用户的操作系统和版本信息。
中间一个空行:\r\n。
接下来就是正文:接收一个http头部是否完整的评判标准是遇到两个空行(\r\n\r]n).
珍&源码