Довольная длина не отправила, когда gzip сжатие включено в Apache?

я вещь следует документу, помогу u

Блок цитирования

Apache: Перенаправьте http к https безопасному соединению Apache – вызывают Подключения HTTPS

Давайте скажем, что у Вас есть субдомен веб-почты под названием http://mail.chida.in, и требуется перенаправить его к https безопасному соединению т.е. https://mail.chida.in.

Это поможет Вам защитить пользовательскую конфиденциальность и уязвимую информацию, такую как имя пользователя и пароль удаленно.

Таким образом, как Вы настраиваете свой веб-сервер Apache так, чтобы Вы препятствовали тому, чтобы Ваши веб-сайты были получены доступ без шифрования? Перенаправьте http к https Конфигурации Apache

Сначала удостоверьтесь, что Apache настроен для Подключения HTTPS, и установлены необходимые сертификаты SSL. Никакой non-ssl доступ т.е. только не принимает подключения HTTPS

Теперь откройте httpd.conf или .htaccess файл (mod_rewrite не требуемый):

vi httpd.conf

Добавьте следующую строку: Перенаправьте постоянный / https://mail.chida.in/, Любой запрос, выполненный на http://mail.chida.in, будет goto https://mail.chida.in/

Сохраните и закройте файл. Перезапустите Apache:

/etc/init.d/httpd перезапуск

Это - самый легкий способ гарантировать, чтобы Ваш обычный пользователь никогда не использовал протокол HTTP простого текста для отправки данных. Теперь это делает его намного тяжелее для сниффинга уязвимых данных. Веб-почта силы входит по SSL https в сессию

Таким образом, если Вы хотите, чтобы пользователи силы получили доступ к своей веб-почте через https, добавьте следующую конфигурацию к .htaccess файлу:

RewriteEngine На % RewriteCond {HTTPS} от RewriteRule (.*) https://% {HTTP_HOST} % {REQUEST_URI}

Удостоверьтесь, что у Вас есть что-то следующим образом в httpd.conf (mod_rewrite поддержка): LoadModule rewrite_module modules/mod_rewrite.so

Блок цитирования

12
задан 23 September 2010 в 05:24
3 ответа

Дополнение к ответу Мартина Фьордвальдса:

Apache использует фрагментированное кодирование только в том случае, если размер сжатого файла больше, чем DeflateBufferSize. Таким образом, увеличение этого размера буфера предотвратит использование сервером фрагментированного кодирования также для больших файлов, в результате чего Content-Length будет отправляться даже для заархивированных данных.

Дополнительная информация доступна здесь: http: //httpd.apache. org / docs / 2.2 / mod / mod_deflate.html # deflatebuffersize

13
ответ дан 2 December 2019 в 21:32

Кажется, что Apache делает разделенное на блоки кодирование, это означает, что может отправить данные, поскольку это - gzipped вместо того, чтобы ожидать полного ответа, чтобы быть gzipped. Это - довольно общепринятая практика, я не достаточно знаком с Apache, чтобы сказать, может ли это быть отключено, все же.

7
ответ дан 2 December 2019 в 21:32

Хорошо, мне удалось решить это. Как Martin F правильно указывает, Apache разделяет ответ на блоки, таким образом, размер содержания не известен. Для многих людей это желательно (страница загружается быстрее). Это прибывает в стоимость неспособности сообщить о прогрессе загрузки.

Для тех, которые как я, кто действительно хочет сообщить о прогрессе загрузки, если Вы используете Apache или автоматическую поддержку gzip PHP, существует мало, можно сделать. Решение состоит в том, чтобы сделать это вручную. Это легче, чем это звучит:

Если Вы отправляете целые файлы, то это - яркий пример в PHP для принуждения единственного блока (с Довольной Длиной): http://www.php.net/manual/en/function.ob-start.php#94741

При отправке сгенерированных данных то используйте gzencode для кодирования данных, как в вышеупомянутом образце. Предпосылка - то, что все Ваши выходные данные хранятся в переменной (можно использовать ob_start для помощи этому, если необходимо буферизовать, затем получить содержание буфера).

        // $replyBody is the entire contents of your reply

        header("Content-Type: application/json");  // or whatever yours is

        // checks if gzip is supported by client
        $pack = true;
        if(empty($_SERVER["HTTP_ACCEPT_ENCODING"]) || strpos($_SERVER["HTTP_ACCEPT_ENCODING"], 'gzip') === false)
        {
            $pack = false;
        }

        // if supported, gzips data
        if($pack) {
            header("Content-Encoding: gzip");
            $replyBody = gzencode($replyBody, 9, FORCE_GZIP);
        }

        // compressed or not, sets the Content-Length           
        header("Content-Length: " . mb_strlen($replyBody, 'latin1'));

        // outputs reply & exits
        echo $replyBody;
        exit;

И вуаля!

Другое большое преимущество выполнения его самостоятельно - то, что можно установить уровень сжатия. Здорово для моего мобильного приложения, поскольку я могу установить на самый высокий уровень сжатия (таким образом, мои пользователи платят меньше за данные!) – тогда как сервер, вероятно, только использует средний уровень сжатия для лучшего компромисса ЦП/размера. Уровни сжатия - что-то, что я полагаю, что можно только измениться, если можно отредактировать httpd.conf (который на общем хостинге, я не могу).

Таким образом, я сохранил мой ВЫКАЧИВАТЬ .htaccess директиву для всего кроме моих ответов application/json, которые я теперь кодирую вышеупомянутым способом.

Еще раз спасибо Martin F, Вы дали мне искру, я должен был решить это :)

5
ответ дан 2 December 2019 в 21:32

Теги

Похожие вопросы