跨(子)域 history.pushState(使用 CORS?)

Posted

技术标签:

【中文标题】跨(子)域 history.pushState(使用 CORS?)【英文标题】:cross-(sub-)domain history.pushState (with CORS?) 【发布时间】:2013-06-17 10:01:35 【问题描述】:

是否真的不可能在子域上使用 history.pushState,即使使用 CORS? (我试图将 nginx 配置为那样做,似乎没有用)。 CORS 不应该告诉浏览器可以将 pushState 更改为子域,因为启用了跨域资源共享(这就是它背后的全部想法)? 有人尝试过/成功了吗?

如果不是这样,那真是太可惜了,因为我相当依赖于为这个问题找到解决方案,以避免在子域之间重新加载。有什么事吗?

【问题讨论】:

既然history.pushState触发一个HTTP请求,你认为它怎么知道外部服务器是否允许CORS? @Bergi 那么还有其他方法可以让它知道吗?或者它是如此固定以至于你什么都做不了?我不明白为什么他们发明了像 CORS 这样的东西,如果遵循同源策略的函数没有使用它...... 好吧,CORS 是针对requests 的解决方案,而不是针对与 SOP 相关的所有内容。我认为不可能在地址栏中更改域,但我也没有真正看到这样做的理由。您的具体用例是什么? @AleksandrBlekh 您可以尝试document.domain,但实际上如果您不想要重定向,那么您不应该进行重定向。相反,proxy 该目录以便在两个 url 下提供服务,并使用 canonical link. @AleksandrBlekh 不,响应重定向的服务器位于原始域下。只需尝试使重写器成为代理!您可能想ask a new question,发布您的配置文件(Apache 的,如果您认为相关,可能还有 dns)。 【参考方案1】:

我认为 Bergi 的观点是您的服务器与 pushState 关系不大,因为它永远不会到达服务器。只有刷新页面时才会触碰服务器。

可能会发生一些事情。

    您正尝试在本地环境中使用不支持它的浏览器(即https://code.google.com/p/chromium/issues/detail?id=67743)对此进行测试。 您的服务器没有配置为将您的请求路由到您的索引/应用程序。

您能否提供更多有关您的设置的信息?

【讨论】:

以上是关于跨(子)域 history.pushState(使用 CORS?)的主要内容,如果未能解决你的问题,请参考以下文章

使浏览器不可后退 的代码

使用 window.history.pushState 函数时无法在“历史”错误上执行“pushState”

window.history.pushState 刷新浏览器

传递给 history.pushState 的状态对象是啥,它有啥作用?

页面标题不会被 history.pushState 改变

为 Angular 2 配置 history.pushState