跨(子)域 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 刷新浏览器