Странная проблема с ограничением размера в заголовке http - PullRequest
0 голосов
/ 16 января 2019

Контекст: я поддерживаю своего рода сервер веб-службы, но с определенной реализацией: все данные, отправляемые веб-службой, находятся в заголовке http. Это означает, что в ответе есть только заголовок http (без части тела). Веб-сервис работает как служба Windows. Потребитель - мой PHP-код, который вызывает веб-сервис через библиотеку CURL. Все это в производстве уже 3 года и работает нормально. Недавно мне пришлось построить среду развития.

1 - у меня есть веб-сервис на Windows 7 Pro, как сервис Windows.

2 - у меня есть мой потребитель PHP в другом Windows 7 Pro (WAMP + CURL).

3 - мой PHP-код вызывает веб-сервис и отображает необработанный ответ.

4 - в этом контексте возникает проблема: если ответ содержит более 1215 символов, у меня пустой ответ (но нет сообщения об ошибке).


5 - я установил свой PHP-код (точно такой же) в новом Linux Ubuntu: у меня та же проблема.


6 - я установил свой PHP-код (точно такой же) на новый linux centos: У меня нет проблемы.


7 - я много читал в интернете об ограничении размера заголовка http, и я думаю, что сегодня это не является причиной проблемы.

8 - Я изучил все параметры ограничения размера в Apache, PHP, Curl, но не нашел ничего подходящего.

Если у соменона есть какая-то информация. Все треки приветствуются. Спасибо

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Hanshenrik,
я также использовал CURLOPT_VERBOSE, как вы сказали. Вот 2 журнала локонов. Единственная разница - линия <* остановил поток пауз!> в журнале завитков Ubuntu.


В журнале CURL от Ubuntu есть проблема:

*   Trying 192.168.1.205...
* TCP_NODELAY set
* Connected to 192.168.1.205 (192.168.1.205) port 8084 (#0)
> POST /datasnap/rest/TServerMethods/%22W_GetDashboard%22/ HTTP/1.1
Host: 192.168.1.205:8084
Accept-Encoding: gzip,deflate
Accept: application/json
Content-Type: text/xml; charset=utf-8
Pragma: dssession=146326.909376.656191
Content-Length: 15
* upload completely sent off: 15 out of 15 bytes

< HTTP/1.1 200 OK
< Connection: close
< Content-Encoding: deflate
< Content-Type: application/json
< Content-Length: 348
< Date: Thu, 17 Jan 2019 15:27:03 GMT
< Pragma: dssession=146326.909376.656191,dssessionexpires=3600000
< 
* stopped the pause stream!
* Closing connection 0

Журнал CURL от ведьмы Centos НЕ имеет проблемы:

* About to connect() to 192.168.1.205 port 8084 (#1)
*   Trying 192.168.1.205...
* Connected to 192.168.1.205 (192.168.1.205) port 8084 (#1)
> POST /datasnap/rest/TServerMethods/%22W_GetDashboard%22/ HTTP/1.1
Host: 192.168.1.205:8084
Accept-Encoding: gzip,deflate
Accept: application/json
Content-Type: text/xml; charset=utf-8
Pragma: dssession=3812.553164.889594
Content-Length: 15

* upload completely sent off: 15 out of 15 bytes
< HTTP/1.1 200 OK
< Connection: close
< Content-Encoding: deflate
< Content-Type: application/json
< Content-Length: 348
< Date: Thu, 17 Jan 2019 15:43:39 GMT
< Pragma: dssession=3812.553164.889594,dssessionexpires=3600000
< 
* Closing connection 1
0 голосов
/ 16 января 2019

не ответ, но хочу сказать, что, используя PHP 7.2.5 в mod_php с Apache 2.4.33, я не могу воспроизвести вашу проблему, так как у меня нет проблем с отправкой чего-либо от 1 байта до 10000 или даже 100000 байтов в заголовки:

enter image description here

вот мой продюсер.php:

<?php
$size=((int)($_GET['s'] ?? 1));
header("X-size: {$size}");
$data=str_repeat("a",$size);
header("X-data: {$data}");
http_response_code(204); // 204 NO CONTENT

и нажму ли я http://127.0.0.1/producer.php?s=1 или http://127.0.0.1/producer.php?s=10000 или даже http://127.0.0.1/producer.php?s=100000, данные возвращаются без проблем, как вы можете видеть на скриншоте выше. Можете ли вы воспроизвести проблему, используя мой код продюсера?

Кстати, интересно, когда я пробую 1 миллион байт, я получаю эту ошибку из curl:

$ curl -I http://127.0.0.1/producer.php?s=1000000
HTTP/1.1 204 No Content
Date: Wed, 16 Jan 2019 20:11:25 GMT
Server: Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.5
X-Powered-By: PHP/7.2.5
X-size: 1000000
curl: (27) Rejected 104960 bytes header (max is 102400)!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...