-
2020-07-16 16:35:41
1.uniapp.request({})
uni.request({uni.request({ url: this.$api+'/Test/student/test', header: { 'content-type': 'application/x-www-form-urlencoded' //自定义请求头信息 }, //请求成功后返回 success: (res) => { // 请求成功之后将数据给Info if(res.statusCode===200) { self.Info = res.data; } } });
2.this.$axios({})
this.$axios({ method: 'get', url: this.$api + '/Test/student/test' // data: { // userName: 'Lan', // password: '123' // }, }) .then(function(res) { if (res.data.code === 1234) { self.Info = res.data } }) .catch(function(error) { console.log(error.statusCode) })
this. a p i , t h i s . api,this. api,this.axios要在main.js当中注册为全局变量
Vue.prototype.$api='http://192.168.2.114:8099' Vue.prototype.$axios=axios
完整示例代码:
<template> <view class="content"> <span>用户名:</span> <input class="username" type="text" :value="username" placeholder="请输入用户名" /> <view class=""> <button type="default" @click="getInfo()">测试</button> {{ Info }} </view> </view> </template> <script> export default { data() { return { Info: '', username: '工程师', pwd: '' } }, methods: { getInfo() { // var self = this; // uni.request({ // url: this.$api+'/Test/student/test', // header: { // 'content-type': 'application/x-www-form-urlencoded' //自定义请求头信息 // }, // //请求成功后返回 // success: (res) => { // // 请求成功之后将数据给Info // if(res.statusCode===200) // { // self.Info = res.data; // } // } // }); var self = this this.$axios({ method: 'get', url: this.$api + '/Test/student/test' // data: { // userName: 'Lan', // password: '123' // }, }) .then(function(res) { if (res.data.code === 1234) { self.Info = res.data } }) .catch(function(error) { console.log(error.statusCode) }) } } } </script> <style> .span { width: 30px; } .username { border-radius: 10px; border: 2rpx solid #007aff; width: 80px; padding: 10px; } </style> <!-- <template> <p>用户名:</p> <input type="text" placeholder="请输入用户名" value=""/> </template> <script></script> <style></style> -->
更多相关内容 -
同时发起多次批量POST请求
2018-06-23 17:36:00简单配置文件后一次性对多个地址发起多次请求, 可最多100线程同时发送请求 -
nbiot mqtt调试-onenet注册BC20
2022-02-25 17:26:27AT+MIPLCREATE,返回+MIPLCREATE: 0 ok,创建设备实例成功,实例id为0 AT+MIPLADDOBJ=0,3200,1,"1",1,1 AT+MIPLDISCOVERRSP=0,3200,1,4,"5750" AT+MIPLOPEN=0,360 上面操作完成后,就可以向Onenet平台发起注册请求,...
1.AT指令获取BC20的IMSI和IMEIAT+CIMI 查询IMSI 460081852805488 AT+CGSN=1 查询IMEI 862177045299172 AT+CSQ 查询NB信号强度 24,0,信号质量(0~31),确保信号质量大于 3,否则数据通信可能不稳定。 AT+CGATT? 测试是否附着网络 1
2.中移动onenet激活nbiot sim卡
https://open.iot.10086.cn/develop/global/product/#/console
NB-IoT物联网套件(务必选旧版本)—添加产品
点保存。
新建产品后,点击产品的名字进入下图页面后,点击左侧的设备列表,进入设备管理后,点击添加设备。
可以看到刚刚新建的设备了,显示为离线及订阅失败!接下来通过串口调试助手让设备上线!!!
3.发送AT指令让BC20模块上线AT+CESQ AT+CEREG?
返回+CEREG: 0,1,说明网络正常。
AT+MIPLCREATE,返回+MIPLCREATE: 0 ok,创建设备实例成功,实例id为0 AT+MIPLADDOBJ=0,3200,1,"1",1,1 AT+MIPLDISCOVERRSP=0,3200,1,4,"5750" AT+MIPLOPEN=0,360
上面操作完成后,就可以向Onenet平台发起注册请求,平台还是显示在线的
发送:AT+MIPLOPEN=0,3600
4.mqtt调试
4.1创建连接mqtt的服务器:AT+QMTOPEN=0,"test.com",1883
4.2将BC20作为客户端注册到MQTT服务器
AT+QMTCONN=0,"BC20"
4.3订阅主题 监听消息(可省)
AT+QMTSUB=0,1,"/bc20/gps",1
4.4BC20客户端向MQTT服务器d 主题/bc20/gps发布消息AT+QMTPUB=0,1,1,0 (BC26、BC20上传数据都是用这个)
AT+QMTPUB=0,1,1,0,"/bc20/gps","Hi,mqtt,can you hear me"
4.5在mqtt服务器就可以看到数据发送成功。
5.GPS功能测试
5.1启用 AGPS 功能
AGPS 是一种由外界提供接收机信号捕获与定位所需的信息数据的方式和技术。它既能加快接收机信号捕获和完成首次定位的速度,又能提高信号捕获与跟踪灵敏度。通过 AGPS 功能,模块可获取远程服务器上的辅助星历数据。模块下载完辅助星历数据后,自动将该数据注入到 GNSS 引擎,从而缩短 TTFF(首次定位时间) 。AT+QGNSSAGPS=1
5.2打开GNSS
GNSS是Global Navigation Satellite System,全球导航卫星系统,dao利用一组卫星的伪距、星历、卫星发射时间等观测量。AT+QGNSSC=1 +QGNSSC: 0 //未成功开启(加载GNSS 固件需要一定时间)。 +QGNSSC: 1 //返回1 表示开启成功。
5.3获取当前时刻指定的 NMEA 语句信息
AT+QGNSSRD="NMEA/RMC"
5.4查询当前时刻所有的 NMEA 语句信息
AT+QGNSSRD?
-
16 张图 | Nacos 架构原理①:一条注册请求会经历什么?
2022-04-21 15:30:16Nacos 作为注册中心,用来接收客户端(服务实例)发起的注册请求,并将注册信息存放... 随机节点:客户端随机选择集群中的一个 Nacos 节点发起注册,实现负载均衡。 路由转发:Nacos 节点收到注册请求后,看下是不Nacos 作为注册中心,用来接收客户端(服务实例)发起的注册请求,并将注册信息存放到注册中心进行管理。
那么一条注册请求到底会经历哪些步骤呢?
知识点预告
先上一张整体的流程图:
-
集群环境:如果是 Nacos 集群环境,那么拓扑结构是什么样的。
-
组装请求:客户端组装注册请求,下一步对 Nacos 服务发起远程调用。
-
随机节点:客户端随机选择集群中的一个 Nacos 节点发起注册,实现负载均衡。
-
路由转发:Nacos 节点收到注册请求后,看下是不是属于自己的,不是的话,就进行路由转发。
-
处理请求:转发给指定的节点后,该节点就会将注册请求中的实例信息解析出来,存到自定义的内存结构中。
-
最终一致性:通过 Nacos 自研的 Distro 协议执行
延迟异步任务
,将注册信息同步给集群中的其他节点,保证了数据的最终一致性。 -
异步重试:如果注册失败,客户端将会切换 Nacos 节点,再次发起注册请求,保证高可用性。
这些知识点里面还有很多细节,我会通过画图 + 源码剖析的方式给大家解答。如果遇到源码看不太懂的地方,可以多看下我画的图,然后翻下源码,对照着一起看。
小 Tip:本文使用的 Nacos 版本: 2.0.4。
一、源头:发起注册
1.1 阅读源码的小技巧
上篇我们讲到加上一个注解
@EnableDiscoveryClient
就可以使服务自动注册到 Nacos。那么这个发起注册的地方到底在哪呢?注册信息又是长什么样的呢?
告诉大家一个看源码的小技巧,拿到源码后,不是直接各个文件都看一篇,而是先看源码中带的 example 文件夹。如下图所示,找到 example 的 App 类,里面就有发起注册的实例代码。如下图所示:
当然,我们也可以通过官网给的 curl 命令发起 HTTP 请求:
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'
复制代码
留个问题:我们都是加一个 Nacos 注解
@EnableDiscoveryClient
,就会自动把服务实例注册到 Nacos,这个是怎么做到的?1.2 发起注册的流程图
先来看一下代码的流程图:
跟着这个流程图,我们 debug 来看下。
1.3 组装注册的实例信息
入口的核心代码如下图所示,它会组装注册的
实例信息
,放到一个 instance 变量里面:通过代码调试,我们可以看到里面的实例信息长这样:
1.4 组装注册请求 request
发起注册的核心方法是 doRegisterService(),组装的 request 如下图所示,里面有之前组装的实例信息 instance,还有指定的 namespace(Nacos 的命名空间)、serviceName(服务名),groupName(Nacos 的分组)。
1.5 发起远程调用
requestToServer() 方法里面会调用 RpcClient 的 request() 方法:
response = this.currentConnection.request(request, timeoutMills);
复制代码
就是向 Nacos 发起远程调用,如果是 Nacos 集群,则是向集群中的某个 Nacos 节点发起远程调用。
接下来我们看下客户端是如何选择一个 Nacos 节点进行注册的。
二、集群环境:分布式的前提
如果是 Nacos 集群环境,客户端会随机选择一个 Nacos 节点发起注册。
2.1 搭建好一套 Nacos 集群环境
为了讲解客户端是如何注册到 Nacos 集群环境的底层原理,我在本地搭建了一个 Nacos 集群环境,有 3 个 Nacos 服务,它们的 IP 相同,端口号不同。
192.168.10.197:8848
192.168.10.197:8858
192.168.10.197:8868
复制代码
然后服务 A 和服务 B 都是配置了 Nacos 集群的 IP 和 端口号的,配置如下所示
spring.cloud.nacos.discovery.server-addr
=192.168.10.197:8848,192.168.10.197:8858,192.168.10.197:8868
复制代码
整体的结构如下图所示,服务 A 和 服务 B 都往 Nacos 集群进行注册。
但是里面有一个问题:服务 A 注册时,是向所有 Nacos 节点发起注册呢?还是只向其中一个节点发起注册?如果只向一个节点注册,要向哪个节点注册呢?
答案:在 Client 发起注册之前,会有一个后台线程随机拿到 Nacos 集群服务列表中的一个地址。
Nacos 为什么会这样设计?
-
这其实就是一个负载均衡的思想在里面,每个节点都均匀的分摊请求。
-
保证高可用,当某个节点宕机后,重新拿到其他的 Nacos 节点来建立连接。
接下来我们看下服务 A 是怎么随机拿到一个 Nacos 节点的。
三、随机节点:平等的世界
我们来看下客户端是如何随机选择一个节点的,流程图如下:
那么如何找到这些代码逻辑呢?思路是怎么样的?
我们之前讲过,RpcClient 会发起 request 请求,用的是和 Nacos 建立
currentConnection
连接来发起调用,代码如下:// 发起调用
response = this.currentConnection.request(request, timeoutMills);
复制代码
这个
currentConnection
是客户端和 Nacos 集群中的某个节点建立的连接,我们找下它在哪里赋值的。代码如下:// 拿到 Nacos 节点信息
serverInfo = recommendServer.get() == null ? nextRpcServer() : recommendServer.get();
// 连接 Nacos 节点
connectToServer = connectToServer(serverInfo);
// 赋值 currentConnection
this.currentConnection = connectToServer;
复制代码
而连接的信息是通过参数 serverInfo 传进去的,所以我们再看下 serverInfo 在哪里赋值的。
这个 nextRpcServer() 方法里面会拿到一个随机的 Nacos 地址:
// 一个 int 随机数,范围 [0 ~ Nacos 个数)
currentIndex.set(new Random().nextInt(serverList.size()));
// index 自增 1
int index = currentIndex.incrementAndGet() % getServerList().size();
// 返回 Nacos 地址
return getServerList().get(index);
复制代码
小结:客户端生成一个随机数,然后通过这个随机数从 Nacos 服务列表中拿到一个 Nacos 服务地址返回给客户端,然后客户端通过这个地址和 Nacos 服务建立连接。Nacos 服务列表中的节点都是平等的,随机拿到的任何一个节点都是可以用来发起调用的。
四、路由转发:不是我的菜
4.1 发起和转发请求的流程
为了演示发起注册的流程,我在这里模拟了一个注册请求。
用的是 curl 命令,对 Nacos 节点(127.0.0.1:8848)发起注册请求:
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'
复制代码
请求 URL:/nacos/v1/ns/instance
请求参数:
-
serviceName=nacos.naming.serviceName
-
ip=20.18.7.11
-
port=8080'
之前我们讲到,Nacos 的有多个节点可以分别处理请求,当节点发现这个请求不是属于自己的,就会进行转发。
如下图所示:
服务 A 随机选择一个 Nacos 节点(图中为 Nacos1)发起注册请求,请求参数中包含了实例信息,Nacos 1 根据实例信息 hash + 取模拿到正确的节点,如果不属于自己,则将请求转发给其他节点(图中为 Nacos2)
那么路由转发的细节是怎么样的?这个就涉及到 Distro 协议了,我们接着往下看。
4.1 路由转发的逻辑
其实 Nacos 节点的路由转发逻辑比较简单,先来看下流程图:
步骤如下:
-
① Nacos 节点从客户端发起的 request 中拿到客户端的实例信息生成 distroTag,如 IP + port 或 service name。
-
② Nacos 根据 distroTag 生成 hash 值。
-
③ 用 hash 值对 Nacos 节点数进行
取余
,拿到余数,比如 0、1、2、3。 -
④ 根据余数从 Nacos 节点列表中拿到指定的节点地址。
我没看懂的点:我这里启动了三个 Nacos 节点,如下图所示的 三个 Running 节点。但是为什么 Nacos 的 ServersList 会多了一个 192.168.10.197:8848 的节点?
4.2 路由转发源码分析
入口文件是 DistroFilter.java:
naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java
复制代码
请求会先到 DistroFilter 类的 doFilter() 方法,拿到正确的节点地址后,将请求转发出去。
获取需要转发节点地址的代码如下:
// 找到 Nacos 集群中的目标节点
final String targetServer = distroMapper.mapSrv(distroTag);
// mapSrv 方法会先 hash,然后再取模,responsibleTag的值类似这样:"20.18.7.11:8080"
int index = distroHash(responsibleTag) % servers.size();
// distroHash 方法里面会对 客户端的 ip+port 字符串或者服务名字符串 进行 hash
Math.abs(responsibleTag.hashCode() % Integer.MAX_VALUE);
复制代码
不论是自己处理注册请求还是转发给其他节点来处理,都会把实例信息存储起来,那么是如何进行存储的?
五、处理请求:快到碗里来
Nacos 目前有两个版本,v1 和 v2,如果是 v1,则是 instanceController 来处理注册请求,否则用 instanceControllerV2。本篇我们只讲解 v1 版本是怎么处理请求的。
先上流程图:
测试用的发起注册的命令:
curl -X POST 'http://127.0.0.1:8858/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'
复制代码
核心代码就是这个:
有一个 synchronized 锁,将临时的实例信息存放起来,所以重点看下 这个 consistencyService.put() 方法做了什么事情。
先看下源码:
onPut(key, value);
// 开启 1s 的延迟任务,将数据同步给其他 Nacos 节点
distroProtocol.sync(new DistroKey(key,KeyBuilder.INSTANCE_LIST_KEY_PREFIX),DataOperation.CHANGE,
DistroConfig.getInstance().getSyncDelayMillis());
复制代码
这里面做了三件事情:
-
① 将实例信息存放到内存缓存 concurrentHashMap 里面。
-
② 添加一个任务到 BlockingQueue 里面,这个任务就是将最新的实例列表通过 UDP 的方式推送给所有客户端(服务实例),这样客户端就拿到了最新的服务实例列表。
-
③ 开启 1s 的延迟任务,将数据通过给其他 Nacos 节点。
注意:针对第二点和第三点,属于 Distro 一致性协议的一部分,里面的内容还比较多,我们放到下一讲专门来讲。
知识点预告:
-
这里的存储实例和同步的方式和 Eureka 有什么区别?Eureka 用的三层缓存架构,Nacos 用的 CopyOnWrite 技术。
-
如何推送给所有客户端的?UDP 方式。
-
如何同步给 Nacos 其他节点的?Distro 一致性协议。
六、总结
本文通过发起一条注册请求,讲解了 Nacos 客户端如何随机选择节点、Nacos Server 如何路由、Nacos Server 如何存储注册实例。
核心流程:
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!
所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【111】即可免费获取 -
-
axios请求接口发起两次请求(OPTIONS 与POST/GET)
2017-08-09 17:36:25使用axios发现每次调用接口都会有两个请求,第一个请求时OPTIONS请求,只有OPTIONS请求通过才会发送实际的请求。 为什么XMLHttpRequest的POST请求会变OPTIONS请求-XMLHttpRequest对象对HTTP请求的访问控制...使用axios发现每次调用接口都会有两个请求,第一个请求时OPTIONS请求,只有OPTIONS请求通过才会发送实际的请求。
为什么XMLHttpRequest的POST请求会变OPTIONS请求-XMLHttpRequest对象对HTTP请求的访问控制(CORS跨站资源共享);HTTP访问控制(CORS);通过这两篇文章可以知道什么是OPTIONS请求,如果要避免OPTIONS请求,则需要把预检请求改为简单请求;先看看简单请求和预检请求的条件。
简单请求:满足以下所有条件,即视为简单请求
- 使用下列方法之一:
- Fetch 规范定义了对 CORS 安全的首部字段集合,不得人为设置该集合之外的其他首部字段。该集合为:
Content-Type
的值仅限于下列三者之一:text/plain
multipart/form-data
application/x-www-form-urlencoded
- 请求中的任意
XMLHttpRequestUpload
对象均没有注册任何事件监听器;XMLHttpRequestUpload
对象可以使用XMLHttpRequest.upload
属性访问。 - 请求中没有使用
ReadableStream
对象。
预检请求:当请求满足下述任一条件时,即应首先发送预检请求
- 使用了下面任一 HTTP 方法:
- 人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。该集合为:
Accept
Accept-Language
Content-Language
Content-Type
(but note the additional requirements below)DPR
Downlink
Save-Data
Viewport-Width
Width
-
Content-Type
的值不属于下列之一:application/x-www-form-urlencoded
multipart/form-data
text/plain
- 请求中的
XMLHttpRequestUpload
对象注册了任意多个事件监听器。 - 请求中使用了
ReadableStream
对象。
如何避免预检请求呢?如何把预检请求改为简单请求呢?
1、不设置自定义请求头;
2、'Content-Type'设置为'application/x-www-form-urlencoded';
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
3、把json格式的data参数用qs序列化成字符串;
import axios from 'axios' import config from '@/config' import * as util from 'utils/common' import qs from 'querystring' let localUser = util.session('token') axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' const instance = axios.create({ timeout: config.timer.connTimeout * 1000, // 返回数据类型 responseType: 'json', // 表明是否有跨域请求 withCredentials: false }) //添加请求拦截器 instance.interceptors.request.use(function (config) { // 在发送请求之前做些什么 let data = config.data if (data) { localUser && localUser.token && (data.token = localUser.token) } let request = {} request.jsondata = JSON.stringify(data) request = qs.stringify(request) config.data = request return config }, function (error) { // 对请求错误做些什么 return Promise.reject(error) }) // 错误处理 instance.interceptors.response.use(function (response) { return response }, function (error) { // 对响应错误做点什么 return Promise.reject(error) }) export default instance
其实我们没有必要去避免OPTIONS请求,在实际项目中未必都是简单请求,也不是所有预检请求都可以转为简单请求,只需要后台配合设置一下跨域响应头部就可以解决了。
response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,PUT,DELETE"); response.setHeader(“Access-Control-Allow-Headers”, “x-requested-with,Authorization,Content-Type”);
-
移动网优大神VoLTE学习笔记(三):注册信令流程
2020-07-16 17:55:58如果校验不通过,这里将反馈注册请求拒绝(reject) 4、 I-CSCF从HSS获取的S-CSCF名称,通过名称-地址解决机制获取对应的S-CSCF地址,将注册请求发送给S-CSCF(含P-CSCF名称/地址,公共用户标识,私有用户标识,... -
Kafka的客户端NetworkClient如何发起的请求
2022-03-28 15:40:41《Kafka运维管控平台LogiKM》 ✏️更强大的管控能力✏️ 更高效的问题定位能力 更便捷的集群运维能力 更专业的资源治理 更友好的运维生态 文章目录 构建Request并发起请求 关键类 NetworkSend NetworkClientUtils ... -
笔记:NB-IOT常用AT命令
2020-05-24 23:03:22NB模组不同厂商的AT指令会有差异,具体使用查看模组的AT指令集。以下指令来自移远BC28。 1.请求制造商版本 AT+CGMR 2.请求产品序列号 AT+CGSN=x x可为1、2、3 1:IMEI ...8.设置注册模式 AT+QREGSWT -
5GC基础自学系列 | UE发起的业务请求(Service Request)流程
2022-04-01 13:48:51Service Request(业务请求)流程简介 UE发起的Service Requuest流程的场景(不考虑Non-3GPP场景): 在CM-IDLE态有上行方向信令要发送。【service type=signaling】 在CM-IDLE态有上行方向用户面数据要发送。... -
【5G核心网】free5GC 注册请求流程源码分析
2020-08-05 10:36:431. UE发起注册请求 NAS Message 结构体,包括安全头部,移动管理以及会话管理消息 // Message TODO:description type Message struct { SecurityHeader *GmmMessage *GsmMessage } 注册请求设置移动管理... -
01-RestTemplate发起http请求远程调用
2021-11-10 13:54:061.注册RestTemplate package cn.itcast.order; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.... -
WEB 请求处理 一:浏览器 请求发起处理
2018-12-10 15:17:11最近,终于要把《WEB请求处理系列》提上日程了,一直答应小伙伴们给分享一套完整的WEB请求处理流程:从浏览器、Nginx、Servlet容器,最终到应用程序WEB请求的一个处理流程,前段时间由于其他工作事情的安排,一直未... -
spring 发送http请求
2021-03-26 17:13:31########################### HttpMessageConverter Spring-web模块包含...spring web框架提供了主要MIME type的HttpMessageConverter实现,在客户端RestTemplate来注册这些实现,在服务器端RequestMethodH -
客户端浏览器向服务器发起http请求的全过程
2017-07-22 16:26:07http协议的参考:... (1)浏览器先搜索自身的DNS缓存 (2)操作系统搜索自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效) ...(4)浏览器发起一个DNS的一个系统调用 宽带运营商服务器查看 -
访问一个网页,浏览器至少发起几次http请求
2019-09-08 14:50:28有次面试被问到打开一个url浏览器至少发起几次http请求,刚开始有点懵,心想浏览器至少发生一次http请求啊这个有什么好问的?get不到面试官的care点!回头去网上查了一下资料才恍然大悟原来是要考察服务端渲染和... -
深入web请求过程:如何发起请求,HTTP协议解析,DNS域名解析
2015-02-12 14:27:48B/S架构两方面好处:客户端使用统一的浏览器Browser;... HTTP协议采用无状态的短...如何发起一个请求 当一个用户在浏览器里输入www.pingan.com这个URL时: 1.请求DNS把这个域名解析成对应的IP地址。 2.根据IP地址在互联 -
NodeJs 模仿SIP话机注册的方法
2021-01-01 16:31:08模拟SIP话机频繁向服务器发起注册请求,以得到服务器最大SIP注册数 项目实现概述 终端输入连续注册分机的开始分机号和结束分机号 终端输入统一的SIP注册密码 终端输入服务器地址 先进行用户登录鉴权,用户登录... -
WEB请求处理(1):浏览器请求发起处理
2016-05-14 22:51:19于是运营商的DNS又向google.com这个域名的DNS地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求(请问www.google.com这个域名的IP地址是多少?),这个时候google.com域的DNS服务器一查,果真在我... -
axios配置及使用(发起请求时带上token)
2020-03-23 09:28:01//配置请求头 //添加一个请求拦截器 axios.interceptors.request.use(function (config) { let user = JSON.parse(window.sessionStorage.getItem('access-user')); if (user) { token = user.token; } config.... -
axios 跨域请求详情
2021-05-24 19:43:31写这篇文章的背景是因为之前遇到的,在跨域的情况下通过 axios 发起的 get 请求正常,post 请求会在正式请求发送之前先发送一个 opstions 请求,而后端接口没有兼容 options,导致 404 的情况。 而在解决这个问题时... -
使用nginx反向代理发起跨域请求
2018-08-22 11:39:48浏览器可以通过JavaScript脚本向服务器发起HTTP请求。Ajax即脚本发起HTTP通信(Asynchronous JavaScript and XML)(异步JavaScript和XML),可以无刷新读取数据。 在任务里使用Ajax获取登录的用户密码,并和后台的... -
NR 5G 网络发起的去注册流程
2020-07-18 21:38:17网络发起的去注册过程 如果UDM请求立即删除用户的RM contexts 和PDU Sessions, UDM 将发送Nudm_UECM_DeregistrationNotification (SUPI, Access Type, Removal Reason)消息。 这条消息包含的Removal Reason被设置... -
注册(十一)重注册带有鉴权信息
2014-06-09 09:16:06重注册消息带有鉴权信息,不需要发起新的鉴权挑战 -
WEB请求处理一:浏览器请求发起处理
2018-04-19 21:14:22https://www.jianshu.com/p/558455228c43最近,终于要把《WEB请求处理系列》提上日程了,一直答应小伙伴们给分享一套完整的WEB请求处理流程:从浏览器、Nginx、Servlet容器,最终到应用程序WEB请求的一个处理流程,... -
登陆注册原理图.png
2020-11-20 16:01:17sso认证中心向所有注册系统发起注销请求 各注册系统接收sso认证中心的注销请求,销毁局部会话 sso认证中心引导用户至登录页面 -
HTTP请求过程 常见协议 请求类型 状态码 websocket
2022-03-06 19:46:44HTTP(HyperText Transfer Protocol)超文本传输协议,是一种用于分布式、协作式...HTTP 通过使用浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口。它指定了客户端可能发送给服务器什么样的 -
vue发送Ajax请求实例
2022-01-17 09:37:14vue本身不支持发送AJAX请求,需要使用vue-resource(vue1.0版本)、axios(vue2.0版本)等插件实现 axios是一个基于Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对vue-resource进行更新... -
在 Web 程序中发送 Ajax 请求
2022-04-12 11:19:28在 Web 程序中发送 Ajax 请求AjaxXMLJSONjQuery Ajax Ajax = Asynchronous JavaScript and XML 异步 JavaScript 和 XML 可用于实现异步通信的技术 AJAX 而是一种使用现有标准的技术 AJAX 是基于 JavaScript和XML... -
使用spark对dataframe的某一列调用HTTP请求并返回数据给dataframe
2019-06-23 11:58:40//注册udf val udf_url = udf(send_http_request _) val r = studentScoresDF.withColumn("res", udf_url($"name")) r.printSchema() r.show() } } maven配置 xmlns:xsi=...