Cтранное поведение ssi в keep-alive режиме

Igor Sysoev is at rambler-co.ru
Wed Jul 18 18:51:42 MSD 2007


On Wed, Jul 18, 2007 at 06:26:46PM +0400, Denis Erygin wrote:

> Конфигурация:
> 
> location / {
>   root   html;
>   index  index.html;
>   ssi on;
>   gzip off;
> }
> 
> location /mod/ {  # Модуль-handler, который отдает html в виде строки 
> "aaaaaaaaaaaaaaaaaaa".
>    mod_enable;
>    gzip off;
> }
> --------------------------------------
> index.html:
> 
> <html>
> <body>
> <h4>Test</h4>
> <!--#include virtual="/rb/3454" -->
> <hr>
> <!--#include virtual="/rb/3971" -->
> <hr>
> <!--#include virtual="/rb/3969" -->
> <hr>
> <!--#include virtual="/rb/3947" -->
> <hr>
> <!--#include virtual="/rb/3975" -->
> <hr>
> <!--#include virtual="/rb/3966" -->
> </body>
> </html>
> 
> Когда браузер посылает нечто подобное:
> 
> "GET / ...."
> "Host: vento.mail.ru:8800"
> "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.4) 
> Gecko/20070515 Firefox/2.0.0.4"
> "Accept: 
> text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
> "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"
> "Accept-Encoding: gzip,deflate"
> "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7"
> "Keep-Alive: 300"
> "Connection: keep-alive"
> 
> То в ответ такой:
> 
> HTTP/1.1 200 OK
> Server: nginx/0.5.28
> Date: Wed, 18 Jul 2007 14:00:33 GMT
> Content-Type: text/html
> Transfer-Encoding: chunked
> Connection: keep-alive
> 
> * * *
> 
> Причем, подстановка ssi работает очень странно,
> первый запрос может вывести только:
> <html>
> <body>
> <h4>Test</h4>
> aaaaaaaaaaaaaaaaaaaaaaaaa
> а второй:
> <html>
> <body>
> 11
> 
> <hr>
> 19
> aaaaaaaaaaaaaaaaaaaaaaaaa
> 0
> 
> 11
> <hr>
> 19
> aaaaaaaaaaaaaaaaaaaaaaaaa
> 0
> 
> 11
> <hr>
> 19
> aaaaaaaaaaaaaaaaaaaaaaaaa
> 0
> 
> 11
> <hr>
> 19
> aaaaaaaaaaaaaaaaaaaaaaaaa
> 0
> 
> 11
> <hr>
> 19
> aaaaaaaaaaaaaaaaaaaaaaaaa
> 0
> 
> 19
> 0
> </body>
> </html>
> 
> Далее, просто повторяются эти два варианта.
> 
> Зачем там вообще включается режим "Transfer-Encoding: chunked" ?

Потому что это HTTP/1.1+keep-alive.

> Да, если подключаться wget-ом, то все работает правильно,
> причем он отвечает так:
> 
> HTTP/1.1 200 OK
> Server: nginx/0.5.28
> Date: Wed, 18 Jul 2007 14:00:33 GMT
> Content-Type: text/html
> Connection: close
> 
> * * *

Это странное поведние не ssi, а mod_enable: нужно выдвать так:

    if (r == r->main) {
        b->last_buf = 1;
    }

    b->last_in_chain = 1;


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list