> On Nov 10, 2019, at 2:13 PM, Maciej Stachowiak <m...@apple.com> wrote: > > > >> On Nov 10, 2019, at 12:05 PM, Noam Rosenthal <n...@webkit.org >> <mailto:n...@webkit.org>> wrote: >> >> >> >> On Sun, Nov 10, 2019 at 9:41 PM Maciej Stachowiak <m...@apple.com >> <mailto:m...@apple.com>> wrote: >> >> Is this header useful without the DPR client-hint? >> Absolutely. >> A server/CDN can decide to serve an image with a particular content-dpr >> without knowing the client's actual DPR. > > A few more questions (apologies if there are basic things that would be > explained by a spec somewhere).
Following up on one of these questions... > > - Is there a specification for Content-DPR? All I could find in bugzila and > elsewhere is links to <https://httpwg.org/http-extensions/client-hints.html > <https://httpwg.org/http-extensions/client-hints.html>>, which does not > mention Content-DPR at all). Looks like the ChangeLog links here: https://tools.ietf.org/html/draft-ietf-httpbis-client-hints-06#section-3.1.1 <https://tools.ietf.org/html/draft-ietf-httpbis-client-hints-06#section-3.1.1> which is an expired Internet-Draft for Client Hints. The latest Internet-Draft (-07, as well was the in-progress -08) no longer mentions Content-DPR. Is there a new place where this is specified? > - Can you give us some examples of how the CDN would make the decision of > what density of image to serve without knowing the client’s DPR via > client-hints? > - Is this presuming situations where the CDN serves the images but not the > markup or CSS (which presumably could be rewritten to account for DPR)? > - What happens if Content-DPR is provided, but the markup or CSS has > conflicting explicit info? For example, <img srcset=“image-2x.jpg 2x, > image.jpg 1x”>, and image-2x.jpg is served with a Content-DPR header of 3x. > Or the analogous thing with CSS. > - Does Content-DPR have any effect on images where an explicit size is > provided, either in markup or in CSS? (I’m assuming no.) > > Cheers, > Maciej > > >> >> >>> On Nov 10, 2019, at 1:16 AM, Noam Rosenthal <n...@webkit.org >>> <mailto:n...@webkit.org>> wrote: >>> >>> Hola >>> >>> I would like to open a discussion that has started a few years back and has >>> never reached a consensus: https://bugs.webkit.org/show_bug.cgi?id=145380 >>> <https://bugs.webkit.org/show_bug.cgi?id=145380> >>> >>> In a nutshell: content-dpr is a response-only header for images, that >>> allows servers at transient layers (CDNs/proxies) to optimize images by >>> changing their resolution, allowing the user agents to compensate for the >>> change in intrinsic size caused by the resolution change - thus making the >>> resolution change transparent to users. It's the header that makes the >>> resolution-encoding transparent. >>> >>> The feature is already up and running in chrome since version 67, and is >>> used by some CDNs. >>> >>> Since there was lack of consensus in the bug discussion, I wanted to make >>> the case for it here, and see if opinions about the subject can be voiced >>> before we reach a decision/consensus. I tried to find a good balance >>> between being detailed and being concise. >>> >>> — >>> >>> Players in CDN, proxy and other transient parts of the internet world have >>> innovated a lot in the past few years. There are lots of interesting >>> companies and competition there. One of the areas of this innovation is in >>> optimizing images in a transparent way at transient layers (proxy/CDN). >>> This makes a lot of sense considering how much of internet traffic is taken >>> by image download. >>> >>> What the research at the CDN companies found, was that modifying resolution >>> at the transient layer can have a tremendous effect on >>> performance/user-experience balance, for example by serving >>> lower-resolution versions of the images when network traffic is costly/slow >>> (the exact formula for that is part of where the CDN can innovate). More >>> details on that innovation in the links below. >>> >>> The thing is, that modifying image resolution at the CDN/proxy is not >>> inherently transparent, due to one reason - layout is affected by the >>> image’s intrinsic size, and changing the image’s resolution inadvertently >>> changes the image’s intrinsic size. To make this transparent, the user >>> agent has to be involved, to compensate for this optimization when reading >>> the image’s intrinsic size. >>> >>> The main case against this feature was that image resolution is a feature >>> that should be handled at the markup layer and not at the transport layer >>> (https://bugs.webkit.org/show_bug.cgi?id=145380#c7 >>> <https://bugs.webkit.org/show_bug.cgi?id=145380#c7>). >>> I would argue that http-headers are not a transport layer (TCP/UDP etc.), >>> but rather part of an application-layer protocol that is designed, in part, >>> to pass information to the transient layers such as CDNs, and that >>> resolution compression is a (new, image-specific) equivalent of >>> transfer-encoding. >>> >>> Also, as a response to the view that this should be part of markup, I would >>> argue that those transparent decisions by the servers should not concern >>> web authors at all. It’s an optimization decision to be handled by the >>> servers, with the user agent doing nothing about it but allow that decision >>> to be transparent in terms of layout (the same way gzip and cache-control >>> are transparent). >>> >>> What is offered here is a win-win in terms of delivering images, and would >>> allow webkit-browser users to enjoy some of the innovations in the image >>> delivery world without modifying their HTML content and without concern of >>> breaking their layouts. Less battery and data used for downloading big >>> images at certain situations, for example. >>> >>> I hope this provides enough background without being too tedious. I would >>> be happy to shed more light on whatever is missing in this longish essay :) >>> >>> Additional info: >>> https://github.com/eeeps/content-dpr-explainer >>> <https://github.com/eeeps/content-dpr-explainer> >>> https://cloudinary.com/blog/client_hints_and_responsive_images_what_changed_in_chrome_67 >>> >>> <https://cloudinary.com/blog/client_hints_and_responsive_images_what_changed_in_chrome_67> >>> https://www.chromestatus.com/metrics/feature/timeline/popularity/906 >>> <https://www.chromestatus.com/metrics/feature/timeline/popularity/906>_______________________________________________ >>> webkit-dev mailing list >>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>> <https://lists.webkit.org/mailman/listinfo/webkit-dev> >> > > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> > https://lists.webkit.org/mailman/listinfo/webkit-dev > <https://lists.webkit.org/mailman/listinfo/webkit-dev>
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev