不知道各位读者在面试的时候,有没有被问过这个问题:“请说一下GET和POST两者的本质区别”。基本上做过WEB开发的,对这个问题,都可以回答出一堆的区别。

比如:

最直接的区别,GET请求的参数是放在URL里的,POST请求参数是放在请求body里的;GET请求的URL传参有长度限制,而POST请求没有长度限制;GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST请求传参没有这个限制;当你激情四射的回答完之后,面试官可能微笑的摇摇头。

那么标准答案是什么呢?

HTTP请求与相应

其实,GET和POST本质上两者没有任何区别。他们都是HTTP协议中的请求方法。底层实现都是基于TCP/IP协议。上述的所谓区别,只是浏览器厂家根据约定,做得限制而已。

HTTP请求,最初设定了八种方法。这八种方法本质上没有任何区别。只是让请求,更加有语义而已。

OPTIONS 返回服务器所支持的请求方法GET 向服务器获取指定资源HEAD 与GET一致,只不过响应体不返回,只返回响应头POST 向服务器提交数据,数据放在请求体里PUT 与POST相似,只是具有幂等特性,一般用于更新DELETE 删除服务器指定资源TRACE 回显服务器端收到的请求,测试的时候会用到这个CONNECT 预留,暂无使用

RESTful API

服务端根据不同的请求方式,可以做不同的处理,同时,根据不同的请求,还可以设计出不同风格的应用程序接口,这就引出了Representational State Transfer,英文缩写就是REST,中文意思是表述性状态转移(和没翻译差不多),可以理解为客户端和服务端的交互形式。而符合这种交互形式的接口设计,就被叫做RESTful API。这种风格有如下特点:

使用名词而不使用动词

例如:/getStudent 或者 /searchStudents 应该改成 /students

GET用于查询,PUT、POST、DELETE用于修改

使用名词复数不使用单数

在HTTP请求的head体里定义序列化类型

例如:Content-Type:application/json

请求的集合应设定好过滤条件、排序、字段、分页

例如:/students?page=1&size=10

接口要版本化

例如:/api/v1/students

要有HTTP状态码

允许重写HTTP请求方法

HTTP状态码

HTTP协议中提供了好多状态码,列举我们常用的:

200 返回正常304 服务端资源无变化,可使用缓存资源400 请求参数不合法401 未认证403 服务端禁止访问该资源404 服务端未找到该资源500 服务端异常结束

希望下次再有人问你这样问题的时候,你能伟光正的和他聊一聊了。

原文地址:https://baijiahao.baidu.com/s?id=1620934682611653374&wfr=spider&for=pc

GET和POST本质上有什么区别,这才是标准答案的更多相关文章

  1. GET和POST本质上有什么区别

    如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继 ...

  2. 大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!

    DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然!——和一个句子的分词算法CRF没有区别!注:传统DDos检测直接基于IP数据发送流量来识别, ...

  3. C++学习笔记----3.2 C++引用在本质上是什么,它和指针到底有什么区别

    从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...

  4. Jsp与servlet本质上的区别

    1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)2.jsp更擅长 ...

  5. 详细分析 Java 中实现多线程的方法有几种?(从本质上出发)

    详细分析 Java 中实现多线程的方法有几种?(从本质上出发) 正确的说法(从本质上出发) 实现多线程的官方正确方法: 2 种. Oracle 官网的文档说明 方法小结 方法一: 实现 Runnabl ...

  6. Python和JavaScript在使用上有什么区别?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://www.freecodecamp.org/news/python-vs-javas ...

  7. jQuery的$.ajax方法响应数据类型有哪几种?本质上原生ajax响应数据格式有哪几种,分别对应哪个属性?

    jQuery的$.ajax方法响应数据类型有:xml.html.script.json.jsonp.text 本质上原生ajax响应数据格式只有2种:xml和text,分别对应xhr.response ...

  8. PC端和移动端在前端开发上的一些区别,前端里移动端到底比pc端多哪些知识

    (1)———————— 前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何?我做过几年的web前端开发,就简单谈谈自己的感受吧.首先来看看PC端和移动端在前端开发上的一些区别: ( ...

  9. 使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模

    from:https://www.jiqizhixin.com/articles/2018-08-11-11 可以通过分析流量包来检测TOR流量.这项分析可以在TOR 节点上进行,也可以在客户端和入口 ...

随机推荐

  1. Uber CEO博鳌论坛采访:看好中国市场共享经济的发展模式

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. Google序列化库FlatBuffers 1.1发布,及与protobuf的比较

    个人总结: FlatBuffer相对于Protobuffer来讲,优势如下: 1. 由于省去了编解码的过程,所以从速度上快于Protobuffer,个人测试结果100w次编解码,编码上FlatBuff ...

  3. jmeter接口测试--响应结果Unicode转码成中文

    jmeter接口测试-响应结果Unicode转码成中文 一般情况下,接口返回数据都会经过加密,所以有时相应结果会显示为Unicode,因此,需添加BeanShell PostProcessor,加入代 ...

  4. 用Python 的一些用法与 JS 进行类比,看有什么相似?

    Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...

  5. 树莓派搭建 Hexo 博客(一)

    Hexo 一个开源的博客框架,本文记录了一下在树莓派上搭建 Hexo 博客的过程. 什么是 Hexo? Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解 ...

  6. BZOJ 2597 剪刀石头布(最小费用最大流)(WC2007)

    Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道 ...

  7. HDU 4719 Oh My Holy FFF(DP+线段树)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description N soldiers from the famous "*FFF* army" is standing in a line, from left to ri ...

  8. uva 116 Unidirectional TSP(动态规划,多段图上的最短路)

    这道题目并不是很难理解,题目大意就是求从第一列到最后一列的一个字典序最小的最短路,要求不仅输出最短路长度,还要输出字典序最小的路径. 这道题可以利用动态规划求解.状态定义为: cost[i][j] = ...

  9. 用vs调试项目页面无样式

    ASP.NET Development Server 上的文件授权 在文件系统网站中,静态文件(例如图像和样式表)遵守 ASP.NET 授权.例如,如果禁用了对静态文件的匿名访问,匿名用户则不能使用文 ...

  10. 个人作业4——alpha阶段个人总结1

    一.个人总结 在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 总体来说,这次的alpha并不是很顺利,编程是基础,如果对语言不是很熟悉的话,一个团队是很难开发出什么东 ...