如何解决 [从未设置 cookie 的域中提供以下静态资源]

Posted

技术标签:

【中文标题】如何解决 [从未设置 cookie 的域中提供以下静态资源]【英文标题】:How to solve [Serve the following static resources from a domain that doesn't set cookies] 【发布时间】:2016-10-12 01:28:21 【问题描述】:

我在一些我完全不知道的事情上苦苦挣扎。当我 ping 我的网站时,我得到了这个结果:[Serve the following static resources from a domain that doesn't set cookies:]。而且,这个结果是由我用于背景图像的图像引起的。我试图用谷歌搜索这个话题,但所有的答案似乎都很难理解。这里有没有人知道它以及修复它的任何简单解决方案?

【问题讨论】:

【参考方案1】:

@Brian Jackson 很好地描述了如何实现这一点。大多数人在运行 Pagespeed Insights、GtMetrix、Pingdom 等工具后都会问这个问题,以下是推荐的:

更好的搜索引擎排名的主要因素是实际加载速度(优化清单是次要的)。将您的静态资源移动到子域将增加页面加载时间而不是减少它(在大多数情况下,尤其是当我们谈论一些文件、css、js 和一些图像时)。即使使用 CDN 也会产生不利影响,如果您只提供一些样式表、js 资源和少量图像,只是为了在这些工具上获得更高的分数。

如果您有很多图片或非常大的静态资源,建议使用快速 CDN,这将在很多方面有所帮助。

如果您这样做是为了在工具清单上获得更高的分数,我会采纳 @Brian Jackson 的建议,并与 Google 的 Pagespeed Insights 进行前后对比。如果您的更改确实有利于页面加载速度或使其变得更糟,那将为您提供答案。永远不要为了检查另一个框而牺牲加载速度,这些工具是通用的,并不适合每个特定的网站或网络应用。

在上图中,我指出了 YSlow 的推荐。当我将有问题的资产移动到无 cookie 的子域时,YSlow 和 Pagespeed Insights 优化得分都跃升至 100%,但是加载速度略有下降(100-300 毫秒)并导致 Google 将网站评级为“平均”而不是“好的”。使用 CDN 时,速度会进一步下降,导致 Google 将网站速度评为“差”。与其保持 100% 的优化分数,不如始终追求实际速度。我能想到的用于检查实际速度的最佳工具是 Pingdom:

【讨论】:

【参考方案2】:

我会尝试提供一个非常高级的概述,因为您没有在您的问题中提供很多细节。请注意,有很多方法可以解决此问题,我将尝试提供一种我认为易于理解的解决方案。

该消息表明,如果您的网站是 www.company.com,那么您应该从 www.companycdn.com 加载静态内容。而那个新网站 (www.companycdn.com) 是一个不提供 cookie 的简单静态网站。

为此,您需要将静态资源(例如图片)上传到第二个域。

然后将图像的路径更新到新域。例如,而不是这个:<img src="logo.jpg"/>,你应该把它改成这个<img src="//www.companycdn.com/logo.jpg"/>

这个答案有更多信息:https://webmasters.stackexchange.com/questions/1772/how-do-i-set-up-a-cookie-less-domain

【讨论】:

嗨 Vegemite4me,很抱歉,因为我对此一无所知,因此我不知道如何更具体地提出这个问题。 没问题。您的个人资料显示您是 WordPress 网络开发人员。我建议您阅读 cookie、域和 html 是的!但是,我只是一个简单的网站制作者。对这门学科了解不多。【参考方案3】:

通常,当您提供图像、javascript、CSS 等内容时,没有理由伴随 HTTP cookie,因为它会产生额外的开销。这就是为什么很多工具都会报告这一点的原因。这里有两个快速简便的选择:

选项 1 - 使用 CDN

使用 CDN 托管您的图像,该图像可以忽略 cookie 以及剥离 cookie,这将完全阻止客户端接收 Set-Cookie 响应标头。注意:你can't disable cookies on Cloudflare。

选项 2 - 将静态资产指向新域

这是一个使用 WordPress 的示例。

    首先,创建一个子域,例如 static.domain.com。您将从这里交付所有文件。 使用 CNAME 将您的子域指向您的 /wp-content 目录。 编辑您的 wp-config.php 文件以反映以下内容:

define("WP_CONTENT_URL", "http://static.domain.com"); 
define("COOKIE_DOMAIN", "domain.com");

在这篇文章中查看更多关于如何修复Serve Static Content From a Cookieless Domain 警告的信息。

【讨论】:

这很有趣...您知道使用自己的子域是否真的可以加快内容交付速度吗?例如,这只是为了覆盖 pingdom.com 等网站的基础,还是将静态文件分解为特定的子域请求会带来一些性能提升?只是好奇——现在我忽略了这个问题(在一个简单的 1 页 PHP 应用程序上)......但如果它实际上导致性能价值,它可能会为静态子域(有趣的概念)做腿部工作...... . 好点。基于许多用例,它弊大于利。有一次,在一个拥有 12 万多张照片的门户网站上,它有所帮助。此外,如果影响是正面的,则影响很小,但负面影响很大。 @twknab 随着 HTTP/2 的使用越来越多,这些优化变得不那么重要了 - 非阻塞并行多路复用请求和响应,以及类似的并发魔法。优化仍然有效,但对某些网站来说是微不足道的好处。从最终用户 PoV 来看,我相当肯定,选择您自己域的子域并没有真正的技术优势,除了更容易管理 DNS,但从托管 PoV 可能更容易配置 Web 服务器在静态内容的公共父域名下,具体取决于所选服务器模块的复杂程度等。【参考方案4】:

如果您对此不熟悉。我希望你先告诉你,一旦你设置了一个 cookie,它将在每个请求中发送到服务器。

默认性质是,它将被发送到发送到您的父域及其所有子域的所有请求。这就是 cookie 影响一切的方式。

因此,为了让您的网站速度更快,您不会超载您的 http 请求。如果你把饼干剪下来会更好。

现在让我们继续讨论如何做到这一点。 使用不同的域名,您也可以限制某些子域设置 cookie,但从长远来看,这可能是 devops 的责任。

例如 Quikr 有父域http://www.quikr.com/,但从 kuikr.com 加载所有静态资源

http://teja1.kuikr.com/public/images/dist/RECarousel/hospitality_jobs.png

我希望这会有所帮助。谢谢!

【讨论】:

以上是关于如何解决 [从未设置 cookie 的域中提供以下静态资源]的主要内容,如果未能解决你的问题,请参考以下文章

子域的域设置 cookie

跨域 Cookie

Facebook 登录:无法加载 URL 此 URL 的域未包含在应用程序的域中

如何在Python中的函数指定的域中进行三维绘制?

人们如何在自己的域中使用 Google App-Engine 应用程序?

前端/后端分离:Safari 不存储来自 API 的 cookie,该 API 托管在与其前端 SPA 客户端不同的域上