问题:页面展示调用查询方法查询全部数据的时候一直显示loading。。。,打开调试器显示 Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR,而少部分查询则正常显示。
因为数据中有图片转成的二进制数组,数据比较长,由此怀疑是返回数据大小的问题,经过排查发现查询全部时返回的json数据不全,被截断了,因此页面无法解析。(这个问题真的很坑,排查了很久才发现是nginx的问题)
经过查询资料,发现是nginx代理的问题。
原因
:
nginx对于小的反向代理请求是使用内存作中转,对于稍微大一点的,是使用临时文件系统来做中转的,临时文件目录/usr/local/nginx/proxy_temp,而对这个目录没有读写权限,导致数据不全。
解决:然后让运维看了下nginx的日志和目录权限,发现确实如此,给临时文件目录加上读写权限,搞定。
附上nginx机制解释:(引用自:
https://blog.csdn.net/j6915819/article/details/80603846
)
Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。
比如如下配置:
fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;
fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8
4K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2
4K 共 2 个 buffers。
当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。
内存中缓冲了 36Kb,剩下的会写入的文件中。而实际的情况是,运行 Nginx Process 的用户并没有 fastcgi_temp 目录的写权限,于是剩下的数据就丢失掉了。
注意:首先要检查确认前端页面html js等代码没有写错,一般页面数据加载不全,是数据格式错误或者加载到的页面代码错误。
问题:页面展示调用查询方法查询全部数据的时候一直显示loading。。。,打开调试器显示Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR,而少部分查询则正常显示。因为数据中有图片转成的二进制数组,数据比较长,由此怀疑是返回数据大小的问题,经过排查发现查询全部时返回的json数据不全,被截断了,因此页面无法解析。(这个问题真的很坑,排查...
ajax 返回
JSON
数据
,Size
数据
量大,传输时间长的解决方案
有一个接口需要一次性返回
数据
,
json
数据
的Size最大的时候,有将近1M的
数据
量,返回时间将近20s,是可忍,孰不可忍?
这个问题,是必须要解决的,估计除了我们自己,没人愿意等上20s了
减少SIze主要是两个方面:resources(资源) 和 transferred(传输);
首先,当然是压缩,分为2个方面
可压缩的字段内容,全部压缩
减少不必要的字段
然而,resources(资源) 和 transferr
解析
HTTP
响应的-超大
JSON
内容
一、需求背景
最近在做系统对接时遇到个比较特殊的情况,简要任务就是通过第三方提供的接口去查询对应的图片
数据
;(在一般情况下可能说
会
是返回他们的一个图片地址,然后再由我们系统进行下载流进行上传;要么是返回图片的Base64字符),也许Base64的对接方式更常见。
当然,接到这个需求的接口也是通过Base64的方式传送
数据
。那。。。这不是一般的情况吗,应该没什么问题吧,接收返回的
json
,然后解析Base64字符串,最后转为图片,不就完事了吗?
嗯。。。。你是对的,当时我
现在一般都是返回
json
格式
的
数据
,当后台返回
数据
量过大,
json
数据
就达到100m以上,这样
页面
接收很容易就崩溃了,这个情况下可以使用tomcat的压缩机制,如下
在tomcat的server.xml中的Connector节点中添加属性如下:
<Connector connectionTimeout="20000" port="8080" protocol="
HTTP
/1.1...
Post提交的
json
数据
较大时,后台接收到的
json
为null问题描述问题解决其他
将项目部署到服务器上之后,当post发送的
数据
量较大时,后台接收到的
数据
为null(这里是
json
数据
),通过服务器上项目运行日志可验证。
在tomcat的如下位置添加配置maxPostSize="-1",
如果是springboot项目在本地测试时,使用的是内嵌的Tomcat,则只需要在application.properties中添加:server.tomcat.max-
http
-post
计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。计算机网络之间以何种规则进行通信,就是网络模型研究问题?
网络模型一般是指
OSI(Open System Interconnection开放系统互连)参考模型
TCP/IP参考模型
网络参考模型
一条7M的
json
上传给我们,毫无意外的报错了:实体
数据
量
太大
。该如何修改以便适应大
数据
量的上传呢?在代码层面想不到解决方案,于是查看配置,百度之。
修改web.config配置两个节点:
<system.web>节点下<
http
Runtime...
在
Java
中,查询 MS SQL
数据
并返回前端的
JSON
格式
,常用的做法是使用 JDBC(
Java
Database Connectivity,
Java
数据
库连接)驱动来连接
数据
库,执行 SQL 查询语句,然后使用第三方库,例如 Jackson 或 Gson,将查询结果转换成
JSON
格式
。
以下是示例代码:
import
java
.sql.Connection;
import
java
.sql.DriverManager;
import
java
.sql.ResultSet;
import
java
.sql.SQLException;
import
java
.sql.Statement;
import com.google.gson.Gson;
public class MSSQLTo
JSON
{
public static void main(String[] args) {
String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=database;user=user;password=password;";
try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();) {
String SQL = "SELECT * FROM table";
ResultSet rs = stmt.executeQuery(SQL);
Gson gson = new Gson();
System.out.println(gson.to
Json
(rs));
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
在上面的代码中,首先连接到 MS SQL
数据
库,然后执行查询语句,并使用 Gson 将查询结果转换为
JSON
格式
。
注意:需要下载并导入 MS SQL JDBC 驱动,以及 Gson 库。