在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个字符。

最新文章

  1. 表达式括号匹配(stack)
  2. php 文件下载
  3. Mac、Linux更换命令行svn diff为P4Merge、vimdiff
  4. 跟我学Windows Azure 二 使用SQL Azure创建数据库服务器,创建数据库,创建表
  5. 开源是一种态度、分享是一种精神 — FirApi发布、WeiXinApi更新
  6. Android 开发之异常处理篇(一):SDK Manager 闪退的解决方法
  7. html5定位并在百度地图上显示
  8. weblogic配置数据源出错
  9. struts——拦截器
  10. jdk、jre与jvm的区别与联系
  11. Nancy 框架
  12. linuxmint卸载软件
  13. 通过新浪ip地址库获取用户省份
  14. php学习笔记之一维数组
  15. Erlang cowboy http request生命周期
  16. 唱吧DevOps的落地,微服务CI/CD的范本技术解读
  17. ueditor上传图片尺寸过大导致显示难看的解决办法
  18. css display:flex 属性
  19. python 解方程
  20. InstallShield 静默安装

热门文章

  1. bootstrap下,对数组循环处理的方法
  2. 领域Command
  3. jquery 报错 Uncaught TypeError: Illegal invocation
  4. 全部物料的交期都要加上两天 V_OUT_PR
  5. iOS-Runtime字体适配
  6. copy&amp;mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)
  7. Quartz 官网翻译(转载)
  8. Tensorflow CIFAR10 (二分类)
  9. 19-字符切割函数c++模板
  10. BMP结构详解