前端网络基础-网络分层模型/XHR和Fetch

1.网络分层模型和网络请求

网络分层模型

TCP/IP模型(四层模型和五层模型只有下面两层稍有区分)

​ 一个叫物理链路层 / 一个分层数据链路和物理层

应用层 和具体应用相关的消息格式

传输层 保证消息可靠传递

网络层 在互联网中找到对方

数据链路层 在一个子网中找到对方

物理层 上面给我的东西我如何用信号表示

网络请求

1.请求方法

​ GET 获取

​ 一般在浏览器中发送get请求,请求体不会被发出去

​ POST 提交

​ PUT 修改

​ DELETE 删除

具体使用什么请求方法是看服务方的要求,请求方法表达了客户端的目的

2.请求行

​ 请求方法 请求路径 版本

​ 例如 GET / HTTP/1.1

3.请求头

键值对的形式

​ 属性名:值

必不可少的属性 ==> Host: 端口号/域名

常见的属性 Content-Type: 请求体中的数据格式

​ 告诉服务器后面的数据格式,按照这个格式去解析数据

​ 不同数据格式解析方法不一样, Content-Type和传上去的数据格式不同服务器解析不出来

上传文件的主要格式 multipart/form-data; boundary=aaa

​ 分隔符boundary

分割
第一个键值对

分割
第二个键值对

分割结束

Content-Disposition: form-data; name="我是后端文档规定的一个属性"

"我是一个合理的值"
--aaa(我是分割符号)


例如
Content-Disposition: form-data; name="xxx";
filename="111.png"
Content-Type: image/jpeg

< ./111.png     ====>这时会替换成二进制数据发送
--aaa

2.XHR和Fetch

1.XMLHttpRequest (XHR)

用于在浏览器中发起网络请求

  • 在不重新加载页面的情况下更新网页
  • 在页面已加载后从服务器请求数据
  • 在页面已加载后从服务器接收数据
  • 在后台向服务器发送数据

XMLHttpRequest 可以用于获取任何类型的数据,而不仅仅是 XML

使用xhr发起请求的步骤

1.创建一个xhr对象

let xhr = new  XMLHttpRequest();

2.配置请求,设置请求类型,url,是否异步等

xhr.open('GET', 'https://api.example.com/data', true);

3.设置请求头

xhr.setRequestHeader('Content-Type', 'application/json');

4.响应处理

绑定成功失败事件

5.请求异步处理

open 方法中的 async 参数设置为 true,则请求是异步的,可以设置异步处理

如果设置为 false,则是同步请求,JavaScript 会在请求完成前等待

6.发送请求

xhr.send();

对于 GET 请求,可以不传递参数;对于 POST 请求,参数通常通过 send 方法发送

let xhr = new XMLHttpRequest(); //创建实例对象
xhr.open('GET', 'https://api.example.com/data', true);//设置请求行

xhr.onload = function() {
  if (xhr.status >= 200 && xhr.status < 300) {
    console.log('Success!', xhr.responseText);
  } else {
    console.error('Request failed with status:', xhr.status);
  }
};//绑定成功响应处理

xhr.onerror = function() {
  console.error('Request failed');
}; //失败

xhr.send();//发送请求

2.Fetch

fetch() 第一个参数是url,第二个参数是作为配置对象,定制发出的http请求

fetch是基于promise来发送网络请求的,对比xhr的话,很多功能都能实现,但是因为fetch的状态只有成功或者失败,所以不能实现进度条功能(可以用随机数方法实现假进度条)

fetch()采用模块化设计,API 分散在多个对象上(Response 对象、Request 对象、Headers 对象)

默认向该网址发出 GET 请求,返回一个 Promise 对象

await语句必须放在try...catch,这样捕捉可能发生的错误

####请求判断

请求成功后返回一个response对象

Response.status属性,得到 HTTP 回应的真实状态码,才能判断请求是否成功

####数据读取

Response对象根据服务器返回的不同类型的数据,提供了不同的读取方法

response.text()可以用于获取文本数据
response.json()主要用于获取服务器返回的 JSON 数据
response.formData()主要用在 Service Worker 里面,拦截用户提交的表单,修改某些数据以后,再提交给服务器
response.blob()用于获取二进制文件
请求类型

1.POST

const response = await fetch(url, {
  method: 'POST',
  headers: {
    "Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  },
  body: 'foo=bar&lorem=ipsum',
});

const json = await response.json();//主要记得设置一个await来等待promise

2.提交JSON数据

将发送请求的Content-Type设成'application/json;charset=utf-8',因为默认发送的是纯文本

3.提交表单

获取表单元素的值,并将它们组织成一个对象或者 FormData 对象

其余步骤和POST差不多,注意数据类型

4.文件上传

上传二进制文件时,不用修改标头的Content-Type,浏览器会自动设置

使用Fetch发起请求的步骤

1.创建请求对象,指定url,请求类型,请求头,请求体

2.发送请求并处理响应

3.处理异步请求的错误

最基本的用法

fetch(url)
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json(); // 将响应体解析为 JSON
  })
  .then(data => {
    console.log('Fetch successful:', data);
    // 处理获取到的数据
  })
  .catch(error => {
    console.error('Fetch error:', error);
    // 处理错误
  });

async function fetchData() {
    try {
        const response = await fetch('https://api.example.com/data');
        const data = await response.json();
        console.log(data);
    } catch (error) {
        console.error('Error fetching data:', error);
    }
}
try...catch 是捕捉异常的语法,error是出现错误的原因或者异常对象
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxxxtrendd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值