【HTTP】方法(method)以及 GET 和 POST 的区别

文章目录

  • 方法(method)
  • 登录
  • 上传
  • GET 和 POST 有什么区别(面试)
    • 区别
    • 不准确的说法

方法(method)

首行中的第一部分。首行是由方法、URL 和版本号组成


方法描述了这次请求想干什么,最主要的是:

  • GET:从服务器拿一个东西过来(读操作)
  • POST:往服务器放一个东西(写操作)
    image.png|404
  • 这些方法的语义,都是“标准文档作者”的一厢情愿,仅供参考
  • 但开发者在实际开发程序的时候,才不管这一套。完全可以用 POST 来从服务器拿数据,也完全可以用 GET 往服务器放数据

GET 是很常见的,两个典型使用 POST 的场景:

  1. 登录
  2. 上传

从使用习惯上说,GET 通常没有 body,而 POST 通常有。GET 会把需要给服务器的补充信息放到 query string 中(URL 中),而 POST 会把这些信息放到 body


登录

image.png

  • 这里 body 里面放的是 JSON 格式的数据。body 中可以放任意格式的数据,前端和后端约定好即可,JSON 是非常常用的格式
  • 密码是 base64 编码

[!quote] base64 编码

  • 末尾带有“== “,使用四个字节,对原始数据中的三个字节进行重新编码
  • 这种编码方式主要是为了能够去掉原始数据中的二进制内容
  • base64 具体的编码规则,有标准版,也有自定义版
    • 标准版,怎么编码、解码都是透明的,无法作为加密的方案
    • 自定义版,自己约定编码规则,别人不知道,此时就可以作为一种简单的加密手段
  • 目前仍然有一部分网站,密码是明文传输(码云去年的时候还是明文传输),黑客稍微抓个包就知道了

上传

Gitee 上更改头像操作
image.png|464


  • body 部分就是图片的内容,图片本身是二进制的,此处是对二进制的图片数据进行了 base64 编码(很长很长的数据)image.png|562

GET 和 POST 有什么区别(面试)

先盖棺定论:GETPOST 本质上没有区别

  • 使用 GETPOST 的场景可以相互替换(取决于代码是怎么写的,尤其是在服务器和客户端都是自己实现的情况下)
  • 部分服务器/部分浏览器,某些情况下 GETPOST 不能完美替换
  • 但是大部分情况下相互替换问题一般不大

区别

但是 GETPOST 在使用习惯上还是有区别的

  1. GET 习惯于把数据放到 URLquery string 中;POST 习惯于把数据放到 body

    • GET 也可以把数据放到 body 中。有的服务器/浏览器可能不支持
    • POST 也可以把数据放到 query string 中。对于绝大部分的服务器和浏览器都适用
  2. 语义的区别

    • 标准文档中,GET 的语义是用来获取数据;POST 的语义是给服务器传输数据
    • 实际使用并不一定非得拘泥于上述要求
  3. 关于幂等性

    • 每次输入的内容一定,输出的结果也一定,称为幂等;每次输入的内容一定,输出的结果不一定,就不是幂等
    • 计算机中,幂等也是挺关键的。如果某个操作本身是幂等的,此时就可以进行缓存了
    • 标准文档中,建议 GET 请求实现成幂等的;POST 则无要求

GET 在实际开发中也不一定非得实现成幂等。标准是这么建议的,但不一定采纳。确实很多时候是按照幂等的方式走的

  1. GET 请求是可以被浏览器收藏夹收藏的,而 POST 不可以

不准确的说法

网上有些相关的资料,说法不太准确


  1. POSTGET 更安全

论据: 登录的时候,如果使用 GET,用户名密码就会显示在 URL 上,此时就会被别人直接使用,所以就不安全

论证: 即使是 POST,数据没有显示在 URL,也是可以被黑客通过抓包获取的。真正保证安全性的关键在于加密,如果数据加密了,就算放到 URL 上显示,又能怎样呢?

  1. GET 传输的数据量小(存在上限);POST 传输的数据量更大

论据: 描述的是以前,老版本的 IE 浏览器在实现的时候,URL 的长度有限制(历史了)

论证: 实际上 HTTP 标准文档上明确说了,对于 GET URL 的长度不做限制。目前比较长的 URL 也是很常见的

  1. GET 只能携带文本数据;POST 则可以携带二进制数据

这个说法不能说是完全错误,但确实有一定的局限性

URL 通过 query string 来携带数据,query string 是只能包含文本的,但是可以对二进制数据进行 URL encode,之后自然就成了文本了。到了服务器自然进行 URL decode 就能把数据还原成二进制

POST 请求 body 中也经常不是直接携带二进制(可以),也有很多时候是对二进制数据进行 URL encode / / base64 等方式进行转码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540199.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

13 vue3之内置组件keep-alive

内置组件keep-alive 有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。 开启keep-alive 生命周期的变化 初次进入时:…

基于SpringBoot+Vue的私人牙科诊所管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

MySQL函数介绍--日期与时间函数(一)

我相信大家在学习各种语言的时候或多或少听过我们函数或者方法这一类的名词,函数在计算机语言的使用中可以说是贯穿始终,那么大家有没有思考过到底函数是什么?函数的作用又是什么呢?我们为什么要使用函数?其实&#xf…

