认识 HTTP
首先你听的最多的应读就是 HTTP 是一种超文本传输饰议(Hypertext Transfer Protocol), 这你一定能说出来,但是这样还不够,假如你是大厂面试官,这不可能是他想要的最终结果。我们在面试的时候要把自己知道的尽可能多的说出来才有和面试官谈价钱的资本。
那么什么是超文本传输协议?
超文本传输协议可以进行文字分割:超文本(Hypertext)、传输(Transfer) 协议(Protocol), 已们之间的关系如下:
什么是超文本
在互联网早期的时候,我们输人的信息只能保存在本地,无法和其他电脑进行交互。我们保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频甚至点击文字或图片能够进行超链接的跳转,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)
什么是传输
那么我们上面说到,两台计算机之间会形成互联关系进行通信,我们存储的超文本会被解析成为二进制数据包,由传输载体(例如同轴电统, 电话线,光缝)负责把二进制数据包由计算机终端传输到另一个终端的过程称为传输(transfer)) 通常我们把传输数据包的一方称为请求方, 把接到二进制数据包的一方称为应答方。请求方和应答方可以进行互换,请求方也可以作为应答方接受数据,应答方也可以作为请求方请求数椐它们之间的关系如下:
什么是协议
协议这个名词不仅局限于互联网范畴,也体现在日常生活中,比如情侣双方约定好在哪个地点吃饭, 这个约定也是一种协议,比如你应聘成功了, 企业会和你签订劳动合同,这种双方的雇佣关系也是一种如议。注意自己一个人对自己的约定不能成为协议,协议的前提条件必须是多人约定。
那么网络协议是什么呢?
网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。没有网络协议的互联网是混乱的,就和人类社会一样人不能想怎公样就怎公样,你的行为约束是受到法律的约束的;那公互联网中的端系统也不能自己想发什么就发什么,也是需要受到通信协议约束的。
那么我们就可以总结一下,什么是 HTTP?
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、规频等超文本数据的约定和规范。
与HTTP 有关的组件
网络模型
网络是一个复杂的系统,不仅包括大量的应用程序、 端系统、通信链路、分组交换机等,还有各种各样的协议组成。
为了给网络协议的设计提供一个结构,网络设计者以分层(layer)的方式组织协议,每个协议属于层次模型之一。每一层都是向它的上一层提供服务 (service),即所谓的服务模型(service model)。每个分层中所有的协议称为协议栈(protocolstack)。
因特网的协议栈由五个部分组成:
物理层、链路层、网络层、运输层和应用层
应用层
应用层是网络应用程序和网络协议存放的分层, 因特网的应用层包括许多协议,例如我们学 web 离不开的HTTP,电子邮件传送协以 SMTP、 端系统文件上传协议 FTP、还有为我们进行域名解析的 DNS协议。应用层协议分布在多个端系统上一个端系统应用程序与另外一个端系统应用程序交换信息分组,我们把位于应用层的信息分组称为报文(message)
运输层
因特网的运输层在应用程序断点之间传送应用程序报文,在这一层主要有两种传输协议TCP和UDP 。利用这两者中的任何一个都能够传输报文,不过这两种协议有巨大的不同。
TCP向它的应用程序提供了面向连接的服务, 它能够控制并确认报文是否到达,并提供了拥塞机制来椌制网络传输,因此当网络拥塞时, 会抑制其传输速率。
UDP 协议向它的应用程序提供了无连接服务它不具备可靠性的特征,没有流量控制, 也沒有拥塞控制。我们把运输层的分组称为报文段(segment)
网络层
因特网的网络层负责将称为数据报(datagram) 的网络分层从一台主机移动到另一台主机。 网络层一个非常重要的协议是IP协议,所有具有网络层的因特网组件都必须运行IP 协议, IP 协议是一种网际协议,除了IP协议外, 网络层还包括一些其他网际协议和路由选择协议, 一般把网络层就称为IP层,由此可知IP协议的重要性。
链路层
现在我们有应用程序通信的协议,有了给应用程序提供运输的协议,还有了用于约定发送位置的IP协议,那么如何才能真正的发送数据呢?为了将分组从一个节点(主机或路由器)运输到另一个节点, 网络层必须依靠链路层提供服务。链路层的例子包括以太网、WiFi和电缆接入的 DOCSIS协议, 因为数据从源目的地传送通常需要经过几条街路, 一个数据包可能被沿途不同的链路层协议处理,我们把链路层的分组称为帧(frame)。
物理层
虽然链路层的作用是将帧从一个端系统运输到另一个端系统,而物理层的作用是将帧中的一个个比特从一个节点运输到另一个节点,物理层的协议仍然使用链路层协议,这些协议与实际的物理传输介质有关,例如,以太网有很多物理层协议:关于双绞铜线、关于同轴电缆、关于光纤等等。
五层网络协议的示意图如下:
OSI 模型
我们上面讨论的计算网络协议模型不是唯一的协议栈,ISO(国际标准化组织)提出来计算机网络应该按照 7层来组织,那么7层网络协议栈与5层的区別在哪里?
OSI 要比上面的网络模型多了表示层和会话层, 其他层基本一致。表示层主要包括数据压缩和数椐加密以及数据描述,数据描述使得应用程序不必担心计算机内部存储格式的问题, 而会话层提供了数据交换的定界和同步功能, 包括建立检查点和恢复方案。
浏览器
浏览器是使用 HTTP 协议的主要载体,说到浏览器, 你能想起来几种?是的,随着网景大战结束后, 浏览器迅速发展,至今已经出现过的浏览器主要有:
浏览器正式的名宇叫做 Web Broser,顾名思义, 就是检索、查看互联网上网页资源的应用程序,名字里的 Web,实际上指的就是 World Wide Web, 也就是万维网。
我们在地址栏输入URL(即网址),浏览器会向 DNS提供网址,由它来完成 URL 到IP 地址的映射。
然后将你的请求提交给具体的服务器, 再由服务器返回我们要的结果(以HTML编码格式返回给浏览器) 浏览器执行HTML編码,将结果显示在浏览器的正文这就是一个浏览器发起请求和接受响应的过程。
Web 服务器
Web 服务器的正式名称叫做 Web Server Web服务器一般指的是网站服务器,上面说到浏览器是 HTTP 请求的发起方,那么Web 服务器就是 HTTP 请求的应答方, Web 服务器可以向浏览器等Web客户端提供文档, 也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世界下载。
目前最主流的三个Web服务器是Apache、 Nginx 、IIIS
CDN
CDN的全称是Content Delivery Network, 即内容分发网络,它应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求。
CDN 是构建在现有网络基础之上的网络, 它依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块, 使用户就近获取所需内容,降低网络拥塞, 提高用户访问响应速度和命中率。
CDN的关键技术主要有内容存储和分发技术。
WAF
WAF 是一种 Web应用程序防护系统(Web Application Firewall, 简称WAF) 它是一种通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品, 它是应用层面的防火墙,专门检测HTTP 流量, 是防护 Web 应用的安全技术。
WAF 通常位于 Web服务器之前,可以阻止如 SQL注入、跨站脚本等攻击,目前应用较多的一个开源项目是 ModSecurity,它能够完全集成进 Apache 或 Nginx。
WebService
WebService 是一种 Web 应用程序,WebService 是一种跨编程语言和跨操作系统平台的近程调用技术 Web Service 是一种由W3C定义的应用服务开发规范使用 client-server 主从架构,通常使用 WSDL 定义服务接口,使用 HTTP协议传输XML 或SOAP 消息,它是一个基于Web (HTTP) 的服务架构技木,既可以运行在内网, 也可以在适当保护后运行在外网
HTML
HTML 称为超文本标记语言,是一种标识性的语言它包括一系列标签。通过这些标签可以将网络上的文档格式统一,使分散的 Internet 资源连接为一个逻辑整体。HTML文本是由 HTML 命令组成的描述性文本,HTML命令可以说明文字, 图形、动画、声音、表格、链接等。
Web 页面构成
Web 页面(Webpage) 也叫做文档,是由一个个对象组成的。一个对象(Objecy)只是一个文件,比如一个HTML 文件、一个 IPEG图形、 一个java小程序或一个视频片段,它们在网络中可以通过URL 地址寻址。多数的Web 页面含有一个HTML 基本文件,以及几个引用对象举个例子,如果一个Web 页面包含HTML 文件和 5个JPEG 图形,那么这个Web页面就有6个对象:一个HTML 文件和5个IPEG 图形。HTML 基本文件通过 URL地址引用页面中的其他对象。
TCP/IP
TCP 协议的全称是 Transmission Control Protocol 的缩写,意思是传输控制协议,HTTP 使用 TCP 作为通信协议,这是因为TCP 是一种可靠的协议, 而可靠能保证数据不丢失。 IP 协议的全称是 Internet Protocol 的缩写, 它主要解决的是通信双方寻址的问题。IP协议使用 IP地址来标识互联网上的每一台计算机, 可以把IP 地址想象成为你手机的电话号码, 你要与他人通话必须先要知道他人的手机号码, 计算机网络中信息交换必须先要知道对方的IP 地址。
DNS
计算机网络中的每个端系统都有一个IP地址存在, 而把IP 地址转换为便于人类记忆的协议就是 DNS协议 DNS 的全称是域名系统 (Domain Name System, 缩写:DNS),它作为将域名和IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
URI / URL
URI的全称是(Uniform Resource ldentifier) 中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源。
URL的全称是(Uniform Resource Lacator) 中文名称是统一资源定位符,也就是我们俗称的网址它实际上是URI 的一个子集。
URI不仅包括URL,还包括 URN(统一资源名称) 它们之间的关系如下
HTTPS
HTTP一般是明文传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS应运而生。HTTPS的全称为 (Hyper Text Transfer Protocol over SecureSocket Layer),HTTPS 和HTTP有很大的不同在于 HTTPS 是以安全为目标的 HTTP通道, 在HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP的基础上增加了 SSL层,也就是说 HTTPS = HTTP + SSL
https 协议的工作原理
客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤。
1. 客户使用 https url 访问服务器,则要求 web 服务器建立 SSL 链接。
2. web服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),返回或者说传输给客户端。
3. 客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。
4. 客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
5. web 服务器通过自己的私钥解密出会话密钥。
6. web 服务器通过会话密钥加密与客户端之间的通信。
如图:
http 和https 的区别?
http 传输的数据都是未加密的,也就是明文的,网景公司设置了 SSL 协议来对 http 协议传输的数据进行加密处理,简单来说https 协议是由 http 和ss1 协议构建的可进行加密传输和身份认证的网络协议,比 http 协议的安全性更高。
主要的区别如下:
1. Https 协议需要 ca 证书,费用较高。
2. http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
3. 使用不同的链接方式,端口也不同,一般而言,http 协议的端口为 80, https 的端口为 443
4. http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比http 协议安全。
https 协议的优点
1. 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
2. HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
3. HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
4. 谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等 HTTP 网站,采用 HTTPS 加密的网站在搜索结果中的排名将会更高”。
https 协议的缺点:
https 握手阶段比较费时,会使页面加载时间延长 50%,增加10%~20%的耗电。
https 缓存不如 http 高效,会增加数据开销。
SSL 证书也需要钱,功能越强大的证书费用越高。
SSL 证书需要绑定IP,不能再同一个 ip 上绑定多个域名,IPv4 资源支持不了这种消耗。