java - 为什么 Glassfish Jersey 会为大型帖子正文发送格式错误的请求正文?
问题描述
以下问题发生在最新版本“3.0.2”中。这些是我的依赖项:
dependencies {
compile "org.glassfish.jersey.core:jersey-client:3.0.2"
implementation 'org.glassfish.jersey.inject:jersey-hk2:3.0.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
当执行以下发布请求时,服务器收到的请求正文对于长度大于或等于 65840 的任何实体都是错误的。
import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import jakarta.ws.rs.client.Entity;
import jakarta.ws.rs.core.Response;
public class MyClass {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
// int count = 65839; // Works
int count = 65840; // Doesn't work
String body = new String(new char[count]).replace("\0", "A");
assert (body.length() == count);
Response response = null;
try {
response = client.target("http://localhost:8888/")
.request()
.post(Entity.text(body));
} catch (Exception e) {
e.printStackTrace();
}
}
}
要重现此问题,请运行服务器,nc -l 8888 > output.txt
然后运行 java 代码。输出如下所示:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPOST / HTTP/1.1
Content-Type: text/plain
User-Agent: Jersey/3.0.2 (HttpUrlConnection 1.8.0_212)
Host: localhost:8888
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 65840
AAAAAAAAAAAAAAAAA... (Rest Of The Body)
而对于长度小于 65840 的任何主体,输出如下所示:
POST / HTTP/1.1
Content-Type: text/plain
User-Agent: Jersey/3.0.2 (HttpUrlConnection 1.8.0_212)
Host: localhost:8888
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 65839
AAAAAAAAAAAAAAAAA... (Rest Of The Body)
解决方案
推荐阅读
- javascript - 从斜杠分割JS中的字符串
- apache-flink - 如何在 AWS EMR 上使用 Apache Flink 安全地更新正在进行的作业?
- ffmpeg - ffmpeg -master_pl_name 获取正确的编解码器
- c# - BackgroundWorker 运行时动画冻结 - WPF
- android - 构建数据库时的名称参数应该是什么?
- javascript - “导入的内容为空”Google 表格
- python - numpy.random.seed() 每次总是给出相同的随机数吗?
- applescript - applescript 是死语言吗?
- jquery - 将活动类添加到多级菜单的当前页面 url 的父级
- javascript - vue,v-for,如何通过只读数组中的第一个索引来取消重复数据?