都2020年了,还理不清GET请求和POST请求区别?

前言

这个问题看上去特别初级,但实际上却涉及到方方面面,也是面试官特别喜欢考的缘由之一。既然如此,那就让咱们来一块儿完全理清楚他们的区别。php

首先,咱们先科普一些知识点。web

什么是 HTTP

HTTP 超文本传输协议,是一个简单的请求-响应协议,它一般运行在 TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及获得什么样的响应。面试

HTTP请求方法

序号 方法 描述
01 HEAD 请求指定的页面信息,并返回实体主体。
02 GET 相似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
03 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会致使新的资源的创建或已有资源的修改。
04 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
05 DELETE 请求服务器删除指定的页面。
06 CONNECT HTTP/1.1 协议中预留给可以将链接改成管道方式的代理服务器。
07 OPTIONS 容许客户端查看服务器的性能。
08 TRACE 回显服务器收到的请求,主要用于测试或诊断。
09 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新。

知识已经科普的差很少了,接下来,让咱们一块儿分析 GET 请求把。浏览器

GET 请求

  1. 它是 HTTP 常见的请求类型,最多见于向服务器查询某些信息。
  2. 能够将查询参数追加到 URL末尾,以便将信息发送给服务器。
  3. 对查询字符串的格式有要求,每一个参数名称和值必须使用encodeURIComponent进行编码,才能放到URL末尾,必须用&符号隔开。例如:baidu.com/index.php?name=111&id=222
  4. GET请求产生一个数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)

POST请求

  1. 它是 HTTP 常见的请求类型,最多见于向服务器发送应该被保存的信息或者查询某些信息。
  2. 能够添加请求参数,将请求参数添加到body中。
  3. POST请求产生2个数据包,在火狐浏览器中,产生一个数据包。

GET请求和POST请求的差异

  1. GET 请求的请求参数是添加到 head 中,能够在 url 中能够看到;POST 请求的请求参数是添加到BODY中,在url 中不可见。
  2. GET 请求参数须要使用 encodeURIComponent 进行编码,必须用 & 符号隔开。
  3. 请求的url有长度限制,这个限制由浏览器和 web 服务器决定和设置的。例如IE浏览器对 URL的最大限制为2083个字符,若是超过这个数字,提交按钮没有任何反应。由于GET请求的参数是添加到URL中,因此GET请求的URL的长度限制须要将请求参数长度也考虑进去。而POST请求不用考虑请求参数的长度。
  4. GET请求产生一个数据包; POST请求产生2个数据包,在火狐浏览器中,产生一个数据包。这个区别点在于浏览器的请求机制,先发送请求头,再发送请求体。由于GET没有请求体,因此就发送一个数据包,而POST包含请求体,因此发送两次数据包,可是因为火狐机制不一样,因此发送一个数据包。
  5. 因为GET请求的参数是在url中,因此能够直接在浏览器中打开

GET请求和POST请求的使用场景

若是想要查询的更快,可使用GET请求。 其余的,并没有差异。服务器

留言解惑

因为有些小伙伴给我留言,说部份内容存在差别,这边统一说明下。
并发

  • 问题1:GET 请求能够支持 BODY 传递请求参数的。博主却没有说起。

解答:
1.GET 请求,默认是不支持BODY传递请求参数的。
2.你能够经过其余方式让其支持BODY传递请求参数, 可是官方并不建议这样作。
3.毕竟这不是一个规范,也会存在未知的兼容性问题。因此我并未强调这一点,毕竟存在兼容性问题,并且还须要大量力气去开发,若是只是为BODY传递请求参数,为何不直接用POST请求呢,POST请求它不香吗?性能

  • 问题2:GET请求、POST请求还涉及是否能够被收藏书签耶~博主没有说起。

解答:
1.GET请求和POST请求均可以被设置为书签的,当存在请求参数时,POST请求没法在书签中体现请求参数后的结果。由于POST的请求参数在BODY中。
2.在实际项目开发中,大部分接口都是须要验证身份信息的。这个时候添加书签的意义就不是很大。由于信息都会获取不到。
3.博主认为这并非一个很大的区别点,理由如上,因此并未涉及。测试

相关文章
相关标签/搜索