Chu*_*utt 23 asp.net cookies windows-server-2008 iis-7.5
我正在阅读谷歌关于提高网站速度的文档.他们的一个建议是从"无cookie域"提供静态内容(图像,css,js等):
静态内容(例如图像,JS和CSS文件)不需要伴随cookie,因为没有用户与这些资源交互.您可以通过从不提供cookie的域提供静态资源来减少请求延迟.
谷歌然后说,最好的方法是购买一个新域名并将其设置为指向您当前的域名:
要保留用于提供静态内容的无Cookie域,请注册新域名并使用CNAME记录配置DNS数据库,该记录将新域指向现有域A记录.配置Web服务器以提供来自新域的静态资源,并且不允许在此域的任何位置设置任何cookie.在您的网页中,引用静态资源的URL中的域名.
这是非常直接的东西,除了它说" 配置你的web服务器从新域提供静态资源,并且不允许在这个域的任何地方设置任何cookie "的位.根据我的阅读,IIS中没有允许您说"提供静态资源"的设置,那么如何阻止ASP.NET在这个新域上设置cookie?
目前,即使我只是从新域请求.jpg,它也会在我的浏览器上设置一个cookie,即使我们的应用程序的cookie设置为我们的旧域.例如,ASP.NET设置了一个".ASPXANONYMOUS"cookie(就我所知)我们并没有告诉它.
抱歉,如果这是一个真正的新问题,我是新手!
谢谢.
Bru*_*oLM 24
这就是我在网站上的表现:
your.domain.com
domain.com或者子域不会是无cookie的StaticStatic之前创建的文件夹.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>
Run Code Online (Sandbox Code Playgroud)
这将缓存文件30天,删除一个RoleManager(我不知道它是否改变了什么,但我删除了所有我找到的),并从响应标题中删除一个项目.
但这是一个问题,即使部署了新版本,您的内容也会被缓存,所以为了避免这种情况,我为MVC制作了一个帮助方法.基本上你必须附加一些QueryString,每次更改这些文件时都会更改.
default.css?v=1 ?v=2 ...
Run Code Online (Sandbox Code Playgroud)
我的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);
}
Run Code Online (Sandbox Code Playgroud)
并使用它(MVC3 Razor):
<link href="@Url.GetContent("~/static/default.css")" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)
如果您正在使用其他类型的应用程序,则可以执行相同的操作,创建一种方法以在页面上附加HtmlLink.
thi*_*eek 16
如果您不从域中编写cookie,则该域将不含cookie.
当域被设置为仅托管诸如脚本,图像等的资源内容时,它们是由来自浏览器的纯HTTP-GET请求请求的.这些内容应按原样提供.这将使您的域名无cookie.这不能通过Web服务器配置来完成.Http是完全无状态的,Web服务器根本不知道cookie.Cookie通过服务器端脚本编写或发送给客户端.您可以做的最好是在IIS应用程序上禁用asp.net,classic-asp或php脚本功能.
我们这样做的方式是.
我们有一个子域设置来提供无cookie资源.因此,我们在子域上托管所有图像和脚本.从主要应用程序,我们只需通过它的url指向资源.我们通过不在该域上提供任何动态脚本或通过创建任何asp.net或php会话来确保子域保持无cookie.
http://cf.mydomain.com/resources/images/*.images
http://cf.mydomain.com/resources/scripts/*.scripts
http://cf.mydomain.com/resources/styles/*.styles
Run Code Online (Sandbox Code Playgroud)
从主域我们只是引用资源如下.
<img src="http://cf.mydomain.com/resources/images/logo.png" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18629 次 |
| 最近记录: |