【问题标题】:Action POST/GET in form submitting表单提交中的操作 POST/GET
【发布时间】:2015-12-08 09:13:51
【问题描述】:

GET用于检索远程数据,POST用于插入/更新远程数据

但是当我们使用<form> 发送数据时,我们可以在action 中输入POST 或GET,在这两种情况下都会发送数据。在这种情况下,数据将不会被检索或插入,只会被发送到服务器。 <form>中的这些GET和POST方法和上面描述的GET和POST不一样吗?

【问题讨论】:

    标签: forms http post get


    【解决方案1】:

    表单操作会告诉您的浏览器如何发送表单数据。

    在 GEt 的情况下,表单数据将作为查询字符串参数出现,在 POST 的情况下作为 multipart/form-data 正文。当然,这也会改变查询的方法(如GETPOST)。

    这是针对协议的客户端部分。

    现在,在服务器端GETPOST 不应该以相同的方式运行。

    • GET 是幂等的
    • POST 不是

    这意味着服务器(或服务器链,您可以在链中具有反向代理缓存)必须期望 POST 正在对应用程序数据执行某些操作,因此应用程序或状态是POST 之后就不一样了(也许你现在有一个会话,或者你刚刚删除了一些东西,或者添加了一些东西)。结束这意味着您不能毫无风险地重复 POST 两次。事实上,任何人都不应该重播 POST,这是一个动作。

    如果您的表单发布为GET,那就另当别论了。您只需要一个 url(其中包含您的表单数据在 url 的查询字符串中),您会得到一个结果,但是多次重播相同的 url 不应该是一个问题,我们也可以缓存结果并为请求相同 url 的人重用此缓存结果(因此在表单中具有相同的元素,现在在 url 中)。

    因此,如果方法是 GET,您的应用程序不得执行数据更改。不删除某些内容,不创建某些内容等。

    那么,为什么要以 GET 形式发送表单?也许只是为了获得过滤后的页面结果,每个人都应该使用相同的过滤器获得相同的页面结果。但肯定不要发布注册表单(或管理员级别的删除此用户操作)。

    【讨论】:

    • 感谢您的回复。据我了解,GET 不用于更新或写入数据,而只是进行过滤(获取一些数据)之类的操作。
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多