我通过内容协商为一组资源提供服务。具体而言,任何URL都可以以不同的格式表示,这取决于客户机的Accept头。
这方面的一个例子可以在Facebook上看到:
curl -H "Accept: application/json" http://graph.facebook.com/daft-punk
JSON的结果curl -H "Accept: text/turtle" http://graph.facebook.com/daft-punk
海龟的结果我正在寻找一个CDN,它基于URL和客户端的Accept头缓存内容。
错误的例子
CloudFlare不支持这一点:如果一个客户机请求HTML,那么对该URL的所有后续请求都会接收HTML表示,而不管它们的首选项如何。其他国家也有类似的问题。
例如,如果我将CloudFlare放在graph.facebook.com上(并将其配置为缓存“无扩展”资源(默认情况下不是这样),那么的行为将不正确--。
http://graph.facebook.com/daft-punk在JSON通过卷曲;
作为回应,CloudFlare从服务器询问JSON原件,缓存它,并提供它。http://graph.facebook.com/daft-punk (因此在HTML中);
作为响应,CloudFlare发送缓存的JSON (!)表示,即使原始服务器已经发送了HTML版本。取而代之的是需要什么
正确的行为将是CloudFlare再次询问服务器,因为第二个客户端具有不同的Accept头。在此之后,可以从缓存中处理具有类似Accept头的请求。
哪些CDN解决方案支持内容协商,以及缓存协商内容?
因此请注意,只有尊重接受是不够的;谈判的反应也应该缓存。
PS1:让您自己的缓存服务器支持它很容易。例如,对于nginx:
proxy_cache_key "$scheme$host$request_uri$http_accept";注意客户端的Accept头是索引缓存的键的一部分。我想在CDN上看到这个。
PS2:对于不同的表示,使用不同的URL并不是一种选择。我的应用程序在http://en.wikipedia.org/wiki/Linked_data域中,URL在识别中扮演着重要的角色。
发布于 2013-12-18 19:09:26
看来maxcdn仍然可以为内容协商建立自定义的nginx规则(不管他们的faq怎么说)- http://blog.maxcdn.com/how-to-reduce-image-size-with-webp-automagically/#comment-1048561182
发布于 2013-12-02 19:41:41
我想不出在这个时候我们有什么办法能影响到这件事。例如,我们不需要默认情况下缓存HTML。你真的看到这个有问题了吗?你开了支持票吗?
https://stackoverflow.com/questions/20242780
复制相似问题