当前位置:  开发笔记 > 编程语言 > 正文

将GET与POST混合 - 这是一种不好的做法吗?

如何解决《将GET与POST混合-这是一种不好的做法吗?》经验,为你挑选了3个好方法。

混合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,因此对于该语言来说这是一个很好的经验法则.



1> Laurent Bour..:

实际上,这会向服务器发送一个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,因此对于该语言来说这是一个很好的经验法则.


我添加了源代码.使回复不那么简洁,但我相信更好的解释.

2> Joel..:

它仍然是一个POST,你只需要在URL中包含一个查询字符串.我没有看到这个问题.通过使用隐藏的输入字段,这可能更清晰,包括后期数据中的那些变量.另外,在服务器上,您可能不希望l(语言?)的值与您的帖子数据.如果它始终位于查询字符串中,则可以使用与其他位置相同的代码来确定语言,而不是为POST请求设置特殊情况.



3> John Kugelma..:

不,这很好.我在我公司的网站上做到这一点,例如在用户管理页面上.普通的URL是:

/admin/user?name=jkugelman

然后删除我发布到同一页面的用户,除了我POST一个变量而不是执行GET,因为删除是一个有状态的操作,应该用POST完成.它看起来像这样:



如果你问我,我认为这是一个非常糟糕的实施.我会将用户名放在隐藏字段中.
好吧,理想情况下,删除操作将使用`DELETE`操作完成,如果只有HTML可以让你.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有