点击右上方红色按钮关注“web秀”,让你真正秀起来

前言

最近一些小伙伴面试都会被问到 get 和 post 的区别,很多都只能简单的说几点,今天我们就来把弄的明明白白,彻彻底底。

面试必备:GET和POST 的区别详细解说

标准答案

我们先看一下 w3school 标准答案长什么样子

面试必备:GET和POST 的区别详细解说

从标准上来看,GET 和 POST 的区别如下:

GET 用于获取信息,是无副作用的,是幂等的,且可缓存 POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存

面试必备:GET和POST 的区别详细解说

GET、POST 请求报文上的区别

GET 和 POST 只是 HTTP 协议中两种请求方式(异曲同工),而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。

报文格式上,不带参数时,最大区别就是第一行方法名不同, 仅仅是报文的几个字符不同而已

POST 方法请求报文第一行是这样的 POST /url HTTP/1.1 GET 方法请求报文第一行是这样的 GET /url HTTP/1.1

带参数时报文的区别呢? 在约定中,GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中

举个例子,如果参数是 name=Javanx, age=25。

GET 方法报文是这样的

GET /updateInfo?name=Javanx&age=25 HTTP/1.1 Host: localhost

(示例)下图是头条获取文章列表请求

面试必备:GET和POST 的区别详细解说

POST 方法报文是这样的

POST /updateInfo HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded  name=Javanx&age=25

(示例)下图是头条回复评论请求

面试必备:GET和POST 的区别详细解说

现在我们知道了两种方法本质上是 TCP 连接,没有区别。但如果不按规范来也是可以的,可以在 URL 上写参数,然后方法使用 POST;也可以在 Body 写参数,然后方法使用 GET。当然,这需要服务端支持。

精彩问答

GET 方法参数写法是固定的吗?

在约定中,我们的参数是写在 ? 后面,用 & 分割。

我们知道,解析报文的过程是通过获取 TCP 数据,用正则等工具从数据中获取 Header 和 Body,从而提取参数。

比如header请求头中添加token,来验证用户是否登录等权限问题。

也就是说,我们可以自己约定参数的写法,只要服务端能够解释出来就行,万变不离其宗。

GET 方法的长度限制是怎么回事?

网络上都会提到浏览器地址栏输入的参数是有限的。

首先说明一点,HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。

浏览器原因就不说了,服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。

POST 方法比 GET 方法安全?

有人说POST 比 GET 安全,因为数据在地址栏上不可见。

然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。

要想安全传输,就只有加密,也就是 HTTPS。

面试必备:GET和POST 的区别详细解说

面试必备:GET和POST 的区别详细解说

POST 方法会产生两个 TCP 数据包?

有些文章中提到,post 会将 header 和 body 分开发送,先发送 header,服务端返回 100 状态码再发送 body。

HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送。

所以,header 和 body 分开发送是部分浏览器或框架的请求方法,不属于 post 必然行为。

get请求可以传body吗_面试必备:GET和POST的区别详细解说相关推荐

  1. 游戏必备组件有哪些_面试必备:2019Vue经典面试题总结(含答案)

    点击右上方红色按钮关注"web秀",让你真正秀起来 面试必备:2019Vue经典面试题总结(含答案) 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写 ...

  2. 反向代理post参数怎么传输_面试必备:GET和POST的区别详细解说

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 最近一些小伙伴面试都会被问到 get 和 post 的区别,很多都只能简单的说几点,今天我们就来把弄的明明白白,彻彻底底. ...

  3. mysql面试吗hi提_面试必备的10道MySQL题

    MySQL 事务,是我们去面试中高级开发经常会被问到的问题,很多人虽然经常使用 MySQL,SQL 语句也写得很溜,但是面试的时候,被问到这些问题,总是不知从何说起.下面我们先来了解一下什么是 MyS ...

  4. 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器

    文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...

  5. get请求可以传body吗_都9102年了,GET和POST的区别掌握了没有?

    1 前言 最近看了一些同学的面经,发现无论什么技术岗位,还是会问到 get 和 post 的区别,而搜索出来的答案并不能让我们装得一手好逼,那就让我们从 HTTP 报文的角度来撸一波,从而搞明白他们的 ...

  6. postman发送报文时请求时间超时因为什么_面试官说不要再问我三次握手和四次挥手是什么了...

    三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题.很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了. 见过比较典型的面试场景是这样的: ...

  7. get请求可以传body吗_详解用 Go 语言解析各种 HTTP 请求的方法

    之前这个系列的文章一直在讲用 Go 语言怎么编写HTTP服务器来提供服务,如何给服务器配置路由来匹配请求到对应的处理程序,如何添加中间件把一些通用的处理任务从具体的Handler中解耦出来,以及如何更 ...

  8. get请求可以传数组吗_王源 袁冰妍 孟美岐 手套在大片中的时尚,普通人可以get吗...

    原创 Fish小姐 我们的街拍时刻 2020-11-11 各位街蜜们大家晚上好呀- 前两天,<Madame Figaro 世界>11月刊内页大片出炉. 王源以一件颇具先锋性的迷彩连体裤搭配 ...

  9. collection集合 多少钱_面试必备-Java集合框架

    Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...

最新文章

  1. 计算机应用系统的开发活动,计算机应用教学训练系统的开发与应用.doc
  2. Docker Compose基本使用-使用Compose启动Tomcat为例
  3. PDF文件加密有什么方法?如何给PDF文件加密
  4. 模型压缩:模型量化打怪升级之路-工具篇
  5. 《LUA游戏开发实践指南》学习笔记1
  6. 如何处理Express异常?
  7. leetcode 148. Sort List ----- java
  8. php中array_merge函数
  9. C# 将excel文件导入到SqlServer数据库
  10. linux 配置生效的命令,Linux如何让修改的配置生效?
  11. 若依前后端分离项目图片上传后访问404问题
  12. Matlab许可证过期解决办法
  13. 图形编辑器:对齐功能的实现
  14. join语句的执行顺序
  15. 工作站Ubuntu16.04环境下安装nvidia显卡驱动
  16. 精准营销、批量提取QQ群成员号码
  17. android更新软件,Android软件的自动更新
  18. 淘宝面试的几个算法题
  19. XunSearch(讯搜)的php使用教程步骤
  20. 高中信息技术python及答案_高中信息技术《Python语言》模块试卷 -

热门文章

  1. gnu grub version 2.0.2设置启动顺序_如何修复grub异常
  2. cc2530单片机是几位单片机_我的单片机学习之路(续1)
  3. 职高学的计算机单招考试能换专业吗,高职单招录取后可以换专业吗
  4. MODBUS通讯:libmodbus库使用方法
  5. linux下eclipse找不到插件位置,Linux 下安装Eclipse时所遇到的问题
  6. 三年级能用计算机吗,三年级上册第6课:我用计算机写作文
  7. tensorflow项目构建流程
  8. 【iOS开发必备指南合集二】申请IDP/真机调试/GameCenter 指南/OpenFeint指南
  9. wordpress在Linux nginx下权限设置
  10. 定制软件项目经理应该善于说“NO”