一、原理区别

一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。

HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。

根据HTTP规范,POST可能会修改服务器上的资源的请求。比如CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。

二、表现形式区别

搞清楚了两者的原理区别后,我们来看一下在实际应用中的区别。

首先,我们先看一下HTTP请求的格式:

[plain] view plain copy
  1. <method> <request-URL> <version>
  2. <headers>
  3. <entity-body>

在HTTP请求中,奇异行必须是一个请求行,包括请求方法,请求URL,报文所用HTTP版本信息。紧接着是一个herders小节,可以有零个或一个首部,用来说明服务器要使用的附加信息。在首部之后就是一个空行,最后就是报文实体的主体部分,包含一个由任意数据组成的数据块。但是并不是所有的报文都包含实体的主体部分。

GET请求实例:

[plain] view plain copy
  1. GET http://weibo.com/signup/signup.php?inviteCode=2388493434
  2. Host: weibo.com
  3. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

POST请求实例:

[plain] view plain copy
  1. POST /inventory-check.cgi HTTP/1.1
  2. Host: www.joes-hardware.com
  3. Content-Type: text/plain
  4. Content-length: 18
  5. item=bandsaw 2647

接下来看看两种请求方式的区别:

1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

事实上GET 和 POST 在实践上面有非常大的区别,这两种方法在语义上面并非能互相取代。

POST 是否比 GET 安全

是的, POST要比GET安全一点点,注意,是一点点。。。

说这两者都是明文传送当然是没有错的了,但是这里有一个细节,就是GET的URL会被放在浏览器历史和WEB 服务器日志里面。

POST 发完基本就木有了。。

所以如果你把关键数据放在GET里面,被人偷窥了浏览器,或者WEB服务器被入侵日志被人倒去了,基本泄露可能性100%。而POST来说,日志没有记录,只要数据库服务器不被入侵,基本还是安全的。

当然如果被抓了包,这一切都没有什么卵用,所以,HTTPS该用还是得用。

GET 相对 POST 的优势是什么

最大的优势是, GET 的URL可以人肉手输啊。。。你在地址栏打个POST给我看看。本质上面, GET 的所有信息都在URL, 所以很方便的记录下来重复使用。

所以如果你希望
- 请求中的URL可以被手动输入
- 请求中的URL可以被存在书签里,或者历史里,或者快速拨号里面,或者分享给别人。
- 请求中的URL是可以被搜索引擎收录的。
- 带云压缩的浏览器,比如Opera mini/Turbo 2, 只有GET才能在服务器端被预取的。
- 请求中的URL可以被缓存。

请使用GET.

GET 相对 POST 的优势是什么

最大的优势是, GET 的URL可以人肉手输啊。。。你在地址栏打个POST给我看看。本质上面, GET 的所有信息都在URL, 所以很方便的记录下来重复使用。

所以如果你希望
- 请求中的URL可以被手动输入
- 请求中的URL可以被存在书签里,或者历史里,或者快速拨号里面,或者分享给别人。
- 请求中的URL是可以被搜索引擎收录的。
- 带云压缩的浏览器,比如Opera mini/Turbo 2, 只有GET才能在服务器端被预取的。
- 请求中的URL可以被缓存。

请使用GET.

作者:罗志宇
链接:https://www.zhihu.com/question/31640769/answer/52824098
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

