zoukankan      html  css  js  c++  java
  • POST or GET?

    在web2.0时代,很多网站不再是枯燥的静态页面,也不是那种加上让用户填写一些表单的简单页面。它们已经功能复杂的应用程序。本文,着重改善这些web应用程序出现的问题中的get和post。针对不同需求的问题,我们一起探讨一下关于post和get的话题。

     

    Post

    get访问的URL可以是而且应该是爬虫抓取、预抓取、缓存、重用和其他自动访问上。而不安全操作,如确定订购、下订单、达成协议和删除页面等,应该通过post执行,避免没有显式用户请求和同一的情况下发生意外的操作。例如搜索引擎删除整个页面,只因为抓取了一个链接。很多不希望用户浏览器遵循页面链接的各种完整,这些情况下,应该要求用户登录并且足够的权限才能执行某些危险操作。

     

    因此,如果发现不安全操作由链接触发,用表单替换它,使用隐藏字段设置查询字符串变量。

     

    < a href = “/admin.php?action=approve&id=1798”>Approve</a>
    

      

    它有两个字段:值为approve的action和值为1798的id。查询字符串中的每个字段可以转换为下面表单中相应的隐藏字段。链接的文本则变成提交按钮的文本。

    <form method =”post” action = “/admin.php”>
    
            <input type =”hidden” name =”action ” value =”approve” />
            <input type =”hidden” name =”id ” value =”approve” />
            <input type =”submit” id=”approve ” value =”Approve” />
    
    </form>    

    然后样式化按钮,让他看起来更像一个链接

    input#approve{
           border : none;
           background :white;
           color :blue;
           text-decoration :none;
    }

    给购物车添加商品,很多网站喜欢用post,只是因为不愿意让浏览器自动化这个过程。实现预览的功能用get还是post可能取决于实现细节和惯例。浏览器预抓取或是直接连接预览都是没有问题的,但如果预览在某种意义上会创造评论资源,但不希望让其他用户看到,使用post更适合。

     

    Get

    然而,get形式的url对搜索引擎更加友好,可以提高搜索引擎排名。Post使用的url有时候会阻止爬虫和搜索引擎的访问。其他网站和用户可以链接到get形式的url,无论用户的访问,还是搜索引擎的收录而相应提高了页面排名,能够直接或间接提高网站浏览。

    同时,get形式的url这种表示法是可以缓存的,显著提升了客户端和服务端的性能。

     

    部分防火墙和代理服务器的配置是只允许get请求,而封禁post请求。HTTP本身就允许网络管理员控制网络传输,并区分安全与潜在的危险请求,采用post而非get会阻止一些在安全级别比较高的环境下的人访问你的网站。

    以下操作都应该通过post操作(只是范例,日常将继续更新)

      订购商品

      签署法律文档

      提交博客评论

      从CMS中删除页面

      签署申述

      发送电子邮件

      向数据库插入新内容

     

    相比之下,一下的操作应该通过get操作,因为这是安全的,而且不必强制用户接受。

      读取一份法律文档

      从CMS下载一份可编辑文档的副本

      读取电子右键

      查看地图

      检测机器的当前状态

     

    有些操作两者都可以使用,比如:

    给购物车添加商品(非马上交易)

    预览博客的评论

     

    总之,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

     若符合下列任一情况,则用POST方法:

    * 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
    * 若使用GET方法,则表单上收集的数据可能让URL过长。
    * 要传送的数据不是采用7位的ASCII编码。

    若符合下列任一情况,则用GET方法:

    * 请求是为了查找资源,HTML表单数据仅用来帮助搜索。
    * 请求结果无持续性的副作用。
    * 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。

     

  • 相关阅读:
    【Android命令行】apktool参数详解
    【Android】ANR+OOM+FC
    如何创建低成本沙箱环境?推荐你使用API仿真!
    关于代码覆盖率,你不可不知的两大陷阱!
    如何借助自动创建单元测试来提高单元测试的投资回报率(ROI)?
    [实用指南]如何使您的旧代码库(遗留代码)符合MISRA C 2012编码规范?
    超实用的10个技巧!让您无论使用哪种静态分析工具都能轻松更新现有的静态分析实现
    主数据管理(MDM)的6大层级简述,你不可不知的数据治理参考!
    【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!
    机器学习 | 基于机器学习的供应链管理之销售库存优化分析(实操分享)
  • 原文地址:https://www.cnblogs.com/0603ljx/p/4104576.html
Copyright © 2011-2022 走看看