Как делает сторону сервера работа GZipping?

У меня есть проект, который использует LINQ к SQL для бэкенда данных. У меня есть два основных пространства имен: Бизнес и Данные. Модель данных LINQ живет в Данных и отмечена "внутренняя"; пространство имен Бизнеса имеет общедоступные классы, которые переносят классы данных LINQ.

, Таким образом, существует Data.Client, и Biz.Client; последний представляет все соответствующие свойства объекта данных, например:

private Data.Client _client;
public int Id { get { return _client.Id; } set { _client.Id = value; } }

объекты Бизнеса имеют частного конструктора (для принуждения использования методов фабрики), и внутренний конструктор, который похож на это:

internal Client(Data.Client client) {
    this._client = client;
}

, Который может использоваться любым из бизнес-классов в библиотеке, но фронтенд (UI) не имеет никакого способа прямого доступа к модели данных, гарантируя, что бизнес-слой всегда выступает в качестве посредника.

Это - первый раз, когда я действительно использовал internal очень, и это оказывается довольно полезным.

7
задан brian d foy 10 August 2009 в 09:26
поделиться

3 ответа

Работает ли это только для HTML / XML файлы?

Нет: он довольно часто используется, например, для файлов CSS и JS - поскольку они являются одними из самых важных элементов, из которых состоят веб-сайты (кроме изображений), из-за JS-фреймворков и полнофункциональных приложений JS он представляет собой огромный выигрыш!

На самом деле, любой текстовый формат можно довольно хорошо сжать (наоборот, изображения не могут, например, поскольку они обычно уже сжаты) ; иногда данные JSON, возвращаемые из Ajax-запросов, тоже сжимаются - в конце концов, это текстовые данные; -)

Допустим, мой файл PHP / Perl генерирует некоторые простые данные, разделенные запятыми, и отправляет это в браузер, это будет закодировано по умолчанию?

Это вопрос конфигурации: если вы настроили свой сервер для сжатия такого контента, он, вероятно, будет сжат :-)
(Если браузер сообщает, что принимает данные в кодировке gzip)


Вот образец конфигурации для Apache 2 (с использованием mod_deflate), который я использую в своем блоге:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/xml
</IfModule>

Здесь я хочу html / xml / css / JS можно сжать.

И вот то же самое, плюс / минус несколько параметров конфигурации, которые я использовал однажды в Apache 1 (mod_gzip):

<IfModule mod_gzip.c>
    mod_gzip_on                   Yes
    mod_gzip_can_negotiate        Yes

    mod_gzip_minimum_file_size    256
    mod_gzip_maximum_file_size    500000

    mod_gzip_dechunk              Yes

    mod_gzip_item_include         file       \.css$
    mod_gzip_item_include         file       \.html$
    mod_gzip_item_include         file       \.txt$
    mod_gzip_item_include         file       \.js$
    mod_gzip_item_include         mime       text/html

    mod_gzip_item_exclude         mime       ^image/
</IfModule>

Здесь можно заметить то, что я тоже не хочу небольшие (выигрыш не будет иметь большого значения) или слишком большие (потребляет слишком много ресурсов процессора для сжатия) файлы для сжатия; и я хочу, чтобы файлы css / html / txt / js сжимались, но не изображения.


Если вы хотите, чтобы данные, разделенные запятыми, сжимались таким же образом, вам нужно будет добавить либо его тип содержимого, либо его расширение конфигурации вашего веб-сервера, чтобы активировать для него сжатие gzip.

Есть ли способ проверить это?

Для любого контента, возвращаемого непосредственно в браузер, расширения Firefox Firebug или LiveHTTPHeaders являются обязательными.

Для контент, который не проходит стандартным способом связи браузера, это может быть сложнее; в конце концов, вам, возможно, придется использовать что-то вроде Wireshark , чтобы «нюхать», что действительно происходит по трубам ... Удачи с этим!

Что насчет таких платформ, как Silverlight или Flash, когда они загрузят такие данные, будут ли они сжаты / распакованы браузером / средой выполнения автоматически?

Чтобы ответить на ваш вопрос о Silverlight и Flash, если они отправят заголовок Accept, указывающий, что они поддерживают сжатый контент, Apache будет использовать mod_deflate или mod_gzip. Если они не поддерживают сжатие, они не будут отправлять заголовок. Это будет «просто работать». - Нейт

9
ответ дан 6 December 2019 в 10:52
поделиться

Браузер отправляет заголовок «Accept-Encoding» с типами сжатия, которые он знает, как понять. Сервер смотрит на это вместе с пользовательским агентом и решает, как кодировать результат. Некоторые браузеры лгут о том, что они могут понять, поэтому это сложнее, чем просто поиск «deflate» в заголовке.

Технически любой ответ HTTP / 2xx с содержимым может быть закодирован с использованием любой допустимой кодировки содержимого ( gzip, zlib, deflate и т. д.), но на практике применять сжатие к обычным типам изображений расточительно, потому что оно фактически увеличивает их.

Вы определенно можете сжать ответ от динамических страниц PHP. Самый простой способ - добавить:

<?php ob_start("ob_gzhandler"); ?>  

в начало каждой страницы PHP. Конечно, лучше настроить его через конфигурацию PHP.

Есть много тестовых страниц, легко найти с помощью Google :

4
ответ дан 6 December 2019 в 10:52
поделиться

Я думаю, что Apache mod_deflate более распространен, чем mod_gzip , потому что он встроен и делает то же самое. Посмотрите документацию для mod_deflate (ссылка выше), и вы увидите, что легко указать, какие типы файлов сжимать, на основе их MIME-типов. Обычно стоит сжимать HTML, CSS, XML и JavaScript. Изображения уже сжаты, поэтому от сжатия они не выигрывают.

5
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

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