The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Ограничена ли чем-нибудь длина строки параметров?, !*! 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';
  }
}
}

  • Ограничена ли чем-нибудь длина строки параметров?, !*! ноне, 12:05 , 24-Сен-06 (1)
    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, 15:26 , 24-Сен-06 (2)
      >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."

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру