【问题标题】:Using Postbacks with a CDN通过 CDN 使用回发
【发布时间】:2015-07-07 11:13:12
【问题描述】:

我们有一个基于 Sitecore/Webforms 的网站,我们希望在 Akamai CDN 后面运行,但是我们在回发时遇到了 ViewState MAC 验证问题。

我们已经为网站上的大多数核心表单解决了这个问题(通过将它们从 CDN 缓存中取出并直接为每个用户提供它们),但我们在每个页面的页脚中都留下了一个简单的表单回发到服务器的页面。

目前我们看到错误:

Validation of viewstate MAC failed.

我认为这是由于 CDN 缓存了原始请求中的视图状态字段,而这些(显然)与其他用户不匹配。

由于我们在多台服务器上运行此站点,因此在添加 Akamai 之前,我们已经正确配置了 machinekey(我们已经能够使用 postBackUrl 设置回发到其他页面/SSL 实例/等)。

由于我们正在运行 Asp.NET 4.5.2,因此我们甚至无法尝试禁用视图状态 MAC,即使我们认为这是个好主意。

设置ViewStateMode=Disabled 仍然会给我们留下一个很小的视图状态(可能是MAC),这仍然会导致问题。

我们是否可以从视图状态中移除会话依赖?

我们可以用来复制这个的基本步骤:

  1. 来自浏览器 A 的请求页面 - Akamai 缓存页面。
  2. 从浏览器 A 提交表单 - 成功!
  3. 来自浏览器 B 的请求页面 - Akamai 提供缓存页面。
  4. 从浏览器 B 提交表单 - 错误!

【问题讨论】:

  • 通常 CDN 仅托管站点的 静态 内容:图像、js、css、网络字体、pdf 下载等。您的核心站点仍应在您的拥有自己的服务器,而不是在 CDN 上。如果您想要一个分布式站点,那么是时候使用像 Azure 或 AWS 这样的云提供商了。
  • 是的 - 我想问题是主页感觉像一个静态网站(因为所有用户都会看到相同的内容等)但是视图状态使它成为动态的。
  • 如果它真的是静态的,你根本不需要 ASP.Net...你可以只需要 html。如果用户有能力向页面请求特定内容……即使任何用户都可以请求任何内容……那么它是动态的,不属于 CDN。

标签: asp.net webforms viewstate cdn


【解决方案1】:

不,Akamai CDN 从不缓存 POST 请求。但最好尝试添加表单以不缓存列表并尝试复制问题。

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多