【问题标题】:Opera post(GET)s the hash fragment of the URLOpera post(GET)s URL 的哈希片段
【发布时间】:2011-04-26 14:07:49
【问题描述】:

根据 Apache 访问日志中的这一行,似乎 Opera 有时会在发送到服务器的 URI 中包含哈希片段:

[26/Apr/2011:01:09:03 +0200] "GET /dagbok/#type=food HTTP/1.1" 500 - "-" "Opera/9.80 (Windows NT 6.1; U; nb) Presto /2.8.131 版本/11.10"

关于它为什么这样做的任何经验或见解?

URI 应该被 jQuery 的哈希更改事件捕获,该事件反过来会触发 URI /dagbok/food/ 上的 .load()。

PS! 500 Internal Server 发生是因为路由不理解其中包含哈希片段的 URI。也不应该。

使用 RewriteRules 更新:

重写引擎开启
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !.(js|ico|txt|gif|jpg|png|css)$ index.php

Index.php 然后启动 Zends 前端控制器/路由器,它无法找到该 URI 的任何路由。这是正确的,因为这个 URI 永远不应该到达服务器。

【问题讨论】:

  • 您在哪个版本的 Opera 中看到这个?
  • 您能否发布一些有关服务器的详细信息,日志看起来很奇怪,因为服务器应该忽略该片段。你使用一些 rewrite_rules 吗?
  • @Roatin Marth 正如日志所说,它是 Opera 11.10。在 11.01 也看到过,但没有人再使用它了。
  • @Dr.Molle 使用基本的RewriteRule 运行,它将“一切”发送到 index.php,Zends 前端控制器/路由器在其中解析请求 URI。在那里它很难失败,因为它没有找到这个 URI 的路由。在原始问题中添加了RewriteRule
  • 看看这些链接,它们之间有什么区别吗? [1]:stackoverflow.com/questions/5791569/…[2]:stackoverflow.com/questions/5791569/…状态栏显示的url是一样的,但是第一个包含%23而不是'#'

标签: javascript apache opera


【解决方案1】:

我猜 jQuery 不会在发送 XMLHttpRequest 之前从 URL 中删除 #hash 部分,而是依赖于浏览器这样做。快速测试显示 Opera 没有。 (这可能应该被认为是 Opera 中的一个错误——我认为没有任何标准可以涵盖这一点,但它并没有像大多数其他人那样做。)

【讨论】:

  • RFC 3986 实际上在3.5. Fragment 点中描述了片段应该如何表现: 因此,片段标识符不用于特定于方案的 URI 处理;相反,片段标识符在解除引用之前与 URI 的其余部分分开,因此片段本身内的标识信息仅由用户代理解除引用,无论URI 方案。
  • 你能重现这种行为吗?
  • 是的,我可以确认这是一个已知错误,可能会在 Opera 的下一个版本更新中得到解决。 (如果有一个非常小的版本,例如 11.11 的安全问题或其他问题,修复可能不会进入,但它正在准备中。)
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
相关资源
最近更新 更多