应用层常见协议
应用层(英语:Application layer)位于OSI模型的第七层。应用层直接和应用程序接口结合,并提供常见的网络应用服务。应用层也向第六层表示层发出请求。
网络互联模型
超文本传输
HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议.
报文格式
ABNF
是最严谨的HTTP
报文格式描述形式, 如下所示:
1 | HTTP-message = start-line |
示例图
1 | start-line = request-line / status-line |
报文格式
Rules
URL的编码
URL
中一旦出现了一些特殊字符(比如中文,空格),需要进行编码. 在浏览器的地址栏输入URL
时, 采用URF-8
进行编码.
请求方法
GET
: 请求向指定的资源发出“显示”请求。使用GET
方法应该只用在读取资料,而不应当被用于产生“副作用”的操作中,例如在网络应用程序中。其中一个原因是GET
可能会被网络爬虫等随意访问。浏览器直接发出的GET
只能由一个url触发。GET
上要在url
之外带一些参数就只能依靠url
上附带querystring
。GET
请求URI
有长度限制,所以如果请求参数过多,还是需要适用POST
请求.POST
: 常用于添加,修改,删除的操作, 请求参数可以放到请求体中(没有大小限制)HEAD
: 请求得到与GET
请求相同的相应, 但没有响应体.- 使用场景举例:在下载一个大文件前,先获取其大小,再决定是否要下载. 以此可以节约带宽资源.
OPTIONS
: 用于获取目标资源所支持的通信选项, 比如服务器支持的请求方法.-
OPTIONS * HTTP/1.1
-
PUT
: 用于对已存在的资源进行整体覆盖.PATCH
: 用于对资源进行部分修改(资源不存在, 会创建新的资源).DELETE
: 用于删除指定的资源.TRACE
: 请求服务器回显其他的请求信息, 主要用于HTTP
请求的测试或诊断.CONNECT
: 可以开启一个客户端与所请求资源之间的双向沟通的通道, 它可以用来创建隧道tunnel
, 可以用来访问采用了SSL(HTTPS)
协议的站点.
请求头字段
头字段名 | 说明 | 示例 |
---|---|---|
User-Agent | 浏览器的身份标识字符串 | Mozilla/5.0 |
Host | 服务器的域名以及端口号 | localhost:80 |
Date | 发送该消息的日期和时间 | Sat, 11 Dec 2021 15:25:46 GMT0 |
Referer | 表示浏览器所访问的前一个页面, 正是那个页面上的某个链接将浏览器带到了当前所请求的这个页面 | https://zh.wikipedia.org/ |
Content-Type | 请求体的类型 | text/html; charset=UTF-8 |
Content-Length | 请求体的长度(字节为单位) | 100 |
Accept | 能够接受的响应内容类型 | text/ plain |
Accept-Charset | 能够接受的字符集 | Accept-Charset: GB2312, utf-8;q=0.7(权重) |
Accept-Encoding | 能够接受编码方式列表 | gzip |
Range | 仅请求某个实体的一部分,字节偏移以0开始(应用: 断点下载) | bytes=500-999 |
Origin | 发起一个针对跨域资源共享的请求 | https://zh.wikipedia.org/ |
Cookie | 之前由服务器通过Set-Cookie发送的Cookie | $version=1 |
Cache-Control | 用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令 | no-cache |
响应头字段
头字段名 | 说明 | 示例 |
---|---|---|
Content-Type | 响应体的类型 | text/html |
Content-Encoding | 内容所使用的编码类型 | gzip |
Content-Length | 响应体的长度(字节为单位) | 100 |
Content-Disposition | 一个可以让客户端下载文件并建议文件名的头部 | attachment; filename="fname.txt" |
Accept-Ranges | 服务器支持那些种类的部分内容范围 | bytes |
Content-Range | 这条消息是属于完整消息的那部分 | Content-Range: bytes 21010-323/4343 |
状态码
状态码指示HTTP
请求是否已完成.
状态码可以分为5类
- 消息响应: 100~199
- 成功响应: 200~299
- 重定向: 300~399
- 客户端错误: 400-499
- 405: 服务器禁止了使用当前的
HTTP
方法请求
- 405: 服务器禁止了使用当前的
- 服务端错误: 500-599
跨域
文件传输
- FTP
电子邮件
- SMTP, POP3, IMAP
动态主机配置
动态主机配置协议: 指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码
静态
IP
地址- 手动配置
- 适用场景: 不怎么挪动的台式机, 服务器等
动态
IP
地址- 从
DHCP
服务器自动获取IP
地址 - 适用场景: 移动设备, 无线设备等.
- 从
DHCP
协议基于UDP
协议, 客户端是68端口, 服务器是67端口.
分配IP地址的4个阶段
- DISCOVER: 发现服务器
- 发广播报
- OFFER: 提供租约
- 服务器返回可以租用的
IP
地址,以及租用期限,子网掩码,网关,DNS等信息.
- 服务器返回可以租用的
- REQUEST: 选择IP地址
- 客户端选择一个
OFFER
, 发送广播包进行回应.
- 客户端选择一个
- ACKNOWLEDGE: 确认
- 被选中的服务器发送
ACK
数据包给客户端.
- 被选中的服务器发送
域名系统
DNS
Domain Name System
利用DNS, 可以将域名解析成对应的IP地址.
DNS可以基于UDP协议,也可以基于TCP协议, 服务器占用53端口.