应用层负责应用程序间的沟通,即定义了位于不同主机中的多个应用进程之间通信的协议。满足我们日常的网络需求,比如SMTP(电子邮件传输)、FTP(文本传输协议)、HTTP(超文本传输协议)
上面提到了协议二字,简单来说,协议就是一种“约定”,比如我们一会儿在哪见面,我们会提前约定好地点。应用层中应用最广泛的协议就是HTTP协议了。
HTTP协议
是客户端和服务器的通信,必须要通过请求和响应的交换来达成通信,HTTP协议规定:客户端先发出请求建立通信,服务器在没有接收到请求时是不会响应的
HTTP的特点:
1.HTTP基于TCP/IP协议
2.通常使用的场景是基于CS/BS
3.无状态无连接协议(后面有具体解释)
HTTP的组成
由HTTP请求和HTTP响应组成
客户端request:请求行、请求报头、空行、请求正文
服务器response:响应行、响应报头、空行、响应正文
请求行中:URI 、 version 、版本号,比如:HTTP/1.1
响应行中:
状态码:比如200(状态码解释:OK//客户端请求成功)
400 (状态码解释:Bad Request//客户端请求有语法错误,不能被服务器所理解)
报头中放的是键值对(比如键:小闻,值:12345;小闻:12345就是一个键值对)
HTTP常见的Header
Content-Type:数据类型(比如text/html等)
Content-Length:Body的长度
Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上
User-Agent:声明用户的操作系统和浏览器版本信息
referer:当前页面时从哪个页面跳转过来的
location:搭配3XX状态码使用,告诉客户端接下去要去哪里访问
Cookie:用于在客户端存储少量信息,通常用于实现会话(session)的功能
HTTP的方法
请求资源的常见方法:GET方法通过请求行的URL传参,POST方法通过请求正文传参,下面更具体点:
方法 | 说明 | 支持HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的关系 | 1.0 |
UNLINE | 断开连接关系 | 1.0 |
HTTP的状态码
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
常见的状态码:
200 (OK) 请求成功[一般用于Get和Post请求]
404 (Not Found) 客户端请求有语法错误,服务器无法处理请求
403 (Forbidden) 服务器收到请求,但拒绝服务
301 (Moved Permanently) 永久重定向(请求的资源被永久移动到新的URI)
302 (Redirect) 临时重定向(资源被临时移动。客户端应继续使用原有的URI)
504 (Bad GateWay) 充当代理服务器,未及时从远端服务器获取请求
URI 和 URL
URI统一资源标识符,是用来唯一标识一个资源
URL(Uniform Resource Locateor)统一资源定位器,每个网页都有一个唯一的名称标识,这个标识就叫做URL,简单的说,URL就是Web地址,俗称“网址”
它是具体的URI,不仅标识了一个资源,还知名如何定位这个资源,具有全球唯一性
URL格式由三部分组成:
协议、存放该资源的主机IP地址(有时也包括端口号)、主机资源的具体地址
Windows主机不区分URL大小写,但是,Unix/Linux主机区分大小写
无连接无状态:简化了服务器,不会造成不必要的连接占用,但请求可能会传输重复信息
无连接:每次连接只处理一个请求。请求时建连接,请求完断连接(服务器处理完客户端的请求,并收到客户端的应答后,断开连接)这种方式不仅节约传输时间,还可尽快把资源释放出来服务其他客户端
无状态:指协议对事物处理没有记忆能力(也就是服务器并不直到客户端是什么状态,每个请求都是独立的)。不过也有缺点:假如你后面要继续处理前面的,那就必须要重传了,这类情况就会导致连接传送的数据量大。但是如果不需要之前信息时,应答就比较快了)
Cookie\Set-Cookie