混合GET和POST是不好的做法?(注意这是PHP)
例如
Laurent Bour.. 47
实际上,这会向服务器发送一个POST请求请求,所以从技术上讲,你不是将两者混合在一起:你正在使用POST和url参数.这没有任何根本性的错误,只要你不使用你的URL作为隐藏字段形式的参数.
有一些简单的规则:您可以使用GET(可能带有URL参数)来处理不会更改服务器的常量内容,并使用POST来修改服务器.如果你的url参数包含你想要删除的东西的ID,那么这将是不好的做法.
编辑,多年以后
我被问到了源代码,所以这里是HTTP规范的相关部分
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
已经确定了GET和HEAD方法不具有采取除检索之外的动作的重要性的约定.这些方法应该被认为是"安全的".这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作.
你去,GET不应该改变任何东西,POST是改变服务器的东西(不安全的操作).我应该能够拨打GET任何时间.它不仅仅是幂等的:它应该(尽可能)免费的副作用!使用GET,如果涉及缓存,请求甚至可能无法到达服务器.
所以是的:你有一个表格,想知道你是否使用GET或POST?然后更改server => POST,不要更改server => GET.由于可以使用任何动词(获取或发布)访问URL,因此不要将更改服务器的数据放入URL中,因为有人可能会复制该URL,执行GET并在您不知情的情况下更改服务器.想象一下如果有人在Facebook上复制了这个URL并且有10 000人开始删除随机内容会发生什么?不好.最近的框架(node,ruby)更好地隔离了它,但不是基本的PHP,因此对于该语言来说这是一个很好的经验法则.
实际上,这会向服务器发送一个POST请求请求,所以从技术上讲,你不是将两者混合在一起:你正在使用POST和url参数.这没有任何根本性的错误,只要你不使用你的URL作为隐藏字段形式的参数.
有一些简单的规则:您可以使用GET(可能带有URL参数)来处理不会更改服务器的常量内容,并使用POST来修改服务器.如果你的url参数包含你想要删除的东西的ID,那么这将是不好的做法.
编辑,多年以后
我被问到了源代码,所以这里是HTTP规范的相关部分
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
已经确定了GET和HEAD方法不具有采取除检索之外的动作的重要性的约定.这些方法应该被认为是"安全的".这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作.
你去,GET不应该改变任何东西,POST是改变服务器的东西(不安全的操作).我应该能够拨打GET任何时间.它不仅仅是幂等的:它应该(尽可能)免费的副作用!使用GET,如果涉及缓存,请求甚至可能无法到达服务器.
所以是的:你有一个表格,想知道你是否使用GET或POST?然后更改server => POST,不要更改server => GET.由于可以使用任何动词(获取或发布)访问URL,因此不要将更改服务器的数据放入URL中,因为有人可能会复制该URL,执行GET并在您不知情的情况下更改服务器.想象一下如果有人在Facebook上复制了这个URL并且有10 000人开始删除随机内容会发生什么?不好.最近的框架(node,ruby)更好地隔离了它,但不是基本的PHP,因此对于该语言来说这是一个很好的经验法则.
它仍然是一个POST,你只需要在URL中包含一个查询字符串.我没有看到这个问题.通过使用隐藏的输入字段,这可能更清晰,包括后期数据中的那些变量.另外,在服务器上,您可能不希望l(语言?)的值与您的帖子数据.如果它始终位于查询字符串中,则可以使用与其他位置相同的代码来确定语言,而不是为POST请求设置特殊情况.
不,这很好.我在我公司的网站上做到这一点,例如在用户管理页面上.普通的URL是:
/admin/user?name=jkugelman
然后删除我发布到同一页面的用户,除了我POST一个变量而不是执行GET,因为删除是一个有状态的操作,应该用POST完成.它看起来像这样: