【问题标题】:cookieless domain to serve css and js - way to organize code?提供 css 和 js 服务的无 cookie 域 - 组织代码的方式?
【发布时间】:2012-01-01 13:31:22
【问题描述】:

我想将我的环境配置为从 static.example.com 而不是 example.com/static 提供 css 和 javascript 文件。

第二个方便我可以编写我的html页面来加载css和javascript文件,例如“static/reset.css”,独立于实际域。

是否有一个好的做法可以避免在我更改时更改我的所有源文件

static.example.com 到 static.otherexample.com

因为我必须重写所有导入 css 和 javascript 的 HTML 源文件?

【问题讨论】:

  • 使用 CMS(内容管理系统)并创建自定义主题/模板/视图/结构。
  • 一个快速的解决方法是只配置你的服务器,任何对static.example.com的请求都从当前的static目录提供服务。
  • @Michael:我想在检索静态文件时避免发送无用的 cookie。快速修复,但不能解决我的要求。
  • 当然可以。这是一个不同的域,不会发送 example.com 的 cookie。这个方法我以前用过。
  • @MichaelMior 啊,当然,从浏览器的角度来看,它是一个不同的域,如果设置为绝对没有继承,它将拒绝发送 cookie。

标签: javascript html css static cookieless


【解决方案1】:

使用某种可配置的前缀来包含 js 和 css 文件。根据您使用的技术,为此使用某种辅助方法会很有帮助。在 ASP.NET MVC 中,我使用了一些自定义方法,例如 CSS.Add("reset.css"),它知道路径和 URL。

js 文件不应该真正关心它们从哪里加载。至于 css,重要的是要知道 CSS 中的相对 URL 被解释为相对于加载 CSS 的 URL,不是相对于加载页面的 URL。所以请确保您了解background-image: url('/images/img1.png') 也会从静态页面加载(这通常是一件好事)。

更好的方法

压缩、缩小和合并所有 CSS / js 文件是最佳做法。因此,您应该只拥有非常少量的文件(一个 js,一个 css)来保持较低的请求数量。这些文件的包含将发生在服务器上,因此 URL 无关紧要。要实现这一点,您将需要某种辅助方法(以及大量压缩逻辑,但有所有这些库)。

对于 ASP.NET MVC,有 SquishIt,但我确信有很多工具适用于各种环境。

【讨论】:

  • 我不太了解 ASP.NET,但基本上你建议一种模板方法来替换(或在 CSS.Add("reset.css") 的情况下扩展)占位符?
  • 它不仅仅是一个占位符——它基本上会收集所有文件(在服务器上),解析它们,缩小和压缩它们,然后创建一个文件。然后将该文件提供给客户端。使用不同的域来提供该文件是另一项改进,但我认为缩小/合并步骤更为重要。
【解决方案2】:

html是如何生成的?

您可以使用配置值或常量,并将该值用于任何静态资产的 url 的域部分。

【讨论】:

    【解决方案3】:

    您总是可以在服务器上做一个技巧,即您在 HTML 中的所有 url 都可能与 /static 相关,但是一旦您的服务器收到请求,它可以“更改”路由并从 static.current-domain.com 获取文件,而不是current-domain.com/static

    【讨论】:

    • 不,那么浏览器发送的第一个请求仍然发送 OP 想要避免的 cookie
    • @PaulPodlipensky 我忘了在我的问题中提到 cookieless,但它在标签中。是的,避免不必要的 cookie 是一个目标。
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多