之前谈到协议的时候,只是简单的理解成一种约定,但是socket api的接口在读写数据时,都是按照字符串的方式来发送接收的,如果我们要传输一些结构化的数据又该怎么办呢?由此就有了序列化和反序列化,即在发送数据时结构化的数据按照一个规则转化成字符串,接收到数据的时候再按照相同的规则把字符串转化成数据。
这种在一端发送时构造的数据,在另一端接收时能够正确的解析,我们将其称为应用层协议。
下面我将介绍应用层协议—http
一、URL
平时我们认为的网址, 其实就是URL,URL可以理解为跨主机进行资源定位的标识符。
下图是URL各个部分解释:
二、http协议格式
2.1http请求
2.2http响应
通过http的响应和请求格式可以看出,http协议是以行为基本单位的,而报头下的空行将报头和有效载荷很好的分离。
三、http状态码
1xx----信息状态码,接收的请求正在处理
2xx----成功状态码,请求正常处理完毕
3xx----重定向状态码,需要location完成重定向
4xx----客户端错误状态码,服务器无法处理请求
5xx----服务器错误状态码,服务器处理请求出错
四、http常见header
- content-type: 数据类型(text/html)
- content-length: body的长度
- host: 客户端告知服务器,所请求的资源是在哪个主机的哪个端口上
- user-agent: 声明用户的操作系统和浏览器版本信息
- referer: 当前页面是从哪个页面跳转过来的
- location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问
- cookie:在本地浏览器下存储的一个文件,通常用于实现会话(session)的功能
注:cookie和session都是用来保存信息的,只不过cookie是在客户端,session是在服务器端,如果用户已经登录,服务器就会在cookie中保存一个session_id,下次再请求的时候,服务器识别session_id,然后去session库中查找具体数据。