java - 强制 tomcat 仅使用 HTTP 1.0 或忽略 except 标头
问题描述
是否有可能强制 tomcat 忽略“Expect”标头或仅使用 HTTP 1.0?
我正在发送 curl 请求curl POST -vv 'http://127.0.0.1:8080/test' -d "@requests/test.xml" -H "SOAPAction: abc/test" -H "Content-Type: text/xml; charset=UTF-8"
,并且 curl 默认添加了“Expect”标头,这会导致服务器等待另一个永远不会到来的请求。
技术栈:Springboot 2.1.3.RELEASE、Tomcat 9.0.16
我不能修改客户和他们的请求空标题“期望:”。
解决方案
我认为没有办法让 Tomcat 只响应 HTTP 1.0 响应。那将是违反协议的。如果服务器收到 HTTP 1.1 请求,它必须要么以兼容 HTTP 1.1 的响应进行响应,要么以错误信号表示它不能505 HTTP Version Not Supported
。
同样,我认为没有办法让 Tomcat 忽略(格式正确/非空)Expect 标头。这也将违反协议。
(虽然理论上服务器可能违反规范,但我找不到配置 Tomcat 的方法来做到这一点。显然你可以下载 Tomcat 源代码并修改它,但是你有维护你的问题“叉子”。)
那么有哪些替代方案:
HTTP 规范规定服务器必须忽略 HTTP 1.0 请求中的 Expect 标头。因此,您可以将
--http1.0
选项添加到curl
命令中。该
curl
命令使用默认文件 -~/.curlrc
来获取各种事物的默认覆盖。您可以将 Expect 标头的空默认值添加到此文件中;请参阅如何为 curl 设置默认的“Expect”标头。
但是,我认为您可能会过度担心:
如果您担心这会减慢客户端 (
curl
),请不要这样做。默认情况下,它只等待 1 秒的100 Continue
响应。(而且我认为这不是你在说的......)如果您担心这可能会占用服务器端资源(在 Tomcat 中),我看不出这有多重要。如果没有活动,Tomcat 服务器将超时并关闭客户端连接。这应该处理
curl
发送初始请求但不跟进的命令。
推荐阅读
- python - pygame中相同生物的掩码倍数问题
- python - 内置库 VS 安装在“lib”文件夹中的库
- php - 使用 mysqli 但不是 mysql 访问被拒绝或空白页面
- handlebars.js - 如何覆盖 Handlebars 的 `if` 助手
- python-3.x - 如何在 Python 中扩展 List 容量?
- wifi - Captival 门户中不允许的用户代理 (Google Oauth)
- querydsl - 如何在 Querydsl 中创建子查询
- python - 使用 init_app() 进行 mongo 初始化的 Flask-PyMongo 异常
- r - 过滤列值以一组模式结尾的行
- linux - 无需验证数据库,我可以访问 mongodb 中的数据