一、HTTP协议
1、概述
超文本传输协议,HTTP(HyperText Transfer Protocol)是一个应用层协议,它使用TCP连接进行可靠的传送。
使用HTTP的URL:
http://<主机>:<端口>/<路径>
HTTP的默认端口号是80,通常可以省略,若再省略文件的<路径>项,则URL就指到互联网的某个主页(home page):
- 一个WWW服务器的最高级别页面
- 某组织、部门定制的页面、目录。
- 由某人自己设计的描述本人情况的WWW页面。
2、操作过程
HTTP协议定义了浏览器(万维网客户进程)如何向万维网服务器请求万维网文档、服务器怎样把文档转送给浏览器。
从层次上看,HTTP是 面向事物的(transaction - oriented) 应用层协议,它能够可靠的交换文件(文本、超文本、图像、音频等)
万维网的工作流程大致如下:
- 每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有客户发送建立连接的请求。
- 一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。
- 最后,TCP连接被释放。
请求、响应所遵守的格式、规则就是超文本传送协议 HTTP。HTTP规定客户、服务器之间的每次交互,都由一个 ASCII 码串构成的请求 和 一个类 “MIME” 的响应组成,通常使用TCP建立连接传送。
HTTP协议是无状态的 (stateless),即同一个客户第二次访问页面与第一次访问相同。服务器不记得客户,该特性简化了设计,更容易支持大量并发的 HTTP 请求。
3、报文结构
HTTP有两类报文: (1)请求报文——从客户向服务器发送请求报文:
(2)响应报文——从服务器到客户的回答:
HTTP 面向文本(text-oriented),因此在报文中的每个字段都是一些 ASCII码 串,因而各个字段的长度不确定。
两种报文均由以下三个部分组成,但其具体不同就是开始行不同:
- (1)开始行,由于区分是请求报文还是响应报文。请求报文的开始行称为请求行(Requst-Line),响应斑纹开始行称为状态行(Status-Line)。在开始行的三个字段之间都以空格分隔开,最后的 “CR”、“LF” 分别代表 “回车”、“换行” 。
- (2)首部行,用以说明浏览器、服务器、报文主体的一些信息。首部可以没有或有很多行,内含首部字段名、字段值。
- (3)实体主体(entity body),在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
请求报文的请求行有三个内容:方法、请求资源URL、HTTP版本。 常用方法(操作):
方法(操作) | 意义 |
---|
OPTION | 请求一些选项信息 | HEAD | 请求读取由URL所表示的信息首部 | GET | 请求读取由URL所表示的信息 | POST | 给服务器添加 / 修改信息 | PUT | 在指明的URL下存储文档 | DELETE | 删除知名的URL所标识的资源 | TRACE | 用来进行环回测试的请求报文 | CONNECT | 用来代理服务器 |
在开发过程中,以PUT(增)、DELETE(删)、POST(改)、GET(查)为核心的开发方式,称为 RESTful 设计风格(开发方式),其中 PUT、DELETE、GET 操作是幂等的、POST 操作是非幂等的。
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
下面是一个完整的HTTP请求报文的例子(一般请求报文最后还有一个空行): 如果使用相对URL,情况如下:
GET http://www.abc.com/dir/index.html HTTP/1.1 报文简略: GET dir/index.html HTTP/1.1 ?#使用相对URL Host : www.abc.com?????#主机域名 Connection : close??????#告诉服务器发送完请求文档就可以释放连接 User-Agent : Mozilla/5.0???#表明用户使用火狐浏览器 Accept-Language : cn????#表明用户希望优先得到中文文档 ??????????????#一般请求报文最后还有一个空行
HTTP响应报文格式包括:HTTP版本、状态码、解释状态码的短语: 状态码(Status-Code): 都是三位数字的,分为5大类(以不同的数字开头),原先有33种,后来增加了几种:
- 1xx:通知信息(请求收到、正在处理)
- 2xx:表示成功(接收 / 接受)
- 3xx:重定向(请求还须采取进一步行动)
- 4xx:客户的差错(请求中语法不正确 / 由资源不存在致使不能完成)
- 5xx:服务器的差错(服务器失效无法完成请求)
常见状态码:
- 200 (成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
- 202 (已接受) 服务器已接受请求,但尚未处理。
- 400 (错误请求) 服务器不理解请求的语法。
- 404 (未找到) 服务器找不到请求的网页。
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
- 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)
响应报文简略: HTTP 301 Moved Permanently ???????#永久性地转移 Location : http://www.abc.com/ee/index.html??#新的URL
4、服务器上存放用户临时信息
服务器上存放用户的临时信息,可以在 HTTP 中 使用Cookie。
Cookie的工作方式:
- 用户A 浏览某个使用 Cookie 的网站时,该网站的服务器就为A产生一个唯一的 识别码,以此作为索引在服务器后台产生一行数据。
- 在给 A 的 HTTP响应报文 中添加一个叫做 Set-cookie 的首部行,这里 “首部字段名” 为 “Set-cookie”,“首部字段名” 为 “识别码”。
Set-cookie : 31d4d96e407aad42
- 当 A 收到该请求,就在管理的特定 Cookie 文件中添加一行,其中包括 Set-cookie 及其后面的识别码。
- 当 A 继续浏览这个网站时,每发送一个 HTTP 请求报文,浏览器都会从 Cookie 文件中取出这个识别码并发送给服务器。
Cookie : 31d4d96e407aad42
- 服务器能够跟踪 用户A(用户 31d4d96e407aad42) 在该网站的活动。
二、HTTPS协议
1、概述
?HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。 ?HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 ?HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
SSL (Secure Sockets Layer 安全套接字协议):
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
其继任者为传输层安全(Transport Layer Security,TLS)。
使用HTTPS的URL:
https://<主机>:<端口>/<路径>
2、设计目标
- (1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么。
- (2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收。
- (3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 。
3、HTTPS与HTTP原理区别
HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
1 > HTTP 原理
① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容 。
② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
2 > HTTPS 原理
① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;
② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器;
④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法);
⑤ 客户端将所有握手消息的 MAC 值发送给服务器;
⑥ 服务器将所有握手消息的 MAC 值发送给客户端。
4、优缺点
1 > 优点
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
2 > 缺点
- 相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗。
- HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
- SSL 证书的信用链体系并不安全。在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
- 成本增加。部署 HTTPS 后,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度。
|