Header 404 与 Header 400:url 解析错误
Header 404 vs Header 400: url parsing error
我正在编写自己的 php 小框架。我想尽可能地写出语义化的东西,而且我已经堆积如山。
我有一个 url
解析 class
。它解析整个 url(方案、子域、域、资源和查询)。接下来 router
class 决定如何处理这个 url
。如果有资源对应url
它"renders"它,如果没有它渲染404,如果资源被禁止它渲染403,等等......问题是什么:
假设我的网站位于:http://en.mysite.com
。假设页面 asd
和 &*%
不存在。所以我有 2 url 的:
http://en.mysite.com/asd
http://en.mysite.com/&*%($^&#
当然这两个站点都不存在。但是 headers 应该是什么样子呢?我预测:
http://en.mysite.com/asd // header 404 Page not found
http://en.mysite.com/&*% // header 400 Bad request
然而(基于我们的大师网站):
http://whosebug.com/<< // header 404
http://whosebug.com/&;: // header 404
http://whosebug.com/&*%($%5E&# // header 400 (which btw is not styled...)
https://www.google.com/%&*(#$*%&@^ // header 404...
规则是什么?每个系统都应该预测哪些符号适合 url 吗?至于我 url 应该只包含 [a-z0-9-_.#!]+
。我使用斜线作为参数,所以我不需要 ? = &
。 但一般规则是什么?规范中是否有 url 正则表达式?
顺便说一句:对于那些会说放 404 然后去喝熊的人:我可能会:)。
但是在SEO的时候这个问题比较严重因为400和404在定位的时候是完全不一样的。以您自己的方式设计 400 页的样式非常好,并且 对不是 "page not found" 的人说,而是“您是否想在我美丽的 url 中注入一些东西? 这是一个错误的请求!
据我从 IETF RFC2616 得知,格式错误的请求应返回 400(即不符合 IETF RFC3986,而对于不存在的资源应返回 404 (对于曾经存在但现在已经消失的资源应该返回 410)。
在上面的例子中 URL 的 % 符号后面没有跟两个十六进制字符肯定是格式错误的(例如 en.mysite.com/&<em>% ($^
和 www.google.com/%&</em>(#$*%&@^
)。格式不正确的查询还有最后一部分有两个?
(问号)。
可以找到 URL 的正则表达式来回答问题:PHP validation/regex for URL.
我正在编写自己的 php 小框架。我想尽可能地写出语义化的东西,而且我已经堆积如山。
我有一个 url
解析 class
。它解析整个 url(方案、子域、域、资源和查询)。接下来 router
class 决定如何处理这个 url
。如果有资源对应url
它"renders"它,如果没有它渲染404,如果资源被禁止它渲染403,等等......问题是什么:
假设我的网站位于:http://en.mysite.com
。假设页面 asd
和 &*%
不存在。所以我有 2 url 的:
http://en.mysite.com/asd
http://en.mysite.com/&*%($^&#
当然这两个站点都不存在。但是 headers 应该是什么样子呢?我预测:
http://en.mysite.com/asd // header 404 Page not found
http://en.mysite.com/&*% // header 400 Bad request
然而(基于我们的大师网站):
http://whosebug.com/<< // header 404
http://whosebug.com/&;: // header 404
http://whosebug.com/&*%($%5E&# // header 400 (which btw is not styled...)
https://www.google.com/%&*(#$*%&@^ // header 404...
规则是什么?每个系统都应该预测哪些符号适合 url 吗?至于我 url 应该只包含 [a-z0-9-_.#!]+
。我使用斜线作为参数,所以我不需要 ? = &
。 但一般规则是什么?规范中是否有 url 正则表达式?
顺便说一句:对于那些会说放 404 然后去喝熊的人:我可能会:)。
但是在SEO的时候这个问题比较严重因为400和404在定位的时候是完全不一样的。以您自己的方式设计 400 页的样式非常好,并且 对不是 "page not found" 的人说,而是“您是否想在我美丽的 url 中注入一些东西? 这是一个错误的请求!
据我从 IETF RFC2616 得知,格式错误的请求应返回 400(即不符合 IETF RFC3986,而对于不存在的资源应返回 404 (对于曾经存在但现在已经消失的资源应该返回 410)。
在上面的例子中 URL 的 % 符号后面没有跟两个十六进制字符肯定是格式错误的(例如 en.mysite.com/&<em>% ($^
和 www.google.com/%&</em>(#$*%&@^
)。格式不正确的查询还有最后一部分有两个?
(问号)。
可以找到 URL 的正则表达式来回答问题:PHP validation/regex for URL.