繁体   English   中英

使用没有值的GET参数(在URL中)是不好的做法?

[英]Is it a bad practice to use a GET parameter (in URL) with no value?

我和我的老板谈论使用GET参数而没有值的URL。 例如

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

我经常在网上看到这种链接,但当然,这并不意味着它是一件好事。 他担心这不是标准的,可能导致意外错误,所以他更喜欢我使用类似的东西:

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

根据我的经验,我从来没有遇到任何使用空参数的问题,它们有时对我更有意义(就像在这种情况下, ?logout=no没有任何意义,因此“logout”的值是无关紧要的我只会测试参数服务器端的存在,而不是它的值。 (它看起来也更干净。)

但是我找不到确认这种用法实际上是有效的,因此实际上不会引起任何问题。

你有这方面的链接吗?

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

查询组件是要由资源解释的信息字符串。

[...]

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

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

简而言之,您提供的查询字符串(“注销”)完全有效。

密钥不需要值就可以产生任何影响。 它也不会使URL的有效性降低,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)

它非常好,不会导致任何错误。 虽然,现在大多数框架都是基于MVC的,所以在URL中你需要提到一个控制器和一个动作 ,所以它看起来更像是/users/logout (BTW,也是StackOverflow使用该URL来记录用户;)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM