前言
最近学习了一下HTTP和HTTPS相关的知识,由于内容比较多,这里总结了一下自己经常错的地方
一、HTTP
1.1 定义
在MDN这样解释
超文本传输协议(HTTP) 是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)
1.2 特点
-
全称超文本传输协议
-
基于TCP/IP通信协议的应用层协议
-
HTTP默认端口号为80
-
属于无状态协议
注意:无状态的意思就是对事务处理没有记忆能力,比如增删改查等操作,每次浏览器发起请求,都返回同一个响应内容,每一个响应内容都是独立的,前一次请求获取不到上一次请求的内容信息,这个在数据交互场景中是不允许的。
举个栗子:
网站的登录状态、添加商品到购物车、修改用户信息等事务场景,这些都需要在一次操作后把状态记录下来,才能保证浏览器刷新或者点击其他页面时,前面的请求状态都会被记录下来,保证两个页面的关联交互。
1.3 请求方式
方式 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。 |
区别:
- 缓存 ---- GET 请求可被缓存,而POST不会被缓存
- 可见性 ---- GET的请求数据在 URL 中对所有人都是可见的,而POST请求数据不会显示在 URL 中。
- 历史 ---- GET 请求保留在浏览器历史记录中,而POST不会被保存到浏览器记录中
- 浏览器书签 ---- GET 请求可被收藏为书签,而POST不能被收藏为书签
- 数据长度 ---- GET 请求有长度限制,而POST请求对数据长度没有限制
- 安全性 ---- GET 相比POST不安全
1.4 HTTP1.0、HTTP1.1的区别
-
HTTP1.1相比HTTP1.0节约带宽
-
缓存处理的不同
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准.
在HTTP1.1中则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。 -
连接方式的不同以及请求的流水线处理
HTTP1.0支持短暂连接,每次浏览器发送请求需要建立TCP连接,等到服务器完成请求后再断开连接,而且服务器不跟踪和记录过去的请求。
HTTP1.1支持长连接,需要增加新的请求头来帮助实现,而且在同一个TCP的连接中可以传送多个HTTP请求和响应。 -
Host头处理不同
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名hostname。
在HTTP1.1的请求消息和响应消息都支持Host头域,且请求消息中如果没有Host头域会报告一个错误:400 Bad Request。 -
新增错误通知的管理
在HTTP1.1中新增了24个错误状态响应码。
1.5 HTTP1.1、HTTP2.0的区别
-
HTTP1.1的解析是基于文本协议的各式解析,而HTTP2.0的协议解析是二进制格式,更加的强大。
-
HTTP2.0支持多路复用: 一个连接可以并发处理多个请求。
一个连接上可以有多个request,且可以随机的混在一起,每个不同的request都有对应的id,服务端可以通过request_id来辨别,大大加快了传输速率。
-
HTTP2.0支持头部数据压缩: HTTP2.0对header的数据进行了压缩,加快了网络传输。
HTTP1.1中的header需要携带大量信息,而且每次都要重复发送。http2.0使用encode来减少传输的header大小。而且客户端和服务端可以各自缓存一份header filed表,避免了header的重复传输,还可以减少传输的大小。
-
HTTP2.0支持服务端推送: 通过解析html中的资源时,在解析到引入文件时,返回所需的文件(css或者js等),而不用再发起一次请求。
二、HTTPS
2.1 定义
HTTPS(安全的HTTP) 是 HTTP 协议的加密版本。它通常使用 SSL (en-US) 或者 TLS来加密客户端和服务器之间所有的通信 。这安全的链接允许客户端与服务器安全地交换敏感的数据,例如网上银行或者在线商城等涉及金钱的操作。
2.2 特点
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
三、HTTP和HTTPS的区别
- HTTP 的URL以http://开头,而HTTPS的URL以https:// 开头
- HTTP 是不安全的,而HTTPS 是安全的
- HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
- 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
- HTTP 无法加密,而HTTPS 对传输的数据进行加密
- HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书
四、状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
1**:信息状态码
状态码 | 名称 | 描述 |
---|---|---|
100 | 继续 | 初始的请求已经接受,请客户端继续发送剩余部分 |
101 | 切换协议 | 请求这要求服务器切换协议,服务器已确定切换 |
2**:成功状态码
状态码 | 名称 | 描述 |
---|---|---|
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理请求,但返回的信息可能来自另一个来源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器处理成功,用户终端应重置文档视图 |
206 | 部分内容 | 服务器成功处理了部分GET请求 |
3**:重定向状态码
状态码 | 名称 | 描述 |
---|---|---|
300 | 多种选择 | 针对请求,服务器可执行多种操作 |
301 | 永久移动 | 请求的页面已永久跳转到新的url |
302 | 临时移动 | 服务器目前从不同位置的网页响应请求,但请求仍继续使用原有位置来进行以后的请求 |
303 | 查看其他位置 | 请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码 |
304 | 未修改 | 自从上次请求后,请求的网页未修改过 |
305 | 使用代理 | 请求者只能使用代理访问请求的网页 |
307 | 临时重定向 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求 |
4**:客户端错误状态码
状态码 | 名称 | 描述 |
---|---|---|
400 | 错误请求 | 服务器不理解请求的语法 |
401 | 未授权 | 请求要求用户的身份演验证 |
403 | 禁止 | 服务器拒绝请求 |
404 | 未找到 | 服务器找不到请求的页面 |
405 | 方法禁用 | 禁用请求中指定的方法 |
406 | 不接受 | 无法使用请求的内容特性响应请求的页面 |
407 | 需要代理授权 | 请求需要代理的身份认证 |
408 | 请求超时 | 服务器等候请求时发生超时 |
409 | 冲突 | 服务器在完成请求时发生冲突 |
410 | 已删除 | 客户端请求的资源已经不存在 |
411 | 需要有效长度 | 服务器不接受不含有效长度表头字段的请求 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件 |
413 | 请求实体过大 | 由于请求实体过大,服务器无法处理,因此拒绝请求 |
414 | 请求url过长 | 请求的url过长,服务器无法处理 |
415 | 不支持格式 | 服务器无法处理请求中附带媒体格式 |
416 | 范围无效 | 客户端请求的范围无效 |
417 | 未满足期望 | 服务器无法满足请求表头字段要求 |
5**:服务端错误状态码
状态码 | 名称 | 描述 |
---|---|---|
500 | 服务器错误 | 服务器内部错误,无法完成请求 |
501 | 尚未实施 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关或代理出现错误 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 网关或代理服务器,未及时获取请求 |
505 | 不支持版本 | 服务器不支持请求中使用的HTTP协议版本 |
?