URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4369
[ Назад ]

Исходное сообщение
"Ограничена ли чем-нибудь длина строки параметров?"

Отправлено chainik , 24-Сен-06 11:16 
Не удается прочитать CONTENT_LENGTH символов (метод POST) из входного потока.

В чем может быть дело?

Скрипт написан на C++. Сервер: Apache/1.3.33, стоит на Slackware 10.1, ядро 2.6.17.7
Браузер, которым посылаются данные - Firefox 1.5.0.5, метод - POST.

getenv("CONTENT_LENGTH") выдает значение большее, чем потом может прочитать read(0,.....
В моем случае getenv("CONTENT_LENGTH") выдает значение 9405, а при попытке прочитать 9405 символов вызовом read(0, sQuery, 9405) в буфер sQuery записывается только 7656 символов.

Код, которым я пытаюсь прочитать строку:

p = getenv("CONTENT_LENGTH");
if((p != NULL) && (*p != '\0')) {
size_t sz = strtoul(p, NULL, 10);
char tmpbuf[1024]; sprintf(tmpbuf, "%u", sz); message(tmpbuf);
if(sz > (size_t)0llu) {
  sQuery = (char*)calloc(sz + 1, sizeof(char));
  if(sQuery != NULL) {
   free_sQuery = -1;
   sz = read(0, sQuery, sz);
   sQuery[sz] = 0;
   p = &sQuery[sz - (size_t)1]; if(*p == '\n') *p = '\0';
  }
}
}


Содержание

Сообщения в этом обсуждении
"Ограничена ли чем-нибудь длина строки параметров?"
Отправлено ноне , 24-Сен-06 12:05 
http://httpd.apache.org/docs/1.3/mod/core.html
-->
LimitRequestBody directive
LimitRequestFields directive
LimitRequestFieldsize directive
LimitRequestLine directive


>Не удается прочитать CONTENT_LENGTH символов (метод POST) из входного потока.
>
>В чем может быть дело?
>
>Скрипт написан на C++. Сервер: Apache/1.3.33, стоит на Slackware 10.1, ядро 2.6.17.7
>
>Браузер, которым посылаются данные - Firefox 1.5.0.5, метод - POST.
>
>getenv("CONTENT_LENGTH") выдает значение большее, чем потом может прочитать read(0,.....
>В моем случае getenv("CONTENT_LENGTH") выдает значение 9405, а при попытке прочитать 9405
>символов вызовом read(0, sQuery, 9405) в буфер sQuery записывается только 7656
>символов.
>
>Код, которым я пытаюсь прочитать строку:
>
>p = getenv("CONTENT_LENGTH");
>if((p != NULL) && (*p != '\0')) {
> size_t sz = strtoul(p, NULL, 10);
> char tmpbuf[1024]; sprintf(tmpbuf, "%u", sz); message(tmpbuf);
> if(sz > (size_t)0llu) {
>  sQuery = (char*)calloc(sz + 1, sizeof(char));
>  if(sQuery != NULL) {
>   free_sQuery = -1;
>   sz = read(0, sQuery, sz);
>   sQuery[sz] = 0;
>   p = &sQuery[sz - (size_t)1]; if(*p == '\n') *p
>= '\0';
>  }
> }
>}



"Ограничена ли чем-нибудь длина строки параметров?"
Отправлено chainik , 24-Сен-06 15:26 
>LimitRequestBody directive
>LimitRequestFields directive
>LimitRequestFieldsize directive
>LimitRequestLine directive

Кажется, в моем случае эти ограничения связаны с браузером. Я попробовал отправить данные интернет эксплорером, и все было получено сервером. В моем случае проявилась какая-то из особенностей настроек по умолчанию Firefox.

Кроме того, в описаниях упомянутых директив часто можно встретить замечания типа
"The value should be increased if normal clients see an error response from the server that indicates too many fields were sent in the request."

У меня же сервер не ругался, а просто недополучал строчку, причем криво выставлялась длина этой строчки. В общем, если в браузере по умолчанию стоит такое жесткое ограничение, то не остается другого выхода, кроме как оптимизировать форму.