前言
虽然这里只问了 HTTP 请求方法有哪几种,以及其中的 GET 方法和 POST 方法有什么区别,但是如果我们能够介绍 HTTP 是什么,它的特点和缺点以及特性,可以从侧面反应我们的知识广度。
我们这里分别回答 HTTP 是什么、请求方法的种类、如何利用 Cookie 来解决无状态这个缺陷、以及 HTTP 有什么缺点,最后引出 HTTPS 是什么。
HTTP 超文本传输协议,位于应用层
OSI 参考模型将复杂的计算机网络体系结构分了 7 层; TCP/IP
协议族则将网络体系分了 4 层,具体如下图:
这里我们主要了解两点:
- 将复杂的网路体系分层,可以更加简单的实现每层的协议,也便于以后对各层协议的扩展和优化。
- HTTP 属于应用层,是一种基于请求和响应、且无状态的一种协议。
HTTP 是不保存状态的协议
HTTP 为了快速的处理大量事务,确保协议的可伸缩性,所以设计的很简单;HTTP 是一种不保存状态,即无状态协议。简单来说,HTTP 对于请求和响应都不会做持久化处理。
但是无状态这个特性会导致业务逻辑的尴尬(例如需要登录权限),为了实现保持状态的功能,引入了 Cookie 技术;通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
HTTP 支持的方法种类
HTTP 请求方法有:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。最常用的就是 GET 方法 和 POST 方法;
对于方法种类和介绍如下图:
imageHTTP 有请求报文和响应报文
HTTP 通信的基本单位是报文,HTTP 是一种基于请求和响应的协议,所以有请求报文和响应报文。HTTP 报文由报文首部和报文实体组成:报文首部主要是配置信息,然后报文实体是传输的数据。
对于报文首付中的字段解释以及 HTTP 状态码等,可以参阅下 书籍-图解HTTP 或者文末的参考链接。这里就不过多描述了(因为实在是太多了 - -/...)。
GET 方法和 POST 方法的区别
从语义角度来说,GET 是从指定的资源请求数据,POST 是向指定的资源提交要被处理的数据。正规详细的解释在这里: HTTP 方法:GET 对比 POST。摘抄区别如下:
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
GET 方法和 POST 方法安全性比较
对于安全性,只能说 POST 比 GET 相对安全一丢丢:
- GET 方法参数直接拼接在 URL 后面,可以在浏览器直接看到。
- GET 方法参数会被缓存。
- POST 方法参数放到 HTTP 消息主体,但是通过网络抓包一样是可以获取到参数的。
在这里不能讨论安全性的问题,POST 跟 GET 只是 HTTP 两种方法而已,对于传输层来说都是明文的,都是不安全的,对于网络请求安全问题应该要借助其它技术来实现,例如利用 HTTPS 来保证安全性。
HTTP 的缺点
为了让 HTTP 更加快速的处理大量事务,确保协议的可伸缩性,所以把 HTTP 设计的很简单。因此也会出现以下问题:
- 由于通信是使用明文的,所以内容很容易被窃听。
- 由于不会验证对方身份,这里很容易遭遇伪装,伪装服务器或者伪装客户端等,容易遭受 Dos 攻击。
- 不校验报文的完整性,会出现中间人攻击,篡改报文信息的情况。
对于这些缺点,我们可以通过将报文加密、认证通信双方、校验报文的完整性来解决。HTTP + 加密 + 认证 + 完整性保护 = HTTPS。这里就是为什么推行 HTTPS 的原因,因为 HTTPS 可以有效的解决上述 HTTP 的缺点。
总结
本章的知识点和图片基本来自书籍-图解TCP/IP 和 书籍-图解HTTP 。这两本书作为入门书非常棒,强烈推荐。
网友评论