java - 将 Spring Boot 与 Angular 4 一起使用时出现 HTTP 413 错误

标签 java http spring-boot centos jetty

我的系统由一个角度应用程序组成,该应用程序与 Spring Boot 应用程序中的 REST 端点 (POST) 进行通信。 Spring boot配置为使用jetty作为嵌入式服务器。角度应用程序具有调用 REST 端点并发送 json 对象作为负载的 TypeScript 代码。根据用户在浏览器中的选择,json 对象的大小将从 1 MB 到 10 MB 不等。 我的 Spring Boot 应用程序在运行 Linux (CentOS) 的 Azure VM 中运行。 对于某些请求,我收到 HTTP 错误 413:请求大小太大。 我做了一些搜索,发现了 2 种机制来调整 Spring Boot 应用程序来克服这个限制。

选项 1 使用此属性更改 application.properties 中的请求大小限制 server.jetty.max-http-post-size=20971520 # HTTP post 或 put 内容的最大大小(以字节为单位)。

选项 2 在主应用程序类中使用一些java代码覆盖jetty maxFormContentSize

@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().setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", "20971520");
    return jettyContainer;
}

这些选项都不起作用,当某些请求很大时我仍然收到错误。

有没有更好的方法来解决这个问题?

注意:我仅在运行 CentOS 的 Azure VM 环境中看到此错误。在我运行 Windows 10 的机器中,我没有看到此错误

更新:我注意到,当网络服务器重新启动时,第一个请求会通过,但后续请求会失败。这表明服务器上有一些缓冲区或缓存没有及时清除。我的理解正确吗?

最佳答案

spring.http.multipart.max-file-size=200MB

spring.http.multipart.max-request-size=200MB

当您使用嵌入式 TOMCAT 运行时,这些设置将起作用。

关于java - 将 Spring Boot 与 Angular 4 一起使用时出现 HTTP 413 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49294421/

相关文章:

java - 传承理念

java - 使用 if 语句我可以用逻辑引用类的任何实例吗?

使用文件系统将java图像输出到zip文件为空

node.js - 使用 Node.js 扩展现有的 RESTful API

javascript - DRYing JSON 有什么众所周知的方法吗

java - Spring Boot无法连接到部署在另一个kubernetes pod上的postgres数据库

java - Wicket CheckBoxMultipleChoice 不更新

http - 如何解释空的 HTTP Accept header ?

reactjs - React-Admin 正在用相同的元素填充我的 <List>

java - hibernate 不保存外键