网络分层模型和应用协议

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

网络分层模型和应用协议

分层模型

分层模型的意义

当遇到一个复杂问题的时候可以使用分层的思想把问题简单化。
比如 你有一杯82年的可乐想要分享给你的朋友张富贵但你们已经很久没有联系要完成这件事你可能需要考虑

  • 我用什么装可乐
    • 可能的方案塑料瓶、玻璃瓶、煤气罐
  • 怎么保证可乐始终保持低温
    • 可能的方案 保温箱、小冰箱
  • 如何保证可乐不被运输的人偷喝
    • 封条、在上面写毒药
  • 如何获取张富贵的地址
    • 可能的方案 报案失踪 联系私人侦探、联系物流公司朋友
  • 如何运输
    • 可能的方案自行车、汽车、火车、高铁、飞机、火箭

这样就形成了一个分层结构
在这里插入图片描述
从常理出发我们可以得出以下结论

  • 每层相对独立只解决自己的问题
  • 每层无须考虑上层的交付仅需把自己的结果交给下层即可
  • 每层由多种方案可供选择选择不同的方案不会对上下层造成影响
  • 每一层会在上一层的基础上增加一些额外信息

五层网络模型

网络解决的问题是 两个程序之间如果交换数据
这是一个非常复杂的问题因为两个程序有可能出现在不同的设备上。
那么面对复杂的问题可以使用分层的方式来简化
经过不断的演化网络 最终形成了五层模型 如下图所示
在这里插入图片描述

数据的传输

由一个程序(发送方)发送数据数据在传输的过程中会进行五成网络模型从上到下的依次封装在另一个程序接收方接收到数据之后会将数据从下到上依次解封装保证数据的正确性
在这里插入图片描述

四层、七层、五层网络模型

在这里插入图片描述

应用层协议

URL

URLuniform resource locator, 统一资源定位符用于定位网络服务
在这里插入图片描述
URL是一个固定格式的字符串
在这里插入图片描述
它表达了
从网络中哪台计算机domain中的哪个程序port寻找哪个服务path并注明了获取服务的具体细节query以及要用什么样的协议通信schema
这里面包含了一些细节

  • 当协议是http端口为80时端口可以省略
  • 当协议时https端口为443时端口可以省略
  • schema、domain、path是必填的其他的根据具体要求填写

HTTP

超文本传输协议Hyper Text Transfer ProtocolHTTP是一个广泛运用于互联网的应用层协议
99%的情况下前端开发者接触的都是HTTP协议
该协议规定了两个方面的内容

  • 传递消息的模式
  • 传递消息的格式

传递消息的模式

在这里插入图片描述
HTTP使用了一种极为简单的消息传递模式[请求 - 响应]模式
发起请求的称之为客户端接收请求并完成响应的称之为服务器。【请求 - 响应】完成后一次性交互结束

传递消息的格式

在这里插入图片描述
HTTP消息格式是一种纯文本的格式文本分为三个部分:

请求行
请求头
					// ⇐ 注意这里是有一个空行 
请求体

具体每一部分写什么内容要看具体的服务要求

发送请求的工具

有非常多的工具都可以发送http请求比如 postman、apifox等但这里推荐一个非常直观的工具

  1. vscode安装插件 REST Client
    在这里插入图片描述
  2. 新建一个xxx.http 文件
  3. 编写请求脚本
POST /api/user/login HTTP/1.1
Host: study.duyiedu.com
Content-Type: application/json

{
  "loginId":"admin",
  "loginPwd":"123123"
}
  1. 发送请求
    在这里插入图片描述

关键信息

请求方法

在请求行中的第一个单词是请求方法
在HTTP协议中请求方法仅仅有语义的区别只是表达了这次请求的【愿望】。
关于请求方法的协议原文见HTTP/1.1规范RFC7231-Chapte4
在这里插入图片描述
比如GET表达了客户端想要获取一些东西POST表达了客户端想要提交一些东西常见的请求方法有

  • GET获取
  • POST提交
  • PUT修改
  • DELETE删除

具体在开发中应该选择什么请求方法一定要看服务方的要求
通常情况下

  • 获取数据一般使用GET
  • 提交数据一般使用POST
  • 各种静态资源的获取一般使用GET

请求头 - HOST
HOST标注了URL地址中 的Domain + Port
示例

Host: study.duyiedu.com

请求头 - Content-Type
Content-Type标注了附带的请求具体是什么格式
比如请求体的数据为loginId:admin, loginPwd:123456, 请求体可以用不同的格式发出

Content-Type: application/x-www-form-urlencode

loginId=admin&loginPwd=123123
Content-Type: application/x-www-form-urlencode
{"loginId": "admin", "loginPwd": "123123"}
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryraPtlntBIqy4X2Ho

------WebKitFormBoundaryraPtlntBIqy4X2Ho
Content-Disposition: form-data; name="loginId"

admin
------WebKitFormBoundaryraPtlntBIqy4X2Ho
Content-Disposition: form-data; name="loginPwd"

123456
------WebKitFormBoundaryraPtlntBIqy4X2Ho--

响应码

响应码状态码、消息码是响应行中的一个数字后面往往跟上一个对应的单词用于表达服务器对这个响应的整体【态度】
常见的响应码大类有
在这里插入图片描述
常见的状态码

  1. 200 OK 一切正常
  2. 301 资源已被永久重定向
    你的请求我收到了但是呢你要的东西不在这个地址了我已经永远的把它移动到了一个新的地址麻烦你取请求新的地址地址我放到了响应头的Location中了
    试试请求www.douyutv.com
  3. 302资源已被临时重定向。
    你的请求我收到了但是呢你要的东西不在这个地址了我临时的把它移动到了一个新的地址麻烦你取请求新的地址地址我放到了请求头的Location中了
  4. 304文档内容未被修改。
    你的请求我收到了你要的东西跟之前是一样的没有任何的变化所以我就不给你结果了你自己就用以前的吧。啥你没有缓存以前的内容关我啥事
  5. 400语义有误当前请求无法被服务器理解
服务器无法识别为url地址内容
  1. 403 服务器拒绝执行。
    你的请求我已收到但是我就是不给你东西
  2. 404 资源不存在
    你的请求我收到了但我没有你要的东西
  3. 500 服务器内部错误。
    你的请求我已收到但这道题我不会解不出来先睡了

响应头 - Content-Type

Content-Type标注了附带的响应体是什么格式
常见的值有

  1. text/plain: 普通纯文本
  2. text/htmlhtml文档
  3. text/javascriptapplication/javascript: js代码
  4. text/css css代码
  5. image/jpeg jpg图片
  6. attachment附件
  7. 其他类型MIME文件
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“网络分层模型和应用协议” 的相关文章