asp.net cookies windows-server-2008 iis-7.5

asp.net - Dejar de establecer cookies desde un dominio(también conocido como "dominio sin cookies") para aumentar el rendimiento del sitio



windows-server-2008 iis-7.5 (4)

Estaba leyendo en la documentación de Google sobre cómo mejorar la velocidad del sitio. Una de sus recomendaciones es servir contenido estático (imágenes, css, js, etc.) de un "dominio sin cookies":

El contenido estático, como imágenes, archivos JS y CSS, no necesita ir acompañado de cookies, ya que no hay interacción del usuario con estos recursos. Puede disminuir la latencia de la solicitud al proporcionar recursos estáticos de un dominio que no sirve cookies.

Google dice que la mejor manera de hacerlo es comprar un nuevo dominio y configurarlo para que apunte a su actual:

Para reservar un dominio sin cookies para servir contenido estático, registre un nuevo nombre de dominio y configure su base de datos DNS con un registro CNAME que apunte el nuevo dominio a su registro de dominio A existente. Configure su servidor web para que sirva recursos estáticos del nuevo dominio, y no permita que se establezcan cookies en ningún lugar de este dominio. En sus páginas web, haga referencia al nombre de dominio en las URL de los recursos estáticos.

Esto es bastante simple, excepto por el bit donde dice " configure su servidor web para que sirva recursos estáticos del nuevo dominio, y no permita que se establezcan cookies en ningún lugar en este dominio ". Por lo que he leído , no hay ninguna configuración en IIS que le permita decir "servir recursos estáticos", entonces, ¿cómo evito que ASP.NET establezca cookies en este nuevo dominio?

En este momento, incluso si solo estoy solicitando un .jpg del nuevo dominio, establece una cookie en mi navegador, a pesar de que las cookies de nuestra aplicación están configuradas en nuestro dominio anterior. Por ejemplo, ASP.NET establece una cookie ".ASPXANONYMOUS" que (hasta donde yo sé) no le estamos diciendo que haga.

Disculpas si esta es una pregunta realmente nueva, ¡soy nuevo en esto!

Gracias.


Así es como lo hice en mi sitio web:

  1. Configurar un sitio web en IIS con un grupo de aplicaciones ASP.NET
  2. Establezca el host vinculante en your.domain.com
    • Nota: no puede usar domain.com o el subdominio no tendrá cookies.
  3. Crea una carpeta en el sitio web llamada Static
  4. Configure otro sitio web, Static carpeta Static creada anteriormente.
  5. Establezca el host vinculante en static.domain.com
  6. Use un grupo de aplicaciones con código no administrado
  7. En las configuraciones, abra Estado de sesión y marque Not enabled .

Ahora tienes un sitio web estático. Para configurar, abra el archivo web.config en la carpeta Static y reemplace con este:

<?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>

Esto almacenará en caché los archivos durante 30 días, eliminará un RoleManager (no sé si cambia algo, pero eliminé todo lo que pude encontrar) y eliminará un elemento de los Encabezados de respuesta.

Pero aquí hay un problema, su contenido se almacenará en caché incluso cuando se implemente una nueva versión, así que para evitar esto hice un método de ayuda para MVC. Básicamente, debes agregar algo de QueryString que cambiará cada vez que cambies estos archivos.

default.css?v=1 ?v=2 ...

Mi método MVC obtiene la última fecha de escritura y se agrega en la URL del archivo:

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); }

Y para usarlo (MVC3 Razor):

<link href="@Url.GetContent("~/static/default.css")" rel="stylesheet" type="text/css" />

Si está utilizando otro tipo de aplicación, puede hacer lo mismo, haga un método para agregar HtmlLink en la página.


Servir recursos de dominios sin cookies es una gran técnica si tiene más de 5 de imágenes combinadas / styleshees / javascript, entonces su beneficio es notable y se obtiene incluso con esa búsqueda DNS adicional. También es muy fácil de implementar :). Existe la forma de configurarlo fácilmente en web.config [system.web] y tener un subdominio completamente sin cookies (a menos que sea analizado mediante cookies por Google Analytics pero que también sea fácilmente curable) :)

<!-- 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 -->

Para darte un ejemplo

<anonymousIdentification enabled="true" cookieName=".ASPXANONYMOUS" cookieTimeout="100000" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="None" domain="www.domain." />

Esto configurará la cookie .ASPXANONYMOUS solo en www.domain.anyTLD pero no myStatic.domain.anyTLD ... no es necesario crear nuevos pools y cosas :).


Si no está utilizando esa cookie, de cualquier manera, podría simplemente desactivar el estado de la sesión en IIS 6: http://support.microsoft.com/kb/244465

En IIS, vaya a la pestaña Directorio de inicio, luego haga clic en el botón "Configuración".

Luego vaya a la pestaña Opciones y desmarque "Habilitar estado de sesión". La cookie desaparecerá, y puede dejar sus archivos donde están sin necesidad de un dominio adicional o sub-doamin.

Además, al usar dominios adicionales, aumenta las búsquedas de DNS, lo que en parte frustra el objetivo de la optimización general.


Si no escribe cookies desde el dominio, el dominio no tendrá cookies.

Cuando el dominio está configurado para hospedar solo contenido de recursos como scripts, imágenes, etc., son solicitados por solicitudes simples HTTP-GET de los navegadores. Estos contenidos deben ser servidos tal como son. Esto hará que su dominio no tenga cookies. Esto no se puede hacer mediante la configuración del servidor web. Http es completamente sin estado y los servidores web no tienen ninguna idea sobre las cookies en absoluto. Las cookies se escriben o se envían a los clientes a través de scripts del lado del servidor. Lo mejor que puede hacer es desactivar las capacidades de asp.net, classic-asp o php en la aplicación IIS.

La forma en que lo hacemos es

Tenemos una configuración de subdominio para servir recursos sin cookies. Así que alojamos todas nuestras imágenes y scripts en el subdominio. y desde la aplicación principal, simplemente señalamos el recurso por su url. Nos aseguramos de que el subdominio permanezca libre de cookies al no servir ningún script dinámico en ese dominio ni al crear sesiones asp.net o php.

http://cf.mydomain.com/resources/images/*.images http://cf.mydomain.com/resources/scripts/*.scripts http://cf.mydomain.com/resources/styles/*.styles

del dominio primario, solo referimos un recurso de la siguiente manera.

<img src="http://cf.mydomain.com/resources/images/logo.png" />