Как определить браузеры, поддерживающие WebP, и как обслуживать их изображения WebP? - PullRequest
3 голосов
/ 18 ноября 2011

Из-за удивительного уменьшения размера изображений WebP (примерно на 28% меньше, чем «pngcrushed» PNG для изображений без потерь + альфа), мы хотели бы предоставлять изображения WebP браузерам, поддерживающим WebP.

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

Здесь был вопрос о том, как сделать это из JavaScript:

Обнаружение поддержки WebP

Но я бы хотел знать, как это сделать с Java.Если делать из Java означает вызывать JavaScript на стороне клиента, я бы хотел узнать, как это сделать.

Ответы [ 2 ]

6 голосов
/ 08 августа 2012

Существует простой способ определения поддержки webP на клиенте. Затем вы можете установить cookie на клиенте и прочитать значение на сервере.

function testWepP(callback) {
   var webP = new Image();     
   webP.src = 'data:image/webp;base64,UklGRi4AAABXRUJQVlA4TCEAAAAvAUAAEB8wAiMw' + 
'AgSSNtse/cXjxyCCmrYNWPwmHRH9jwMA';
   webP.onload = webP.onerror = function () {
      callback(webP.height === 2);     
   }; 
};

testWebP(function(supported) {
   console.log((supported) ? "webP 0.2.0 supported!" : "webP not supported."); 
});

Подробнее здесь .

3 голосов
/ 18 ноября 2011

Невозможно определить функции веб-браузера, используя только Java. Java / JSP работает в веб-сервере, а не в веб-браузере. Вам действительно нужно использовать JavaScript для этого. Вы можете использовать код для этого, который вы уже нашли в соответствующем вопросе. Самое простое, что вы можете сделать, это позволить JS проверить загрузку страницы, если там уже нет файлов cookie, указывающих на то, что браузер поддерживает WebP, а затем выполнить обнаружение функции соответствующим образом и, наконец, установить долгоживущий файл cookie на document.cookie и перезагрузить страница location.reload().

На стороне сервера вам просто нужно проверить наличие cookie и / или его значения с помощью HttpServletRequest#getCookies() в сервлете или ${cookie} в JSP перед отправкой / настройкой соответствующего URL-адреса изображения.

Кроме установки cookie, вы всегда можете разрешить JS отправлять данные в качестве параметров запроса ajax-запроса, но это означает, что вы должны делать это при каждом запросе или сеансе.

...