模型案例:| 篮球识别模型

导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…

CANopen开源库canfestival的移植

本文记录将CANopen开源库CANfestival移植到GD32F470单片机的过程。CANopen协议理解请参考博客:CANopen协议的理解-CSDN博客 CANfestival开源库下载链接 CSDN链接: https://download.csdn.net/download/heqiunong/89774627 官网链接:https:/…

HTML常见语法设计

HTML常见语法设计 1.HTML类和ID类id 2.HTML 响应式 Web 设计3.HTML5 语义元素4.HTML 字符实体5.HTML 编码(字符集) 1.HTML类和ID 类 对 HTML 进行分类(设置类),使我们能够为元素的类定义 CSS 样式。为相同的类设置相…

耐高温滑环的应用场景及市场前景分析

耐高温滑环是一种重要的电气连接装置,广泛应用于需要传递电力和信号的旋转设备中。随着工业技术的发展,对耐高温滑环的需求不断增加,尤其是在极端温度环境下的应用场合,耐高温滑环展现出其独特的优势。 耐高温滑环在工业自动化领…

第157天: 安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库

案例一:Python-WEB 爬虫库&数据解析库 这里开发的内容不做过多描述,贴上自己写的代码 爬取数据 要爬取p标签,利用Beautyfulsoup模块 import requests,time from bs4 import BeautifulSoup#url"https://src.sjtu.edu.cn/rank/firm…

双十一好物狂欢派对,五款剁手超值好物分享

在这个全民狂欢的购物节,我们迎来了一年一度的双十一盛典。双十一不仅是一场双十一好物狂欢派对,更是我们表达对生活品质追求的最佳时机。无论是智能家电、时尚潮品、还是日常必备,每一件好物都蕴含着对美好生活的无限向往。今年的双十一&…

内控合规管理

内控合规管理 1.内控合规概述2.信息科技风险管理概述组织架构与指责管理内容 3.监督检查4.制度管理5.业务连续性管理6.信息科技外包管理7.分支机构管理 1.内控合规概述 在具体实践中,IT内控合规管理的领域包括:信息科技风险管理、监督检查、制度和公文管…

Postman如何测试WebSocket接口!

01、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直…

rpm方式安装Mysql报错依赖冲突解决

使用rpm安装mysql时在安装到client包时报错依赖库冲突以及GPG密钥问题, 解决 1,下载 MySQL 的 YUM 存储库文件。 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2,安装下载的 YUM 存储库文件。 sudo rpm -…

Excel lookup函数使用方法及案例说明

大家好,这里是效率办公指南! 🔍 在Excel中,LOOKUP函数是一个强大的工具,用于查找和返回数据。无论是从一列中查找对应的值,还是在数据表中进行复杂的查找,LOOKUP函数都能帮助我们快速找到所需的…

VScode 修改 cursor 键盘设置

vscode 中按下 ctrl K 后 ctrl s 打开键盘快捷键设置。 搜索光标 cursor 找到 cursorDown 以及对应需要修改的快捷键命令 右键 添加快捷键设置 修改即可 alt space 关闭win设置中的中英文切换 代码提示下移 selectPrevSuggestion 上移

电脑usb控制软件有哪些?6款软件帮你轻松解决USB端口泄密烦恼!

在数字化时代,企业的信息安全成为重中之重。 然而,USB端口泄密事件频发,给企业的数据安全和业务连续性带来了巨大威胁。 此前,某大型制造企业,由于员工在日常工作中频繁使用U盘等USB存储设备,导致公司核心…

推荐五种msvcr71.dll丢失的解决方法,msvcr71.dll为什么会丢失?

当你的电脑提示msvcr71.dll丢失时是什么情况?为什么会出现这样的问题?msvcr71.dll丢失和什么有关呢?那么msvcr71.dll丢失应该如何解决呢?今天就和大家聊聊msvcr71.dll丢失的解决办法的详细解决步骤。 msvcr71.dll丢失是否与系统更…

在 Windows 上安装 Python

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

Nexus3的妙用

nexus 3使用场景 Nexus是一个全能仓库,通过部署nexus可以实现包含yum、apt、Maven、pypi、docker等的多种仓库。以下是nexus的适用场景: 当公共仓库无法访问或缓慢时,搭建nexus。比如国内docker无法访问,需要镜像加速。可以使用海外主机部署nexus,在nexus中创建docker(p…

redis安装(以6.0.13为例)

redis-6.0.13安装 1.创建安装目录2. 上传安装包3. 替换repo文件4.依赖安装5. redis安装5.1 解压5.2 编译5.3 安装5.4 配置 6. 常用命令 1.创建安装目录 mkdir -p /apps/scripts/ cd /apps/scripts/2. 上传安装包 将redis-6.0.13.tar.gz 上传至/apps/scripts/目录下 下载链接…

在泰国旅游不会口语怎么办?求推荐翻译软件!!!

如果在泰国旅游时遇到语言障碍,可以采取以下措施:学习一些基础的泰语短语,使用翻译应用程序,携带翻译卡片,利用身体语言,参加有导游的旅行团,选择提供中文服务的酒店和旅行社,使用地…