当前位置: 首页 > news >正文

【面试题HTTP中的两种请求方法】GET 和 POST 有什么区别?

GET 和 POST 有什么区别?

    • 1.相同点和最本质的区别
      • 1.1 相同点
      • 1.2 最本质的区别
    • 2.非本质区别
      • 2.1 缓存不同
      • 2.2 参数长度限制不同
      • 2.3 回退和刷新不同
      • 2.4 历史记录不同
      • 2.5 书签不同
    • 总结
    • 代码示例

GET 和 POST 是 HTTP 请求中最常用的两种请求方法,在日常开发的 RESTful 接口中,都能看到它们的身影。而它们之间的区别,也是一道常见且经典的面试题,所以我们本文就来详细的聊聊。 HTTP 协议定义的方法类型总共有以下 10 种:
在这里插入图片描述

PS:目前大部分的网站使用的都是 HTTP 1.1 的协议。

但在日常开发中,使用频率最高的就属 GET 请求和 POST 请求了,尤其是在中、小型公司,基本只会使用这两种请求来实现一个项目。

1.相同点和最本质的区别

1.1 相同点

GET 请求和 POST 请求底层都是基于 TCP/IP 协议实现的,使用二者中的任意一个,都可以实现客户端和服务器端的双向交互。

1.2 最本质的区别

GET 和 POST 最本质的区别是“约定和规范”上的区别,在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 请求是用来传输实体对象的,因此会使用 POST 来进行添加、修改和删除等操作。
当然如果严格按照规范来说,删除操作应该使用 DELETE 请求才对,但在实际开发中,使用 POST 来进行删除的用法更常见一些。
按照约定来说,GET 和 POST 的参数传递也是不同的,GET 请求是将参数拼加到 URL 上进行参数传递的,而 POST 是将请参数写入到请求正文中传递的,如下图所示:

在这里插入图片描述

2.非本质区别

2.1 缓存不同

GET 请求一般会被缓存,比如常见的 CSS、JS、HTML 请求等都会被缓存;而 POST 请求默认是不进行缓存的。

2.2 参数长度限制不同

GET 请求的参数是通过 URL 传递的,而 URL 的长度是有限制的,通常为 2k,当然浏览器厂商不同、版本不同这个限制的大小值可能也不同,但相同的是它们都会对 URL 的大小进行限制;而 POST 请求参数是存放在请求正文(request body)中的,所以没有大小限制。

2.3 回退和刷新不同

GET 请求可以直接进行回退和刷新,不会对用户和程序产生任何影响;而 POST 请求如果直接回滚和刷新将会把数据再次提交,如下图所示:
在这里插入图片描述

2.4 历史记录不同

GET 请求的参数会保存在历史记录中,而 POST 请求的参数不会保留到历史记录中。

2.5 书签不同

GET 请求的地址可被收藏为书签,而 POST 请求的地址不能被收藏为书签。

总结

GET 和 POST 是 HTTP 请求中最常用的两种请求方法,它们的底层都是基于 TCP/IP 实现的。它们的区别主要体现在 5 个方面:缓存不同、参数长度限制不同、回退和刷新不同、历史记录不同、能否保存为书签不同,但它们最大的区别是规范和约定上的不同,规范中定义 GET 是用来获取信息的,而 POST 是用来传递实体的,并且 GET 请求的参数要放在 URL 上,而 POST 请求的参数要放在请求正文中。

代码示例

在这里插入图片描述
MethodServlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/method")
public class MethodServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getWriter().write("GET response");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {resp.setContentType("text/html; charset=utf-8");resp.getWriter().write("POST 响应");}
}

testMethod.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body>
<button onclick="sendGet()">发送 GET 请求</button>
<script>function sendGet() {ajax({method: 'GET',url: 'method',callback: function (body, status) {console.log(body);}});}// 把之前封装的 ajax 函数拷贝过来function ajax(args) {var xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {// 0: 请求未初始化// 1: 服务器连接已建立// 2: 请求已接收// 3: 请求处理中// 4: 请求已完成,且响应已就绪if (xhr.readyState == 4) {args.callback(xhr.responseText, xhr.status)}}xhr.open(args.method, args.url);if (args.contentType) {xhr.setRequestHeader('Content-type', args.contentType);}if (args.body) {xhr.send(args.body);} else {xhr.send();}}</script>
<button onclick="sendPost()">发送 POST 请求</button>
<script>function sendPost() {ajax({method: 'POST',url: 'method',callback: function (body, status) {console.log(body);}})}
</script>
</body>
</html>
http://www.lryc.cn/news/91764.html

相关文章:

  • Allegro16.6详细教程(三)
  • Python3数据分析与挖掘建模(6)离散分布分析示例
  • 汇编语言程序设计基础知识二
  • 一文详解!Robot Framework Selenium UI自动化测试入门篇
  • Java 9 模块化系统详解
  • Windows定时执行Python脚本
  • 数据科学简介:如何使用 Pandas 库处理 CSV 文件
  • 面试专题:java多线程(2)-- 线程池
  • Linux文件权限及用户管理
  • 以AI为灯,照亮医疗放射防护监管盲区
  • Golang单元测试详解(一):单元测试的基本使用方法
  • 数据库的序列
  • 2022年回顾
  • 40亿个QQ号,限制1G内存,如何去重?
  • 【django】django的orm的分组查询
  • MySQL5.8在Windows下下载+安装+配置教程
  • Flask or FastAPI? Python服务端初体验
  • 《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记
  • Linux:apache网页优化
  • 涨点技巧:注意力机制---Yolov8引入Resnet_CBAM,CBAM升级版
  • solr教程
  • 基于java语言编写的爬虫程序
  • UM2082F08 125k三通道低频无线唤醒ASK接收功能的SOC芯片 汽车PKE钥匙
  • 【SpringBoot_Project_Actual combat】 Summary of Project experience_需要考虑的问题
  • 恒容容器放气的瞬时流量的计算与合金氢化物放氢流量曲线的计算
  • 网络编程_UDP通信
  • windows修改Pycharm的右键打开方式
  • Python入门(十四)函数(二)
  • Allure测试报告定制全攻略,优化你的Web自动化测试框架!
  • 推荐系统算法详解