Подтвердить что ты не робот

Что ограничивает размер страницы HTML до 8000 символов?

Должно быть что-то действительно очевидное, я пропавше, но здесь идет:

Большая часть содержимого наших веб-страниц генерируется либо с помощью серверной части, либо из-за загрузки сообщений AJAX на странице, поэтому размер файлов HTML обычно довольно мал. Однако при создании тестовой страницы, без каких-либо осложнений в ней, я обнаружил, что если размер страницы превысил 8000 символов, сервер не передает страницу.

Это пример файла:


<!DOCTYPE html>
<html>
<head>
    <title>Rubbish</title>
</head>
<body>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br />

Повторите последнюю строку 16 раз, чтобы дать всего 17 полных строк. Затем добавьте эту часть строки:


Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliq.<br />
</body>
</html>

Выше всего 8001 символ, который не загружается с сообщением "Safari не может загрузить страницу, потому что сервер неожиданно закрыл соединение" и варианты, связанные с Firefox и Chrome. Удаление окончательной полной остановки или любого другого символа приводит к обратному отсчету символа, и поэтому страница загружается так, как ожидалось.

Может ли кто-нибудь дать мне понять, чего я не вижу, не имея возможности загрузить такой простой файл?

AN ANWWER (вроде): Было очевидно, что это было mod_deflate, вызвав проблему, поэтому после некоторого поиска в Google, который я спросил на сервере, если кто-то знал, как изменить максимальный размер. Не было ответов, поэтому я создал файл оболочки и включил исходный 8000-символьный файл в качестве серверной части (SSI), и теперь он работает так, как ожидалось. По-прежнему не знаю, почему существует ограничение на простой HTML, но ни один из SSI, но у меня нет времени больше об этом беспокоиться.

EDIT: удалена директива 'SetOutputFilter DEFLATE', и страница теперь загружается, что говорит о том, что это действительно модуль дефляции, который вызывает проблему. Добавление "DeflateBufferSize 10000" (или действительно "DeflateBufferSize 2048" ) не имеет никакого значения для поддерживаемого размера, поэтому я закрою этот вопрос и спрошу о дефлекторе модуля при ошибке сервера.

EDIT: Извините, должен был упомянуть, что мы используем Apache 2.2.17 на Fedora 14. Это на виртуальной машине на моем ноутбуке, поэтому внешние факторы не задействованы.

EDIT: Еще одна вещь, которую я должен был добавить, заключается в том, что в журнале ошибок Apache ничего не происходит, даже если loglevel установлен для отладки. Журнал доступа дает сообщение "200", но с количеством отправленных символов, установленным как "-".

EDIT: После редактирования httpd.conf других файлов конфигурации нет. Вывод сбрасывается и затем распаковывается клиентом:


### Section 1: Global Environment
ServerTokens prod
CoreDumpDirectory /tmp
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule prefork.c>
StartServers       20
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
Listen 80
#SOME LOAD MODULE CONFIG LINES REMOVED
LoadModule include_module modules/mod_include.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule actions_module modules/mod_actions.so
LoadModule cache_module modules/mod_cache.so
LoadModule cgi_module modules/mod_cgi.so
Include conf.d/*.conf
ExtendedStatus Off
User apache
Group apache
### Section 2: 'Main' server configuration
ServerAdmin [email protected]
ServerName www.example.com:80
UseCanonicalName Off
DocumentRoot "/var/www/html"
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<IfModule mod_userdir.c>
    UserDir disabled
</IfModule>
DirectoryIndex index.html index.html.var
AccessFileName .htaccess
<Files ~ "^.ht">
    Order allow,deny
    Deny from all
</Files>
TypesConfig /etc/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
    MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off
#LOG CONFIG LINES REMOVED
ServerSignature Off
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<IfModule mod_dav_fs.c>
    DAVLockDB /var/lib/dav/lockdb
</IfModule>
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
#ICON CONFIG LINES REMOVED
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
#LANGUAGE CONFIG LINES REMOVED
AddDefaultCharset UTF-8
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
AddHandler send-as-is asis
AddHandler type-map var
AddOutputFilter INCLUDES .html .xml
AddType application/x-httpd-php .php .html
Alias /error/ "/var/www/error/"
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
    <Directory "/var/www/error">
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
    </Directory>
</IfModule>
</IfModule>
#BROWSER MATCH CONFIG LINES REMOVED
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
### Section 3: Virtual Hosts
NameVirtualHost *:80
FcgidMaxRequestLen  2000000
FcgidMinProcessesPerClass   5
FcgidIdleTimeout            18000
FcgidIOTimeout              60
TraceEnable Off
SetEnvIf User-Agent ".*MSIE.*" ISIE true
<VirtualHost *:80>
    ServerName www.example.com
    UseCanonicalName off
    DocumentRoot /etc/httpd/www/examples/
    DirectoryIndex index.html index.html.var
    CheckSpelling on
    CheckCaseOnly on
    <Directory /etc/httpd/www/examples/>
        Options Includes
        AllowOverride None
        Order Deny,Allow 
        Allow from all 
        Header Set Cache-Control "max-age=10"
        ExpiresActive On
        ExpiresByType text/html "access plus 10 seconds"
        ExpiresByType image/gif A259200
        ExpiresByType image/jpg A3600
        ExpiresByType text/html A259200
        ExpiresByType image/ico A259200
        SetOutputFilter DEFLATE
    </Directory>
    <Directory />
        Order Deny,Allow
        Deny from All
    </Directory>
    #OTHER DIRECTORY CONFIG LINES REMOVED
</VirtualHost>
4b9b3361

Ответ 1

У меня была проблема, подобная этой недавно, но с использованием PHP. Проблема в том, что была включена буферизация вывода. Таким образом, как только моя страница достигнет некоторого магического предела, выход будет отправлен (потому что буфер был заполнен), и поэтому любые заголовки, установленные после этой точки, потерпят неудачу. Может быть, у вас такая же проблема? (Ваш буфер будет 8K символов)

Не уверен, что вы используете ванильный HTML или какой-то промежуточный язык... но я бы проверял все настройки всех используемых языков/технологий.

Ответ 2

8000 символов - это определение MAX_STRING_LEN в исходном коде Apache