[交互]交互的实战问题1

[交互]交互的实战问题1

  • 状态码 431 Request Header Fields Too Large
  • Referrer Policy: no-referrer-when-downgrade
  • 路径参数
  • 高并发问题
    • 使用场景
    • 使用的方法
    • 异常情况

状态码 431 Request Header Fields Too Large

最近做项目,遇到一个问题,后台导出表格时,当条数超过一定数量时,会报:431 Request Header Fields Too Large 的问题,然后就在网上搜索这个问题,本质的问题就是 http 请求 header 过大。

这个问题网上的解决方案基本一致,就是修改服务器的 header 的大小。方案如下:

在 springboot 项目中,在 yml 文件中,添加如下内容:

server:
port: 8090
tomcat:
max-swallow-size: -1
max-http-header-size: 2MB

需要说明的是,max-http-header-size 是在 server 下,不是 tomcat 下。

网上很多人这样修改后都成功了,我的依旧报这个错误。然后我分析了一下,既然是服务器的问题,我用的是前后端分离,请求首先到达的是 ngnix,然后我又查了 ngnix 相关的修改,ngnix.conf 的修改如下:

http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#'$status $body_bytes_sent "$http_referer" '#'"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;client_header_buffer_size 10240k;large_client_header_buffers 6 10240k;
}

就是修改了 client_header_buffer_size 和 large_client_header_buffers 两个值。如果你的 ngnix.conf 中没有这个值,添加上就行。

修改后,项目的问题就没有了。

Referrer Policy: no-referrer-when-downgrade

发出请求,导致出现 Referrer Policy: no-referrer-when-downgrade,一直请求不成功

分析后发现,是请求连接出现问题,我这里的问题是-api 前少了/,导致请求 API 和域名拼接起来,所以导致上方问题。

  • referrer-http 表示请求来源的字段
  • no-referrer-when-downgrade 表示从 https 协议降级为 http 协议时不发送 referrer 给跳转到的网站的服务器。

路径参数

路径参数,这里的路径参数是指请求路径中拼接的参数,不是指 get 请求后拼接的参数

示例:

/car/{id}/color

我看到服务端大多使用路径参数,我很少使用改方式,主要是{id}作为一个参数,存在很多不确定性,例如:id 中有.等特殊字符会导致服务端参数获取出现问题,会增加报错的风险

示例:
获取所有 year 生产的车列表

/car/{year}

获取所有具有某个色号的车列表

/car/{colorId}

以上则会产生混乱的风险

虽然也可以通过添加前缀加以区分,但是为什么要使用该方式?通过解说,发现这个好像是后端 restful 风格的最佳实践…

高并发问题

使用场景

一般当页面初始化的时候,可能存需要通过多个接口获取多个初始化数据

单个接口分别发出请求也能达到获取初始化数据,但是如果请求过多,并且获取的时间相差太大,导致有的接口已经完成有的仍在获取,影响用户操作,因此希望三者可以同步

使用的方法

const config = {url: "",method: "",params: {} //get 方法,其他的是data
};axios.all([axios(config1), axios(config2), axios(config3)]).then(axios.spread(function (res1, res2, res3) {console.log("所有请求完成");console.log("请求1结果", res1);console.log("请求2结果", res2);console.log("请求3结果", res3);})
);

异常情况

只要一个接口存在异常,就无法获取正常返回接口的处理,只能对异常的结果进行处理

虽然返回的异常结果可以明确说明是哪个接口,并返回错误信息,但是当有多个接口错误的时候,仅仅返回第一个错误的信息,其他接口的错误信息并不返回,并且正常的接口也没有返回信息,无法回调
在这里插入图片描述

而在正常情况下,我们需要针对正常与异常返回数据的接口,分别回调进行数据处理

此时在网上找到了解决的方案,但是网上的代码有点难以理解,理解了半天,终于明白,关键问题是添加以下代码:

axios(one).catch((error) => ({ error }));

最终代码为:

