【问题标题】:Force tomcat to use only HTTP 1.0 or ignore Except header强制 tomcat 仅使用 HTTP 1.0 或忽略 except 标头
【发布时间】:2020-03-22 20:25:50
【问题描述】:

是否有可能强制 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

我无法修改客户端及其请求的空标头“期望:”。

【问题讨论】:

    标签: java spring-boot tomcat curl http-headers


    【解决方案1】:

    我认为没有办法让 Tomcat 只响应 HTTP 1.0 响应。那将是违反协议的。如果服务器收到 HTTP 1.1 请求,它必须要么以兼容 HTTP 1.1 的响应进行响应,要么以 505 HTTP Version Not Supported 错误表示它不能。

    同样,我认为没有办法让 Tomcat 忽略(格式正确/非空)Expect 标头。这也是违反协议的。

    (虽然理论上服务器可能违反规范,但我找不到配置 Tomcat 的方法来做到这一点。显然你可以下载 Tomcat 源代码并对其进行修改,但是你遇到了问题维护你的“叉子”。)


    那么有什么替代方案:

    1. HTTP 规范规定服务器必须忽略 HTTP 1.0 请求中的 Expect 标头。因此,您可以将--http1.0 选项添加到curl 命令。

    2. curl 命令使用默认文件 - ~/.curlrc - 来获取各种内容的默认覆盖。您可以将 Expect 标头的空默认值添加到此文件中;见How to setup default "Expect" header for curl

    但是,我认为您可能会过度担心:

    1. 如果您担心这会拖慢客户端 (curl),请不要这样做。默认情况下,它只等待 1 秒的 100 Continue 响应。 (而且我认为这不是你在说的......)

    2. 如果您担心这可能会占用服务器端资源(在 Tomcat 中),我看不出这有什么意义。如果没有活动,Tomcat 服务器将超时并关闭客户端连接。这应该处理发送初始请求但不跟进的curl 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多