0%

应用层协议探究

应用层常见协议

应用层(英语:Application layer)位于OSI模型的第七层。应用层直接和应用程序接口结合,并提供常见的网络应用服务。应用层也向第六层表示层发出请求。

网络互联模型

超文本传输

HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议.

报文格式

ABNF是最严谨的HTTP报文格式描述形式, 如下所示:

ABNF实例RFC
1
2
3
4
HTTP-message   = start-line
*( header-field CRLF )
CRLF
[ message-body ]

示例图

1
2
3
4
start-line     = request-line / status-line
request-line = method SP request-target SP HTTP-version CRLF
status-line = HTTP-version SP status-code SP reason-phrase CRLF
reason-phrase = *( HTAB / SP / VCHAR / obs-text )

报文格式

Rules

URL的编码

URL中一旦出现了一些特殊字符(比如中文,空格),需要进行编码. 在浏览器的地址栏输入URL时, 采用URF-8进行编码.

请求方法

  • GET: 请求向指定的资源发出“显示”请求。使用GET方法应该只用在读取资料,而不应当被用于产生“副作用”的操作中,例如在网络应用程序中。其中一个原因是GET可能会被网络爬虫等随意访问。浏览器直接发出的GET只能由一个url触发。GET上要在url之外带一些参数就只能依靠url上附带querystringGET请求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方法请求
  • 服务端错误: 500-599

跨域

文件传输

  • FTP

电子邮件

  • SMTP, POP3, IMAP

动态主机配置

DHCP

动态主机配置协议: 指的是由服务器控制一段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端口.

------------- 本文结束感谢您的阅读-------------