const all = (config) => {const list = config.map((one) => {return axios(one).catch((error) => ({ error }));});return new Promise((resolve, reject) => {axios.all(list).then((...res) => {const someError = res.some((one) => one.error);if (someError) {throw res;}resolve(res);}).catch((erro) => {reject(erro);});});
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GeoSOS-FLUS未来土地利用变化情景模拟模型

软件简介 适用场景 GeoSOS-FLUS软件能较好的应用于土地利用变化模拟与未来土地利用情景 的预测和分析中,是进行地理空间模拟、参与空间优化、辅助决策制定的有效工 具。FLUS 模型可直接用于: 城市发展模拟及城市增长边界划定;城市内 部高分…

Java基础篇

目录 1、Java语言有哪些特点 2、面向对象和面向过程的区别 3、八种基本数据类型的大小 4、标识符命名规则 5、Java 关键字 6、访问控制 7、instanceof 关键字的作用 8、final 关键字的作用 9、static 关键字作用 10、transient 关键字的作用 11、try catch final…

Virtualbox中Ubuntu根目录空间不足

现象 Virtualbox中Ubuntu根目录空间不足 解决 动态存储 虚拟机关闭先在虚拟介质管理里把硬盘Size调大开启Ubuntu用Disks或者GParted重新调整分区大小重新启动 步骤参考: https://zhuanlan.zhihu.com/p/319431032 https://blog.csdn.net/ningmengzhihe/article/details/1272…

数据结构与算法:树

目录 树 定义 结构 二叉树 定义 结构 形式 满二叉树 完全二叉树 存储 链式存储结构 数组 孩子节点 父节点 应用 查找 维持相对顺序 遍历 深度优先遍历 前序遍历 中序遍历 后序遍历 广度优先遍历 层序遍历 二叉堆 定义 自我调整 操作 插入加点 删…

408强化(番外)文件管理

有点看不下去书,408,哎好久没看了,死磕数学时完全不想看其他科目,数学分数也尚未质变。 突然想到一个好点子,只看大纲尝试回忆一下这章的内容。 文件就是为了方便用户使用,按名访问而提出的,从…

OPC是通讯协议吗安全性

目录 1 安全防护 1.1 防火墙 1.2 网闸 2 OPC是通讯协议吗 2.1 什么通讯协议 2.2 那么OPC又是什么? OPC官方说明文档 1 安全防护 本文阐述了控制网络以OPC接口接入信息网络应当采用的安全防护。 1.1 防火墙 防火墙是大家熟知的网络安全产品,并被用作控制网…

分布式事务解决方案之可靠消息最终一致性

分布式事务解决方案之可靠消息最终一致性 什么是可靠消息最终一致性事务 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能 够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终…

SpringMVC多文件上传

文章目录 一、文件上传1.1 导入pom依赖1.2 配置文件上传解析器1.3 设置文件上传表单1.4 实现文件上传 二、文件下载三、多文件上传四、JRebel的使用 一、文件上传 1.1 导入pom依赖 <commons-fileupload.version>1.3.3</commons-fileupload.version><dependency…

LeetCode(力扣)435. 无重叠区间Python

LeetCode435. 无重叠区间 题目链接代码 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/ 代码 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if not intervals:return 0intervals.sort(keylambda x: x[0])co…

关于content-type的理解

一.content-type的结论 告诉后端传过去的数据是什么类型的数据 二.没有请求体 (1)没有请求体的情况下content-type没有意义。 (2):图示 里面是没有请求体的 (3)有请求体的情况 二.常见的三种方式 (1)application/x-www-form-urlencoded(默认) 参数的表现形式: 传递之前可以…

如何将一个字符串转换为驼峰命名法(camel case)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

揭秘弹幕游戏制作

最近好多人问弹幕游戏&#xff0c;甚至是招人的也要DOTS做弹幕游戏... 实际上目前的弹幕游戏绝大多数应该和DOTS没有半点关系&#xff0c;别忘了DOTS这项技术渲染问题还没能够被合理解决呢 所以目前用的全都是GPU Instance这项技术&#xff0c;于是乎我决定下场写这篇帖子&am…