【发布时间】:2015-10-12 11:15:14
【问题描述】:
我正在编写自己的小 php 框架。我想把所有东西都写得尽可能语义化,而且我很累。
我有一个 url 解析 class。它解析整个 url(方案、子域、域、资源和查询)。接下来router 类决定如何处理这个url。如果有与url对应的资源,它会“渲染”它,如果没有它会渲染404,如果资源被禁止它会渲染403,等等......这是什么问题:
假设我的网站位于:http://en.mysite.com。假设页面asd 和&*% 不存在。所以我有 2 个网址:
http://en.mysite.com/asd
http://en.mysite.com/&*%($^&#
当然这两个网站都不存在。但是标题应该是什么样子?我预测:
http://en.mysite.com/asd // header 404 Page not found
http://en.mysite.com/&*% // header 400 Bad request
但是(基于我们的大师网站):
http://stackoverflow.com/<< // header 404
http://stackoverflow.com/&;: // header 404
http://stackoverflow.com/&*%($%5E&# // header 400 (which btw is not styled...)
https://www.google.com/%&*(#$*%&@^ // header 404...
什么是规则?每个系统都应该预测哪些符号可以用于 url?至于我的网址应该只包含[a-z0-9-_.#!]+。我使用斜杠作为参数,所以我不需要? = &amp;。 但一般规则是什么?规范中是否有任何 url 正则表达式?
顺便说一句:对于那些会说放 404 并去喝熊的人:我可能会:)。
但是在 SEO 的情况下这个问题有点严重。 因为 400 与 404 在定位的情况下完全不同。以您自己的方式设置 400 页面的样式非常好,并且 对某人说不是“找不到页面”而是“你想在我美丽的 url 中注入一些东西吗? 这是一个错误的请求!
【问题讨论】:
-
你的系统决定什么是“坏的”取决于你。 RFC2616 w3.org/Protocols/rfc2616/rfc2616-sec10.html 中没有任何内容。但是你可以使用 RFC3986 来分析 URL 的格式是否正确。
-
感谢您的回复和直接 w3.org 链接。根据它真的一切都留给服务器......但这句话很有趣:400:“客户端不应该在没有修改的情况下重复请求”。这是否意味着在现代浏览器中,此标头被缓存在浏览器端,甚至不会发送所有未来的请求?有点离题,但在这种情况下,404 可能会更好......BR!
-
是的。但它不应该不应该不,所以谁知道^^
标签: php regex url http-status-code-404 http-status-code-400