当您网上冲浪时,HTTP 协议无处不在。当您浏览网页、获取一张图片、一段视频时,HTTP 协议就正在发生。
本篇将尽可能用简短的例子和必要的说明来让您了解基础的 HTTP 知识。
目录:
互联网是有关 web 客户端和 web 服务器之间的通信。
HTTP(HyperText Transfer Protocol)又叫超文本传输协议。本质上就是一个协定好双方如何进行交流沟通的约定。
这就好比我在一起玩游戏的朋友群里发送一条 「1?」 的消息,朋友们就立即知道是在询问今晚是不是要一起游戏的意思。
但是如果我给其他人发送 「1?」 就可能出现问题:他们不知道我在说什么。
调皮地给我妈发了一下试试...
本质上,这就是 HTTP 协议所代表的含义。我们已经同意,如果我们以特定的方式发送消息,则服务器就会理解消息的意图并作出回应。
1989 年 3 月,互联网还只属于少数人。在这一互联网的黎明期,HTTP 诞生了。
来源:《图解HTTP》
1989年,当时还在欧洲核子研究组织(CERN)工作的蒂姆·伯纳斯·李(Tim Berners-Lee)提出了一种能让远隔两地的研究者们共享知识的设想。
蒂姆·伯纳斯·李 来源:wiki
最开始称为 Mesh,后来在 1990 年实施期间将其重命名为 World Wide Web(万维网)。它基于现有的 TCP/IP 协议构建,包括 4 个部分:
这四部分在 1990 年底完成。虽然此时 Web 页面只能显示单纯的文本内容,浏览器也只能显示呆板的文字信息,不过这已经基本满足了建立 Web 站点的初衷,实现了信息资源共享。
1991 年创建的第一个网页
以下就是 HTTP/0.9 的请求内容:
GET /page.html
用唯一可用的 GET 方法向目标服务器获取指定的文档。(一旦连接到服务器,协议、服务器、端口号这些都不是必须的)
响应也极其简单:只包含文档本身。
<HTML>
网页的内容
</HTML>
这意味着 HTTP/0.9 只能够传输 HTML 文件。一旦出现问题,一个特殊的包含问题描述信息的 HTML 文件将被发回,供人们查看。
由于 HTTP/0.9 协议的应用十分有限,加之 HTTP 使用量和 HTML 的高速发展,浏览器和服务器迅速扩展其内容使其用途更广:
----------HTTP/0.9请求----------
GET /page.html
----------HTTP/1.0请求----------
GET /page.html HTTP/1.0 -> 新增协议版本
----------HTTP/0.9响应----------
<HTML>
....
</HTML>
----------HTTP/1.0响应----------
200 OK -> 新增状态码
<HTML>
....
</HTML>
HTTP/0.9 规范大约只有一页,而 HTTP/1.0 在 RFC-1945 中定义的规范则足足有 60 页。这说明 HTTP 已经成长为一个重要的工具。
尽管 HTTP/1.0 从 HTTP/0.9 有了很大的飞跃,但仍然存在许多必须解决的已知缺陷。例如与 TCP 协议交互不良、没有充分考虑缓存等问题。
拿与 TCP 协议交互不良举例。由于 HTTP 是基于 TCP 建立的,所以通讯之前需要建立连接,通讯结束之后需要断开连接。
HTTP/1.0 每一次的通讯都需要建立并断开连接,这无疑增加了无谓的通信开销。
文档 RFC 1945 定义了 HTTP/1.0,但它是狭义的,并不是官方标准。所以实际运用起来非常地混乱。所以实际上自 1995 年开始,即 HTTP/1.0 文档发布的下一年,就开始修订 HTTP 的第一个标准化版本。
HTTP/1.1 在 1997 年 1 月以 RFC 2068 文件发布。HTTP/1.1 消除了大量歧义内容并引入了多项改进:
一个典型的请求流程, 所有请求都通过一个连接实现,看起来就像这样:
由于 HTTP 的可扩展性——创建新的头部和方法是很容易的——HTTP 协议稳定使用了超过 15 年。期间不断对 HTTP/1.1 协议进行修订(RFC 2616、RFC 7230、RFC 7235),为 HTTP/2.0 作了十足的铺垫。
这些年来,网页愈渐变得复杂,甚至演变成了独有的应用,可见媒体的播放量,增进交互的脚本大小也增加了许多:更多的数据通过 HTTP 请求被传输。
在 2010 年到 2015 年,谷歌通过实践证明了实验性的 SPDY 协议的可行性,这成为了后来 HTTP/2 协议的基础。
来源:https://www.keycdn.com/support/spdy-protocol
HTTP/2 在 HTTP/1.1 有几处基本的不同:
*注:这里 HTTP/2 并不是合并成一个包,而是分成多个 Stream 发送,这里只是为了绘画方便。
大家可以通过点击这里直观感受到 HTTP/2 比 HTTP/1.1 快了多少。
详细的 HTTP/2 优秀的地方可以参看下 4 链接
在 2015 年 5 月正式标准化后,HTTP/2 取得了极大的成功,在 2016 年 7 月前,8.7% 的站点已经在使用它。高流量的站点最迅速普及,在数据传输上节省了可观的成本和支出。
这种迅速的普及率很可能是因为 HTTP2 不需要站点和应用做出改变:使用 HTTP/1.1 和 HTTP/2 对他们来说是透明的。
拥有一个最新的服务器和新点的浏览器进行交互就足够了。只有一小部分群体需要做出改变,而且随着陈旧的浏览器和服务器的更新,而不需 Web 开发者做什么,用的人自然就增加了。
随着 HTTP/2 的发布,就像先前的 HTTP/1.x 一样,HTTP 没有停止进化。HTTP 的扩展性依然被用来添加新的功能。
HTTP 的进化证实了它良好的扩展性和简易性,释放了很多应用程序的创造力并且情愿使用这个协议。
HTTP/3 是即将到来的第三个主要版本的 HTTP 协议。与前任协议不同,在 HTTP/3 中,将弃用 TCP 协议,改为使用 UDP 协议和 QUIC 协议实现。
此变化主要为了解决 HTTP/2 中存在的队头阻塞问题。由于 HTTP/2 在单个 TCP 连接上使用了多路复用,受到 TCP 拥塞控制的影响,少量的丢包就可能导致整个 TCP 连接上的所有流被阻塞。
截至 2021 年 1 月,HTTP/3 仍然是草案状态。
HTTP 协议在设计之初就没有充分考虑安全性的问题。所以基于 HTTP 的这些应用都承担着如下的几个风险:
HTTPS(HTTP over SSL)采取嵌套新一层安全套接字层(Secure Socket Layer,SSL)来解决网络传输的安全性问题。
加密是很容易联想到的解决方法。但如何保证传输加密方法的过程不被窃听呢?
这时候非对称加密的出现解决了这一大难题。它把密码革命性地分成公钥和私钥,由于两个秘钥并不相同,所以称为非对称加密。
举个例子,假设我们现在需要加密的字符是 520,我们加密的方法是把这个数乘以 91,并把结果的最后三位公布出来:
注:这里的 91 相当于公钥,任何人都可以知道。
解密我们当然不能通过除以 91 来完成,而是通过 x11,取出结果后三位来还原:
注:这里的 x11 相当于私钥,只有解密方才知道。
这是因为 91*11=1001,任何一个三位数乘以 1001 显然后三位是不会变的。这大概就是非对称加密的原理了,基于这个原理我们通信的双方就可以各自生成自己的公钥私钥并进行相对安全的通信了。
非对称加密通信演示
上面的过程看似无懈可击,但在 TCP/IP 的端到端的通信里,路途遥远,夜长梦多。
如果在第二步的时候,信息被黑客截取,在严刑拷打之下知道了这是传输公钥的信息。那么完全可以自己生成一对密钥和公钥,冒充是彼此来传输自己的秘钥。
加密危机之后,又产生了信任危机。我们需要一个有公信力的组织来证明身份,这个问题就得到了解决。
这个可信的组织就是颁发 HTTPS 证书的组织 CA(Certificate Authority)。每次有客户端或者服务端想要公开自己的公钥时,都需要向 CA 做出申请,通过后 CA 会颁发一个与公开公钥绑定的数字证书。(了解更多证书)
进行 HTTPS 通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后,先进行验证,如果验证通过,就可以开始通信。
在之前介绍比特币原理的时候,我们提到过一种哈希算法。它的作用是能把任意长度的输入编程固定长度的二进制输出。
注:为了简化右边为 16 进制数
在 HTTPS 中,有一种新的摘要算法,可以简单理解为是对于内容的一种压缩。所以但凡内容变化一丁点,哪怕是一个标点符号,压缩之后的数字哈希也不对。
客户端在发送明文之前会通过摘要算法算出明文的 「指纹」,发送的时候把 「指纹 + 明文」 一同加密成密文后,发送给服务器。
服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的 「指纹」 和当前算出的 「指纹」 做比较,若 「指纹」 相同,说明数据是完整的。
尽管听上去 HTTPS 就是更安全的 HTTP,但也有许多细节方面的不同:
来源:我没有三颗心脏
作者:我没有三颗心脏
们选择客户关系管理(CRM)应用做演示。 本文主要讲解低代码工具配置生成应用的主体流程,更多的细节需要参考文档。
先从大迈云官网下载安装低代码工具,地址www.mvcx.net/download.html。 当然你如果手边有其他的低代码工具,可以直接使用, 基础层面的功能相差不大。
分六个主要步骤完成配置:
1、配置数据表与字段
2、设置数据表关联
3、配置枚举项
4、配置用户角色
5、配置菜单及授权
6、配置可用页面
官方演示地址: https://center.mvcx.net/web/index.html#/apps/doc/128
一、配置数据表与字段
客户关系管理(CRM)中,我们选择具有代表性的多张数据表用作配置。 分别是客户/财务合同/产品/财务合同明细/回款明细/开票明细 , 每张表都配置了一系列字段。
数据表的细节参考官方演示的Excel表格。 按照Excel模板整理完多张表的字段,在后台一次性导入,创建数据结构。 一次性导入的目的,是为了项目有个整体的规划性,避免后面频繁修改数据表。后期可对数据结构(表与字段) 进行修改, 对单表增加字段,需要走完整的配置流程。 添加字段\字段授权\绑定字段到页面。
在创建数据结构的同时,我们可以选择同时创建默认操作页,包括表单页,列表查询页,展示页等, 自动化地完成基础CRUD功能。
二、设置数据表关联
在后台数据表->数据关联中设置表之间关系,等同于数据库外键。
财务合同 - N:1 - 客户
财务合同明细 - N:1 - 产品
财务合同明细 - N:1 - 财务合同
回款明细 - N:1 - 财务合同
开票明细 - N:1 - 财务合同
这里不涉及多对多的关系,相对简单。 设置完表关联后, 绝大多数的交叉调用, 都由系统自动来完成,包括多表查询,外键约束等。
三、配置枚举项
这里我们要用到枚举项有, 省份\公司类型\跟进状态\审核状态\合同类型\合同流程\合同进度\付款方式\产品状态\结算方式等。
在后台管理,基础数据中设置, 然后把枚举项绑定到对应字段,其他交给系统来完成。
四、配置用户角色
在后台管理->人员权限-> 角色权限里设置
企业管理系统,我们一般配置 user(普通用户), sales(销售) , manager(销售经理) , finance (财务) ,admin (系统管理员), hr(人力资源) 等。
后面我们会根据角色,给相应的人员授权不同功能。 角色不完全等同于公司里的职位, 很多时候一个人是身兼多个角色。
五、配置菜单及授权
在后台管理 -> 菜单页面 -> 可用菜单中操作
先创建一级菜单, 然后创建二级,三级菜单。 菜单配置路由,才能导航到特定页,配置路由的简单方式, 在菜单页面->可用页面中,点击(+菜单),就把当前页添加到了菜单项中,
对应的路由也已设置。 熟悉后可以手动设置路由项,开启更多功能。 在菜单设置中,为当前菜单设置父菜单,以及排序。
对菜单进行角色授权,允许那些角色看到或使用那些菜单。 实时配置的菜单会在用户第二次登陆后生效,或直接当前页刷新网页。菜单可以配置图标, 颜色。这里我们分别设置客户,合同,产品等相关菜单
六、配置可用页面
在创建数据表时,系统已经默认创建了单表的表单页,列表查询页,详情展示页等。 我们对系统生成的页面进行进一步配置,来完善功能。 很多时候配置是设定交叉表的字段引用,系统会自动生成
绝大多数代码。 各种页面也存在组合形式,当前演示中,财务合同表单,就是组合页面类型,附带子表合同明细。 页面需要授权,绑定到菜单才能正式使用。
系统内置了十多种通用的页面模型, 这些模型都来自于常规应用的抽象,通过配置页面就完成了终端用户可用的功能。 很多功能都是PC端、移动端一起生成的。
这里的配置有比较多的细节、参数要调整 ,可以参考官方文档,或者安装应用后,直接看成型的配置。
配置完成后的演示截图。
低代码工具生成表单
低代码工具生成列表
低代码工具生成移动端
如果你有1-2年的编程经验,可以很轻松地利用低代码工具搭建一个基础应用。
下面一个课时,我们将着重讲低代码编程的灵活性,怎样适应各种定制化的场景。 近几年来IT技术的发展,使得低代码编程能够覆盖更广的范围。
请关注我们的公z号: 大迈云, 可直接在大迈云官网mvcx.net下载低代码编程工具。
404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开。
现在大部分开源系统都会为大家考虑到404页面的跳转引导,比如:z-blog/wordpress,都是很不错的开源系统(注意不要用最原始的开源系统,而是采用带有模板的系统)。菜鸟后院网站本身也是wordpress的开源程序,然后我们用robin模板。(花299元拥有和菜鸟后院一样的网站,包括域名和1G阿里巴巴云空间)
搜索引擎使用 http 状态码来识别网页的状态。当搜索引擎获得不正确的链接时,网站应该返回一个状态代码404,告诉搜索引擎放弃索引该链接。如果返回一个200或302状态代码,搜索引擎会对链接进行索引,导致许多不同的链接指向相同的页面内容。结果,搜索引擎对这个网站的信任度大大降低。很多网站存在这个问题,那就是404页面返回的是200或302状态码而不是404状态码。
1、做一个简单的404页面,命名如:404.html;
2、通过ftp把这个404页面上传到网站根目录;
3、进入虚拟主机管理后台,找到404页面提交的入口,添加以上404页面的地址,如:www.cnbackyard.com/404.html(一般空间服务商都有带着种功能,也可以直接找他们技术客服完成这步操作)
4、输入一个错误的链接进行访问测试,随便输入,比如:www.cnbackyard.com/123.html,如果正确返回到404.html页面,则算正确;
5、使用站长工具(http://tool.chinaz.com/pagestatus),输入任意一个错误网址,检查返回值是否为404。如果返回值是200,代表该主机商设置有误,可以与其技术反馈。
以上操作方法对于一个seo初学者来说,还是有点复杂,同学们可以关注燃灯教育直播课程,参加我们的培训,理解起来会更透彻一点。
*请认真填写需求信息,我们会在24小时内与您取得联系。