什么时候请求数据:
>以前我们的数据都是写死的,在真实的开发中,需要通过用户的操作给用户想要的数据
怎么请求? 1. 2. 3.
1.要么用那5步 (原生的ajax,面试会用)
let xhr = new XMLHttpRequest /* get方式请求,其实就是url的方式请求 协议+域名+端口+?+查询信息+hash... 这里的url是拼接完整的 */ xxx.onclick = function(){ xhr.open('get',url,true); xhr.onreadystatechange = function(){ xhr.readyState //能够监听到5步,每一步分成0~4(分别代表什么意思?) //0:请求未初始化 //1:服务器连接已建立 //2:请求已接收 //3:请求处理中 //4:请求已完成,且响应已就绪(http状态码) };
//如果是post要设置请求头
//xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
xhr.send();//发送 } //第二种写法 xxx.onclick = function(){ xhr.open('get',url,true); xhr.onload = function(){ xhr.readyState }; xhr.send(); }
http常见的状态码:200/404/403...
101:切换协议 (比如:http->websocket)
200:客户端成功接收到服务器端的返回数据
301:永久重定向,资源(网页等)被永久转到其它URL
302:临时重定向
304:加载缓存
307:临时重定向,针对的是http传输协议
400:访问参数错误
401:没有访问权限
403:服务器接收到请求,但是拒绝处理。(一般见于文件或目录的权限设置)
404:请求的地址(资源)不存在
413:客户端请求的文件超过服务端的最大承载容量
500:未知的服务端错误
503:服务器超过最大的负荷
以太网:分为两个部分:1.标头:谁接收、谁发送、数据类型等。 2.数据 (head data)
MAC:就是接收和发送的网卡地址
广播:在发送MAC地址的时候,会向本网络的所有计算机发送数据,这些计算机接收到信息之后,会判断MAC地址和自己是否匹配,匹配就接收,不匹配就丢弃。
网络地址:它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络,这套地址就叫做“网络地址”,简称“网站”。
(确定计算机所在的子网络,在通过MAC地址找到具体的某台计算机)
IP:IPv4->我们用分成四段的十进制数表示IP地址,从0.0.0.0 ~ 255.255.255.255
分为两个部分:1.代表网络 2.代表主机
Ip数据包也分为“标头”和“数据”两部分(head data)
IP数据包整体作为以太网的数据部分,进行发送。(head head data)
所谓“子网掩码”就是代表子网络特征(只要在同一个网络下,子网掩码一定一样)
ARP协议:当发送数据的时候,2台计算机在同一网络下(能获取到IP地址,不能获取MAC地址),而ARP协议,可以通过IP地址找到MAC地址
端口(port):“传输层”的功能,就是建立“端口到端口”的通信。相比之下,“网络层”的功能是建立“主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。
UDP(协议)端口:有IP、发出端口和接收端口、MAC + 数据体(head head head data)
TCP协议:简单理解是有(确认接收)机制的UDP协议,可以知道对方已接收数据包,如果没收到就再次发送。
TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
post请求过程:1.浏览器请求tcp连接。2.服务器答应进行tcp连接。3.浏览器确认,并发送post请求头。4.服务器返回100 Continue 响应。5.浏览器发送数据。6.服务器返回200 OK 响应
get请求过程:1.浏览器请求tcp连接。2.服务器答应进行tcp连接。3.浏览器确认,并发送post请求头和数据。4.服务器返回200 OK响应。
2.fatch 原生提供的 ajax 的一种请求方式(未来会用)
(1)get
fetch(url) // url => /get?xx=yy&ff==ee
.then(d=>d.json())
.then(d=>{d就是我们请求回来的数据})
(2)post
fetch(/post,{
method : ' post ' ,
body:new URLSearchParams({key:val}).toString() //也可以这样写: body:'key=val&key2=val2'
headers:{ 'Content-Type','application/x-www-form-urlencoded' }
} , )
.then(d=>d.json())
.then(d=>{d就是我们请求回来的数据})
3.第三方封装的 ajax 请求方式: 一. jquery的$.ajax 二.axios (爱可信,工作会用)
jquery:
$.ajax({ })
axios:先引一个文件
axios.get(‘/get?user=xxxx’)
.then(e=>{e就是我们请求回来的数据});
axios.post('/post',{user:'xxx'})
.then(e=>{e就是我们请求回来的数据});
.catch(e=>{e请求失败的内容})
axios.all([get(),post()]) //两个([可以有N个])都请求成功之后再来判断。只要有一个请求失败,那么整个都失败,此时就进 .catch
.then(axios.spread(function(a , b){
}))
中间件:
2018-12-21