什么是通信协议?
通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。
TCP/IP 是不同的通信协议的大集合。
HTTP协议只是其中一种。
什么是 HTTP?
超文本传输协议(Hypertext Transfer Protocol,缩写 HTTP)旨在启用客户端和服务器之间的通信。
HTTP协议的职责
-
HTTP 负责 web 服务器与 web 浏览器之间的通信。
-
HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。
GET和POST方法的相同点和区别
面试常常会问:GET 和 POST 方法的区别是什么? 这导致我们只关注它们之间的差异,而忽略了它们之间的共性,下面就一起看看俩个方法之间到底有啥异同。
HTTP的方法
方法 | 描述 |
---|---|
GET | 用于从指定资源请求数据 |
POST | 用于将数据发送到服务器来创建/更新资源 |
PUT | 用于将数据发送到服务器来创建/更新资源 ,POST 和 PUT之间的区别在于 PUT 请求是幂等的(idempotent)。也就是说,多次调用相同的 PUT 请求将始终产生相同的结果。相反,重复调用POST请求具有多次创建相同资源的副作用。 |
HEAD | 本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检查网页是否被串改或更新,获取头信息等,特别适用在有限的速度和带宽下。 |
DELETE | 删除指定的资源 |
OPTIONS | 获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息 |
GET和POST不同点
-
GET在浏览器回退时是无害的,而POST会再次提交请求。
-
GET产生的URL地址可以被书签收藏,而POST不可以。
-
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
-
GET请求只能进行url编码(application/x-www-form-urlencoded),而POST支持多种编码方式 (application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多种编码。)。
-
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
-
GET请求在URL中传送的参数是有长度限制的(因为浏览器对URL的长度有限制,最大长度是 2048 个字符),而POST没有。
-
对参数的数据类型,GET只接受ASCII字符,而POST没有限制(允许二进制数据)。
-
GET参数通过URL传递,参数之间以&相连,POST放在Request body中,所以GET请求不安全,敏感信息会暴露在url上。
-
GET和POST还有一个重大区别是发送数据包数量不同
,GET 请求产生一个 TCP 数据包,而POST请求产生俩个 TCP 数据包,1、对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
2、而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
GET 请求过程:
- 浏览器发起请求 TCP 连接(第一次握手)
- 服务器响应进行 TCP 连接(第二次握手)
- 浏览器确认,并发送 GET 请求头和数据(第三次握手)
- 服务器返回 200 OK响应
POST 请求过程:
- 浏览器发起请求 TCP 连接(第一次握手)
- 服务器响应进行 TCP 连接(第二次握手)
- 浏览器确认,并发送 POST 请求头(第三次握手)
- 服务器返回100 Continue响应
- 浏览器发送数据
- 服务器返回 200 OK响应
GET和POST相同点
从上面我们了解到HTTP协议是基于TCP/IP协议的一个子协议,所以GET 和 POST 请求的本质是相同的,都是TCP/IP请求。
常见HTTP状态码
状态码 | 描述 |
---|---|
200 | 成功 |
201 | 请求成功并且服务器创建了新的资源 |
202 | 服务器已接受请求,但尚未处理 |
203 | 请求正在被执行,但还没有处理完 |
204 | 服务器成功处理了请求,但没有返回任何内容 |
301 | 永久重定向 |
302 | 临时重定向 |
303 | 表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源 |
304 | 本地缓存 |
400 | 错误请求,服务器不理解请求的语法 |
401 | 未经许可,需要通过HTTP认证 |
403 | 服务器拒绝请求 |
404 | 服务器找不到请求的资源 |
500+ | 服务器原因 |
结语
对于GET 和 POST 方法的异同就总结了这么多,疏漏之处在所难免,欢迎大家指正,我会及时修改。