WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy!

学习ajax、fetch、axios时,发送网络请求携带参数时,都需要分别处理get和post的参数。所以我们需要学习get和post的区别,以便更好地进行前后端数据交互。get 和 post 区别你到底知道多少呢?

一、GET 和 POST的区别

GET

POST

后退按钮/刷新

无害

数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

书签

可收藏为书签

不可收藏为书签

缓存

能被缓存

不能缓存

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

历史

参数保留在浏览器历史中。

参数不会保存在浏览器历史中。

对数据长度的限制

是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

无限制。

对数据类型的限制

只允许 ASCII 字符。

没有限制。也允许二进制数据。

安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性

数据在 URL 中对所有人都是可见的。

数据不会显示在 URL 中。

二、本质区别

2.1http协议

浏览器和服务器之间是通过http协议进行数据通信的,而get和post是http协议其中的两个方法。想要更多了解http协议,请点击《网络请求详解》

http协议底层是 TCP/IP ,把TCP比作汽车,用TCP给浏览器和服务器之间运输数据,它很可靠,从不会发生数据丢失现象,但是如果路上跑的全是一模一样的TCP车辆,那这个世界就非常混乱,整个系统就会瘫痪。为了避免这种情况发生,http 定义了交通规则,给汽车运输设定了好几个服务类别,有 GET、 POST、 PUT、 DELETE 等等。它们的作用分别为:

  • GET:从服务器上获取数据,仅仅查询服务器上的数据,不进行修改。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT:从客户端向服务器传送的数据,也就是添加数据。
  • DELETE:字面意思删除,客户端请求服务器删除指定的内容。

当执行GET请求时,汽车贴上get标签,而且要求把货物放到车顶(url)方便记录,当执行POST请求时,贴上post标签,将货物放置车厢内(body)。

2.2、为什么说 get 比 post 更快?

get 产生一个TCP数据包,而 post 产生两个数据包。

get 发送数据的时候,url把header和data数据带着一起传送到服务器,然后返回结果。但是 post 会先发送 header 到服务器,服务器响应 100 之后,继续向浏览器发送data,服务器接收完之后,会验证数据完整性,然后返回结果。

post 要比 get 多进行一次数据传输,所以 get 比post更快。好多人想着,为了提升网站速度,把所有post改成get方式,这样合适吗?

  • 网速快的时候,发一次数据和发两次数据时间差一点点,基本可以忽略,但是网速慢的时候,post 可以验证数据完整性,有非常大的优点。
  • get 和 post都有自己的语义,不能随便混用。
  • 并不是所有浏览器 post 都会发送两次数据,火狐浏览器只发一次。

三、面试怎么回答?

  1. post更安全。
  2. post可以发送更大数据。
  3. post能发送更多数据类型。
  4. post比get慢。
  5. post用于修改和写入数据,get一般用于分享搜索筛选之类操作。

前后端数据交互(八)——请求方法 GET 和 POST 区别的更多相关文章

  1. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)

    一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...

  2. vue-resource的使用,前后端数据交互

    vue-resource的使用,前后端数据交互 1:导入vue与vue-resource的js js下载:   https://pan.baidu.com/s/1fs5QaNwcl2AMEyp_kUg ...

  3. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用

    随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...

  4. web前后端数据交互

    前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个li ...

  5. 前后端数据交互处理基于原生JS模板引擎开发

    json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...

  6. 前后端数据交互利器--Protobuf

    Protobuf 介绍 Protocol Buffers(又名 protobuf)是 Google 的语言中立.平台中立.可扩展的结构化数据序列化机制. https://github.com/prot ...

  7. 前后端数据交互(二)——原生 ajax 请求详解

    一.ajax介绍 ajax 是前后端交互的重要手段或桥梁.它不是一个技术,是一组技术的组合. ajax :a:异步:j:js:a:和:x:服务端的数据. ajax的组成: 异步的 js 事件 其他 j ...

  8. 前后端数据交互(四)——fetch 请求详解

    fetch 是 XMLHttpRequest 的升级版,使用js脚本发出网络请求,但是与 XMLHttpRequest 不同的是,fetch 方式使用 Promise,相比 XMLHttpReques ...

  9. SpringMVC前后端数据交互总结

    控制器 作为控制器,大体的作用是作为V端的数据接收并且交给M层去处理,然后负责管理V的跳转.SpringMVC的作用不外乎就是如此,主要分为:接收表单或者请求的值,定义过滤器,跳转页面:其实就是ser ...

随机推荐

  1. SpringCloud-Alibaba 最新的 依赖版本管理组合以及 整合gateway遇到的问题

    一般来说,cloud 与 alibaba 拥有版本组合说明文档wiki,不过这里可以做一个最新的组合的分享. <dependencyManagement> <dependencies ...

  2. 自学vue第二天,从入门到放弃(生命周期的理解)

    生命周期的理解 beforeCreate 创建前 数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象 没有数据也没有方法 created 在创建后 数据和方法已经 data数据已经绑定好了 ...

  3. CTF中的序列化与反序列化

    记一些CTF出现的序列化与反序列化的知识点和题目. 序列化和反序列化的概念 序列化就是将对象转换成字符串.字符串包括 属性名 属性值 属性类型和该对象对应的类名. 反序列化则相反将字符串重新恢复成对象 ...

  4. 智能合约审计-不安全的delegatecall

    简介 当合约A以delegatecall方式调用时, 相当于将外部合约B的func()代码复制过来 (其函数中涉及的变量或函数都需要在本地存在), 在合约A上下文空间中执行. 合约 pragma so ...

  5. Vue-Router学习第二弹动态路由\懒加载\嵌套路由

    在我们做项目时肯定会有出现动态路由: 举个栗子: 一个品种的商品页面会有同类不同样的商品就要在路由的后面加一个id: Vue的路由id是这样添加的: 两种动态路由 一种是params参数添加: 首先现 ...

  6. java数据类型和类型得转换

    java数据类型 强类型语言 ​ Java是一种强类型得语言,严格要求变量要符合规定,所有变量都必须先定义再使用 java得数据类型分为两大类 值得注意得是String并不是一个数据类型,它是一个类 ...

  7. Golang语言系列-09-接口

    接口 接口的定义和实现 package main import "fmt" /* [接口] 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现 ...

  8. Blazor+Dapr+K8s微服务之服务调用

    1.1         Dapr环境配置 1.1.1        在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...

  9. sqli-labs lesson 7-10 (文件导出,布尔盲注,延时注入)

    写在前面: 首先需要更改一下数据库用户的权限用于我们之后的操作. 首先在mysql命令行中用show variables like '%secure%';查看 secure-file-priv 当前的 ...

  10. SQL 练习1

    查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 SELECT sname,sage,class1,class2 from Student, ...