我在Google文档上读到关于提高网站速度的文章。他们的建议之一是提供静态内容(图像、css、js等)。来自“无灶领域”:
静态内容(如图像、JS和CSS文件)不需要附带cookie,因为用户不需要与这些资源进行交互。您可以通过提供来自不提供cookie的域的静态资源来减少请求延迟。
然后Google表示,最好的方法是购买一个新域名,并将其设置为指向当前域名:
若要保留用于服务静态内容的无标记域,请注册一个新域名,并使用CNAME记录配置DNS数据库,该记录将新域指向现有域A记录。配置您的web服务器以提供来自新域的静态资源,并且不允许在此域上的任何位置设置任何cookie。在网页中,引用静态资源的URL中的域名。
这是非常直接的东西,除了它说的“配置您的web服务器以提供来自新域的静态资源,并且不允许在此域上的任何位置设置任何cookie”。从我所读到的中没有允许您说“服务静态资源”的设置,那么如何防止ASP.NET在这个新域上设置cookie?
目前,即使我只是从新域请求一个.jpg,它也会在我的浏览器上设置一个cookie,即使我们的应用程序的cookie设置为我们的旧域。例如,ASP.NET设置了一个".ASPXANONYMOUS“cookie (据我所知),我们没有告诉它要这么做。
抱歉,如果这是个新问题,我是新来的!
谢谢。
发布于 2010-06-17 10:39:47
如果不从域编写cookie,则域将没有cookie.
当域被设置为只承载脚本、图像等资源内容时,它们是由来自浏览器的普通HTTP-GET请求请求的。这些内容应按原样提供。这将使您的领域无灶。这不能通过web服务器配置来完成.Http是完全无状态的,web服务器根本不知道cookie。Cookie通过服务器端脚本编写或发送给客户端。最好的方法是禁用IIS应用程序上的asp.net、经典-asp或php脚本功能.。
我们的做法是。
我们有一个子域设置,以提供无cookie资源。所以我们把所有的图像和脚本放在子域上。从主要的应用程序中,我们只是通过它的url来指出资源。我们确保子域保持无cookie状态,方法是不在该域上提供任何动态脚本,或者创建任何asp.net或php会话.
http://cf.mydomain.com/resources/images/*.images
http://cf.mydomain.com/resources/scripts/*.scripts
http://cf.mydomain.com/resources/styles/*.styles从主域,我们只引用一个资源如下。
<img src="http://cf.mydomain.com/resources/images/logo.png" />发布于 2011-01-30 15:41:54
这就是我在我的网站上所做的:
your.domain.com domain.com,否则子域将不是没有炊具的。
Static的文件夹Static文件夹。static.domain.comNot enabled。现在你有了一个静态网站。若要设置web.config文件,请在Static文件夹下打开并替换为以下文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<sessionState mode="Off" />
<pages enableSessionState="false" validateRequest="false" />
<roleManager>
<providers>
<remove name="AspNetWindowsTokenRoleProvider" />
</providers>
</roleManager>
</system.web>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>这将缓存这些文件30天,删除一个RoleManager (我不知道它是否改变了任何东西,但我删除了我所能找到的所有内容),并从响应头中删除了一个项。
但是这里有一个问题,即使部署了新版本,您的内容也会被缓存,因此为了避免这种情况,我为MVC创建了一个帮助方法。基本上,您必须追加一些QueryString,以便在每次更改这些文件时进行更改。
default.css?v=1 ?v=2 ...我的MVC方法获取最后的写入日期并附加到文件url上:
public static string GetContent(this UrlHelper url, string link)
{
link = link.ToLower();
// last write date ticks to hex
var cacheBreaker = Convert.ToString(File.GetLastWriteTimeUtc(url.RequestContext.HttpContext.Request.MapPath(link)).Ticks, 16);
// static folder is in the website folders, but instead of
// www.domain.com/static/default.css I convert to
// static.domain.com/default.css
if (link.StartsWith("~/static", StringComparison.InvariantCultureIgnoreCase))
{
var host = url.RequestContext.HttpContext.Request.Url.Host;
host = String.Format("static.{0}", host.Substring(host.IndexOf('.') + 1));
link = String.Format("http://{0}/{1}", host, link.Substring(9));
// returns the file URL in static domain
return String.Format("{0}?v={1}", link, cacheBreaker);
}
// returns file url in normal domain
return String.Format("{0}?v={1}", url.Content(link), cacheBreaker);
}并使用它(MVC3 Razor):
<link href="@Url.GetContent("~/static/default.css")" rel="stylesheet" type="text/css" />如果您正在使用另一种应用程序,您也可以这样做,创建一个在页面上添加HtmlLink的方法。
发布于 2011-03-22 21:37:53
如果您有超过5的组合图像/样式表/javascript,那么它的好处是显而易见的,而且即使有额外的DNS查找,为Cookie无域的资源提供服务也是一项伟大的技术。它也很容易实现:)。您可以轻松地将其设置在web.configsystem.web中,并拥有完全没有烹饪功能的子域(除非Google使用了cookie,但这也很容易治愈) :)
<!-- anonymousIdentification configuration:
enabled="[true|false]" Feature is enabled?
cookieName=".ASPXANONYMOUS" Cookie Name
cookieTimeout="100000" Cookie Timeout in minutes
cookiePath="/" Cookie Path
cookieRequireSSL="[true|false]" Set Secure bit in Cookie
cookieSlidingExpiration="[true|false]" Reissue expiring cookies?
cookieProtection="[None|Validation|Encryption|All]" How to protect cookies from being read/tampered
domain="[domain]" Enables output of the "domain" cookie attribute set to the specified value
-->给你举个例子
<anonymousIdentification enabled="true" cookieName=".ASPXANONYMOUS" cookieTimeout="100000" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="None" domain="www.domain." />这只会在www.domain.anyTLD上设置.ASPXANONYMOUS cookie,但不会在myStatic.domain.anyTLD上设置.不需要创建新的池和东西:)。
https://stackoverflow.com/questions/3060775
复制相似问题