Подтвердить что ты не робот

Остановка cookie файлов, установленных из домена (он же "cookieless domain" ), чтобы повысить производительность сайта

Я читал документацию Google об улучшении скорости сайта. Одна из их рекомендаций - статический контент (изображения, css, js и т.д.) Из "cookieless domain":

Статическое содержимое, такое как изображения, JS и Файлы CSS, не нужно в сопровождении печенья, поскольку есть нет взаимодействия с пользователями Ресурсы. Вы можете уменьшить запрос задержка путем обслуживания статических ресурсов из домена, который не служит печенье.

Google затем говорит, что лучший способ сделать это - купить новый домен и установить его на ваш текущий:

зарезервировать домен cookieless для обслуживание статического содержимого, регистрация нового имя домена и настроить DNS базу данных с записью CNAME, которая указывает новый домен на существующее домен A. Настройте свою сеть сервер для обслуживания статических ресурсов из новый домен, и не разрешать файлы cookie, которые должны быть установлены в любом месте домен. На ваших веб-страницах ссылка имя домена в URL-адресах для статические ресурсы.

Это довольно простой материал, за исключением бит, где он говорит " настроить ваш веб-сервер для обслуживания статических ресурсов из нового домена и не разрешать какие-либо файлы cookie в любом месте этого домена". Из того, что я прочитал, в IIS нет настроек, которые позволяют говорить "служить статическими ресурсами", поэтому как я могу запретить ASP.NET устанавливать cookie на этот новый домен?

В настоящее время, даже если я просто запрашиваю .jpg из нового домена, он устанавливает cookie в моем браузере, даже несмотря на то, что наши файлы cookie приложений настроены на наш старый домен. Например, ASP.NET устанавливает cookie ".ASPXANONYMOUS", который (насколько мне известно) мы не говорим, чтобы он делал.

Извините, если это настоящий новый вопрос, я новичок в этом!

Спасибо.

4b9b3361

Ответ 1

Если вы не пишете файлы cookie из домена, домен будет содержать файлы cookie.

Когда домен настроен на размещение только содержимого ресурса, такого как скрипты, изображения и т.д., они запрашиваются с помощью простых запросов HTTP-GET из браузеров. Это содержимое должно быть подано как есть. Это сделает ваш домен без cooki. Это невозможно сделать с помощью конфигурации веб-сервера. Http полностью не зависит от состояния, а веб-серверы вообще не имеют представления о файлах cookie. Куки файлы пишутся или отправляются клиентам через серверные скрипты. Лучшее, что вы можете сделать, - отключить возможности asp.net, classic-asp или PHP скрипт в приложении IIS.

Как мы это делаем.

У нас есть настройка поддомена для работы без файлов cookie. Поэтому мы размещаем все наши изображения и скрипты в поддомене. и из основного приложения мы просто указываем ресурс по этому URL-адресу. Мы убеждаемся, что поддомен остается свободным от файлов cookie, не обслуживая никаких динамических script в этом домене или создавая сеансы 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" />

Ответ 2

Вот как я сделал на своем веб-сайте:

  • Настройка веб-сайта в IIS с пулом приложений ASP.NET
  • Установите хост привязки your.domain.com
    • Примечание: вы не можете использовать domain.com, иначе поддомен не будет cookieless
  • Создайте папку на веб-сайте Static
  • Настройте другой сайт, укажите его в папку Static, созданную ранее.
  • Установите хост привязки static.domain.com
  • Использовать пул приложений с неуправляемым кодом
  • В настройках открываем состояние сеанса и проверяем Not 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 на страницу.

Ответ 3

Служебные ресурсы из доменов, не содержащих Cookie, являются отличной техникой, если у вас более 5 комбинированных изображений/стилей/javascript, тогда ее преимущество заметно и выигрыш даже при этом дополнительном поиске DNS. Также его очень легко реализовать:). Там, как вы можете легко установить его в web.config [system.web] и иметь полностью cookieless субдомен (если только его cookie-приложение Google Analytics, но оно легко излечимо):

<!-- 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." />

Это установит .ASPXANONYMOUS cookie только на www.domain.anyTLD, но не myStatic.domain.anyTLD... нет необходимости создавать новые пулы и прочее:).

Ответ 4

Если вы не используете этот файл cookie, каким-либо образом, вы можете просто отключить состояние сеанса в IIS 6: http://support.microsoft.com/kb/244465

В IIS перейдите на вкладку "Домашний каталог", затем нажмите кнопку "Конфигурация".

Затем перейдите на вкладку "Параметры" и снимите флажок "Включить состояние сеанса". Файл cookie будет удален, и вы можете оставить свои файлы там, где они не нуждаются в дополнительном домене или суб-doamin.

Кроме того, используя дополнительные домены, вы увеличиваете поиск dns, что частично поражает цель общей оптимизации.