post 与get 区别,为什么现在的HTTP通信中大多数请求还是使用get?相关推荐

  1. 进程和线程的概念、区别及进程线程间通信

    进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1. 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发: 线程是进程 ...

  2. 主线程和子线程的区别,线程之间的通信

    1.主线程来向子线程发送消息的方法 在平时写程序时,我们一般都是在子线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了.那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程 ...

  3. jqgrid和ajax的区别,理解jqGrid的添加方法和Ajax请求

    我有一个现有的项目,我需要维护,但是这是我第一次满足的jqGrid ...理解jqGrid的添加方法和Ajax请求 主要是,我有一个Product,即可以有多个Formule小号.每个Formule可 ...

  4. Windows线程同步机制的区别与比较及进程通信方法

    原文:http://blog.csdn.net/eulb/article/details/2177500 多线程同步机制 (Windows) 线程的同步机制: 1.   Event 用事件(Event ...

  5. 高通modem和linux区别,qualcomm qmi(modem-linux通信)

    *参考文档:     搜索modem qmi       qmi-qualcomm *    http://wenku.baidu.com/link?url=WtNOI1ojokVsXT3LiWmCR ...

  6. 【jsp】通过get和post传值的区别

    GET与POST的区别: GET方式提交表单,请求的参数在请求的头部,可以通过request.getQueryString()获取到请求参数及其参数值:POST方式提交表单,请求的参数在请求体中,所以 ...

  7. 请求接口时params和data的区别

    params和data的区别,即get和post请求的区别,HTTP协议的基础知识 get请求参数是带在url上的,必须使用params post请求是body data使用data 转载于:http ...

  8. GET和POST两种基本请求方法的区别

    GET和POST两种基本请求方法的区别 回退 回退时无害 会再次提交请求 记录 URL可被记录, 用于再访问 不可以 缓存 主动缓存 可手动设置 编码方式 只进行url编码 多种编码方式 参数长度 有 ...

  9. http协议的Request Payload 和 Form Data 的区别

    Request Payload VS Form Data 前端请求 我看了前端发起的请求,请求正文并不是我熟悉的 Form Data,而是 Request Payload.如图注意下面两个请求的 Co ...

最新文章

  1. 【重磅】吴恩达又一项目Landing.ai曝光,这一次,他是要给传统制造业狠狠开刀!
  2. 选择之后触_如果有朋友在做选择时左右为难,我应该该给出什么样的建议
  3. SqlServer性能监控和优化总结
  4. 割平面法只能求解纯整数规划吗_【DMC第四讲】整数规划
  5. 4.18、Bootstrap V4自学之路-----内容---滚动监听
  6. Unity URP中的多Pass Shader和Planer shadow
  7. Codeforces Round #703 (Div. 2) D . Max Median 二分 +思维
  8. php findall,fleaphp常用函数findAll方法的使用和示例
  9. shell命令行快捷键
  10. MySQL 磁盘满了,怎么办??
  11. jsp的mysql数据库分页查询_Jsp如何实现分页功能(使用MySQL数据库)
  12. uint8_t范围_uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
  13. 统计 | 几种特殊随机变量的分布
  14. 微信小程序服务器云端,微信小程序云端解决方案.PDF
  15. 使用基于全志D1-H的LicheeRV的 86 Panel 与 Tina BSP 实现 RGB 与 SPI 双屏显示
  16. Linux系统中的EOT和EOF
  17. SpringBoot实现企业微信-获取临时素材
  18. Layer-2方案StarkWare估值80亿 以太坊扩容方案重要角色
  19. Knowledge-aware Graph Neural Networks with Label Smoothness Regularization for Recommender Systems
  20. 【高项】进度管理(ITTO)

热门文章

  1. python kmean 多维_绘制多维Kmeans集群NLP python
  2. 【项目三、车牌检测+识别项目】四、使用LPRNet进行车牌识别
  3. html div图片拉伸,使图像完全填充div而无需拉伸
  4. pacemaker+corosync 搭建一主两从PG集群
  5. win7怎么装python_如何在win7上面安装python的包
  6. C++ STL笔记二:string容器;string构造函数;string赋值函数;string拼接;string查找、替换;string比较;string单个字符存取;string插入、删除、截取
  7. 目前计算机常用的CPU型号,价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解...
  8. 【Optimizaition/x86】Intel CPU的CPUID指令获取的C实现
  9. Oracle存储过程基本语法 存储过程
  10. 服务器运行状态监控工具