我的系统由一个角度应用程序组成,该应用程序与Spring启动应用程序中的 REST endpoint (POST) 进行通信。Spring启动配置为使用码头作为嵌入式服务器。角度应用程序具有调用 REST 终结点并将 json 对象作为负载发送的 TypeScript 代码。json 对象的大小将从 1 MB 到 10 MB 不等,具体取决于用户在浏览器中的选择。我的Spring启动应用程序在运行 Linux (CentOS) 的 Azure VM 中运行。对于某些请求,我得到HTTP错误413:请求大小太大。我做了一些搜索,发现了2种机制来调整Spring启动应用程序以克服此限制。
选项 1 使用此属性服务器.jetty 更改应用程序 .属性中的请求大小限制.max http-http-post-size=20971520 # HTTP 发布或放置内容的最大大小(以字节为单位)。
选项 2 使用主应用程序类中的一些 java 代码覆盖码头最大形式内容大小
@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
JettyEmbeddedServletContainerFactory jettyContainer =
new JettyEmbeddedServletContainerFactory();
org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer serverContainer = (org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer)jettyContainer.getEmbeddedServletContainer();
serverContainer.getServer().html" target="_blank">setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", "20971520");
return jettyContainer;
}
这些选项都不起作用,当某些请求很大时,我仍然会出错。
有没有更好的方法来解决这个问题?
注意:我只在运行 CentOS 的 Azure 虚拟机环境中看到此错误。在我运行Windows 10的机器中,我没有看到此错误
更新:我注意到当网络服务器重新启动时,第一个请求通过,但随后的请求失败。这表明服务器上有一些缓冲区或缓存没有及时清除。我的理解正确吗?
在您的示例中,您在bean定义中实例化的JettyEmbeddedServletContainer
从未使用过,您可以覆盖的bean是JettyEmbeddedServletContainerFactory
。查看EmbeddedServletContainerAutoConfiguration。EmbeddedJetty
魔术发生的地方。
要按您想要的方式修改属性,您可以使用JettyServerCustomizer
接口:
@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
factory.addServerCustomizers(server -> server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", 20971520));
return factor;
}
或EmbeddedServletContainerCustomizer
:
@Component
public class FormSizeCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
JettyEmbeddedServletContainerFactory factory = (JettyEmbeddedServletContainerFactory) container;
factory.addServerCustomizers(server -> server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize",
20971520));
}
}
此限制仅适用于具有application/x-www-form-urlencoded
内容类型的请求。要对application/json
请求(或其他内容类型)实施最大大小,您需要自定义代码。您可以通过检查Content-Length头或包装ServletInputStream
并在使用分块请求时强制使用最大大小来实现。
来源(Joakim是码头开发人员):码头和最大内容大小
在请求是多部分的情况下,将它们添加到application.properties文件中,并根据您的需要调整它们:
multipart.maxFileSize=20Mb
multipart.maxRequestSize=20Mb
否则,看看这个:https://stackoverflow.com/a/3861510/945214和这个:https://stackoverflow.com/a/36899004/945214
.max文件大小=200MB .max请求大小=200MB 这些设置在使用嵌入式 TOMCAT 运行时将起作用。
我们有一个网络应用程序,它用str_replace()替换一些文本。查找字符串和替换字符串存储在模板文件中。 我们需要将str_replace()函数替换为preg_replace(),以便能够在find字符串中使用regex(在同一模板文件中设置它们)。 在原始脚本中,我们有这样的php代码部分。 在一个文件中: 类SiteConfig{ } 在另一个文件中: 我试图用preg_replace替
我的web-config.xml是
好吧,我正在通过选择视图技术作为jsp开发一个Spring启动应用程序。但是当我尝试引导Spring启动应用程序时,我得到了白色级别的错误页面。 那么请复习下面的代码。帮我解决哪里出了问题?
当线程停止时,关闭Spring引导的正确方法是什么?我不应该使用Spring中的吗? 谢谢!
请帮助我在Spring启动应用程序,它不工作。我太紧张了。 文件夹列表 null 导入org.springframework.boot.springapplication;导入org.springframework.boot.autocigure.springbootapplication MainController类: 包装控制器; 和错误消息: 并且在资源/模板中有一个index.htm文件
从数据库获取数据时出错: 那我该怎么解决呢?