我在 w3.org 没有找到答案。
几乎所有示例都包含 soap-response http-header 中的内容长度。
第一个问题:但是在技术上有必要吗?
我正在努力使用一个肥皂服务,其中php-soap库(PEAR SOAP_Server)正在设置响应XML的正确内容长度,但之后的Lighttpd正在压缩内容,因此我得到的响应比内容长度小。
像soapUI这样的应用程序正在等待所有内容(由http-header设置)到达。
第二个问:
- 谁在这个链中的行为/配置是错误的? php -> lighttpd -> soapUI
- 是PHP代码设置解压缩的内容长度吗?
- 是 lighttpd 压缩响应,但不覆盖或删除内容长度标头?
- 还是肥皂UI,它不应该等待 15 秒才能获得更多内容?
编辑:进一步的调查显示,php脚本正在压缩内容本身,并且始终设置um压缩的内容长度,而不是lighttpd。
尽管如此,Tom van der Woerdts的回答还是很有帮助的。
第一个问题
不,因为 HTTP 1.1 规范不需要 Content-Length
标头,并且 SOAP 构建在 HTTP 之上。您的 SOAP 客户端可能需要它,但 SOAP 本身不需要。(SOAP 规范甚至不包含"长度"一词)
第二个问题
PHP在那里可能是错误的。它不应该设置Content-Length
标头。Lighttpd 可能也有点错误,因为如果它更改内容,它应该真正覆盖 Content-Length
标头。soapUI可以纠正这个问题,因为SOAP是基于XML的,XML有一个非常明确的EOF(结束标记)。
我建议不要让 PHP 设置Content-Length
标头。