Один из клиентов нашего веб-сервиса использует приложение axis2, которое отправляет запрос HTTP 1.1 с:
Transfer-Encoding: chunked
заголовок. Наш Apache 2.2 отклоняет такой запрос с сообщением:
<title>411 Length Required</title>
</head><body>
<h1>Length Required</h1>
<p>A request of the requested method POST requires a valid Content-length.<br />
В логах Apache есть:
[Mon May 17 09:06:04 2010] [error] [client 127.0.0.1] chunked Transfer-Encoding forbidden: /app/webservices/soap.hdb
Когда я отправляю такое сообщение без Transfer-Encoding: chunked
и с Content-Length
все работает нормально. Я искал, как решить эту проблему, но нашел только как отключить Transfer-Encoding: chunked
на стороне клиента.
В качестве клиента я использовал soapUI, где добавил / удалил Transfer-Encoding: chunked
заголовок (когда я добавил этот заголовок soapUI, я не отправляю Content-Length
заголовок). В качестве сервера я использую: Apache / 2.2.3 в CentOS, но я тестировал его также с "свежей" установкой Apache 2.2.15 в Windows.
Есть ли способ включить фрагментированные запросы на стороне сервера?
из того, что я нашел на веб-сайте Apache, chunking
поддерживается только HTTP / 1.1, возможно, ваш сервер или программное обеспечение настроены для HTTP / 1.0 в конфигурации. http://ws.apache.org/axis2/1_0/http-transport.html
кроме этого, я бы посмотрел на файл, указанный в сообщении об ошибке, и посмотрел, есть ли какие-либо намеки на то, что там происходит разбиение на части. {DocumentRoot}/app/webservices/soap.hdb
Вы можете отключить / включить разбиение на оси2.xml
Разделение означает, что, хотя общий размер передачи неизвестен, это полезно при создании динамического контента.
Подсказки:
HTTP 1.0 не поддерживает фрагментированное кодирование.