它是一个不好的做法,使用(以URL)GET参数没有价值?(Is it a bad practice

2019-07-17 22:29发布

我在跟我的老板介绍使用GET参数,而不值的网址有点说法。 例如

http://www.example.com/?logout

我看到这种链接的相当频繁在网络上,当然,这并不意味着它是一个很好的事情。 他担心,这是不标准,可能会导致意想不到的错误,所以他宁愿像我使用的东西,如:

http://www.example.com/?logout=yes

根据我的经验,我从来没有使用空的参数中遇到的任何问题,他们有时在这种情况下,如果让我更有意义(如?logout=no就没有任何意义,所以价值“注销”无关我只测试参数服务器端的存在,而不是它的值)。 (它看起来也更清洁。)

但是我无法找到确认,这种用法实际上是有效的,所以真的永远不能引起任何问题。

你对此有什么联系呢?

Answer 1:

RFC 2396,“统一资源标识符(URI):通用语法”§3.4,“查询构件”是在查询字符串信息的权威来源,并规定:

查询组件是一个信息串由资源进行解释。

[...]

中的查询部件,字符 “;”, “/”, “:”, “@”, “&”, “=”, “+”, “”,和 “$” 被保留 “?”。

RFC 2616, “超文本传输​​协议 - HTTP / 1.1”,§3.2.2, “HTTP URL”,不重新定义此。

总之,你给(“注销”)的查询字符串是完全有效的。



Answer 2:

不需要钥匙有什么影响的值。 它不会使任何URL少有效,或者,网址RFC1738不会列出它作为URL的一部分要求。

如果你并不真的需要一个价值,它只是一个偏好的问题。

http://example.com/?logout

只是尽可能多的有效的URL为

http://example.com/?logout=yes

它使所有的区别是,如果你想确保“是”位是绝对设置,你可以检查它的价值。 喜欢:

if(isset($_GET['logout']) && $_GET['logout'] == "yes") {
    // Only proceed if the value is explicitly set to yes

如果你只是想知道,如果logout关键是在URL中设置某个地方,就足够了只列出没有分配给它的价值的关键。 然后,您可以检查它是这样的:

if(isset($_GET['logout'])) {
    // Continue regardless of what the value is set to (or if it's left empty)


Answer 3:

这是完全正常的,并不会造成任何错误。 虽然,时下最框架都是基于MVC的,所以在URL,你需要提一个控制器和一个动作 ,所以它看起来更像/users/logout (顺便说一句,也StackOverflow上使用该URL来注销用户)。

可能会导致错误给我的说法听起来像你的应用程序手动访问原始$_GET ,我绝对认为,建设应用程序没有一个框架(通常提供一个MVC堆栈和路由器/调度器)是这里真正危险的事。



文章来源: Is it a bad practice to use a GET parameter (in URL) with no value?
标签: php url get