2011-05-05 109 views
2

我们公司内有近13个域名,我们希望为一个应用提供图像以利用缓存。为多个网站提供来自一个域名的图像

例如,我们将有c1.example.com,我们将把我们所有的产品图片放在这个应用程序下。但在这里我有一些疑虑;

1-我该如何强制客户端浏览器缓存图像并且不再请求它?

2-当我在应用程序中引用这些图像时,我将使用以下html标记;

<img scr="http://c1.example.com/core/img1.png" /> 

但是,当我在https下运行网站时,这会导致问题。它给出关于页面的警告。当我在https下运行我的应用程序时,应该使用https // c1.example.com/core/img1.png。我应该在这里做什么?我应该总是使用https吗?或者有没有办法在自动切换?

我将运行IIS 7

+0

你需要编辑你的文章,使HTML代码可见。在HTML之前添加4个空格。 – Fishcake 2011-05-05 12:00:04

+0

我修复了你的格式。 – Chuck 2011-05-05 12:01:58

+0

我也这样做了,谢谢:)顺便说一句,看起来像并发是一个问题在这里:) – tugberk 2011-05-05 12:03:14

回答

1

是的,当通过https提供html页面时,您需要通过https提供所有资源。这就是使用https的全部意义。

如果hrefs在html中被硬编码,那么解决方案可能是使用响应过滤器来解析发送到客户端的所有内容,并在必要时用https替换http。一个简单的正则表达式应该可以做到。有plentyarticles在那里关于这些过滤器如何工作。

关于缓存,您需要发送正确的缓存标头和etag。有几个这样的问题和答案就像这样IIS7 Cache-Control

+0

*“是的,当通过https提供html页面时,您需要通过https提供所有资源。这就是使用https的全部要点”*我同意这一点,但是我应该采取什么样的解决方案来实现这一点?我会将图片网址设为http,如果网页在https下运行,我希望它们转换为https。 – tugberk 2011-05-05 13:02:44

+0

使用响应过滤器在您的html中用https替换所有http-hrefs。用链接更新了我的答案。 – 2011-05-05 13:22:51

+0

不是一个好主意。如果我有一些不支持https的链接?如果我有一些图像链接不在https下提供?我需要为此编写一个正则表达式。我需要使用https将http更改为其标签src指向c1.example.com的img标签。我在这里正确的方式吗? – tugberk 2011-05-05 13:26:39

1
  1. 您需要使用HTTP头告诉浏览器如何缓存我的应用程序。它应该是默认的工作(假设你有你的网址没有查询字符串),但如果没有,这里是关于Cache-Control头的知识库文章:

    http://support.microsoft.com/kb/247404

    我真的不知道很多有关IIS ,所以我不确定是否还有其他潜在的缺陷。请注意,浏览器有时可能仍会发送HEAD请求。

  2. 我建议您设置图像服务器,以便HTTP/S可以互换,然后仅从HTTPS请求提供HTTPS Url。

+0

原谅我在这里的信息不足,但不知道你的意思是这句话:*“我建议你设置图像服务器如此该HTTP/S是可以互换的,然后只是从HTTPS请求服务HTTPS的URL“* – tugberk 2011-05-05 12:53:22

+0

我基本上说,设置它,以便如果您请求与HTTP或HTTPS的图像,你会得到相同的文件。所以,如果我访问http://c1.example.com/core/img1.png和https://c1.example.com/core/img1.png,我会得到同样的结果。然后进行设置,以便在图像的任何链接都会自动在http/https之间进行更改,具体取决于页面是否为https。 – 2011-05-05 13:11:21

+0

我不认为他的问题是他无法通过https请求图片。但是如果他的html中的所有图像hrefs都被硬编码为使用http,他需要某种响应过滤器来在页面通过https提供服务时更改这些信息。 – 2011-05-05 13:21:34

相关问题