2012-03-06 11 views
10

Ci deve essere qualcosa di ovvio che mi manca, ma ecco:Che cosa è la limitazione della dimensione della pagina HTML a 8000 caratteri?

La maggior parte del contenuto delle nostre pagine Web è generata da server include include o posta AJAX carica pagine, quindi la dimensione dei file HTML è generalmente abbastanza piccolo. Tuttavia, durante la creazione di una pagina di test, senza nulla di complicato in essa ho trovato che se la dimensione della pagina superava 8000 caratteri, il server non trasferisce la pagina.

Questo è un esempio di file:


<!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 /> 

Ripeti ultima riga 16 volte per dare 17 linee complete in totale. Quindi aggiungere questa parte di una linea:


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> 
Quanto sopra

è un totale di 8001 caratteri, che non viene caricato con il messaggio 'Safari non può caricare la pagina perché il server inaspettatamente chiuso la connessione' e variazioni su che con Firefox e Chrome. Rimuovendo l'arresto completo definitivo, o qualsiasi altro carattere, il personaggio esegue il conto alla rovescia e la pagina viene caricata come previsto.

Qualcuno potrebbe darmi un indizio su cosa mi manca nel non essere in grado di caricare un file così semplice?

una risposta (o quasi): era evidente che era mod_deflate la causa del problema così dopo un po 'di googling ho chiesto su serverfault se qualcuno sapeva come cambiare la dimensione massima. Non c'erano risposte quindi ho creato un file di shell e incluso il file di 8000 caratteri originale come server side include (SSI) e ora funziona come previsto. Ancora nessuna idea del perché ci sia un limite su HTML semplice ma nessuno su SSI, ma non ho più tempo per preoccuparmene.

MODIFICA: è stata rimossa la direttiva "SetOutputFilter DEFLATE" e la pagina ora viene caricata, il che suggerisce che si tratta effettivamente del modulo di svuotamento che causa il problema. L'aggiunta di "DeflateBufferSize 10000" (o in effetti "DeflateBufferSize 2048") non fa alcuna differenza per le dimensioni supportate, quindi chiudo questa domanda e chiedo informazioni sul modulo deflate in caso di errore del server.

EDIT: Scusa, avrei dovuto dire che stiamo usando Apache 2.2.17 su Fedora 14. Questo è su una macchina virtuale sul mio laptop quindi non sono coinvolti fattori esterni.

EDIT: Un'altra cosa che avrei dovuto aggiungere è che non c'è nulla nel log degli errori di Apache anche con loglevel impostato per il debug. Il log di accesso dà un messaggio '200' ma con il numero di caratteri inviati impostato come '-'.

MODIFICA: di seguito viene modificato httpd.conf, non ci sono altri file di configurazione. L'output viene sgonfiato e quindi decompresso dal client:

 
### 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> 

+2

Quale server Web stai utilizzando? Qual è la tua configurazione di rete? – Leopd

+0

Questo è un problema del server.Quale server? Controlla la tua configurazione. – SLaks

+0

@Leopd, assolutamente, ho aggiunto la versione server ovviamente richiesta (Apache 2.2.17) – blankabout

risposta

1

Ho avuto un problema simile a questo di recente, ma utilizzando PHP. Il problema era che avevo attivato il buffering dell'output. Quindi, non appena la mia pagina ha raggiunto un limite di caratteri magici, l'output sarebbe stato inviato (perché il buffer era pieno) e quindi tutte le intestazioni impostate dopo quel punto avrebbero avuto esito negativo. Forse stai avendo un problema simile? (Il tuo buffer dovrebbe essere 8K caratteri)

Non sono sicuro se stai usando HTML vanilla o un linguaggio intermedio ... ma controllerei tutte le impostazioni di tutte le lingue/tecnologie coinvolte.

1

8000 caratteri è la definizione di MAX_STRING_LEN nel codice sorgente Apache

+0

Una coincidenza interessante o no? Chissà, forse un giorno la risposta diventerà evidente. – blankabout

Problemi correlati