一、Http和Https的基本概念
Http:超文本传输协议(Http,HyperText Transfer Protocol):是一种基于请求与响应模式的、无状态的、应用层协议,设计Http最初的目的是为了提供一种发布和接收HTML页面的方法。它可以使浏览器更加高效。Http协议是以明文方式发送信息的,如果黑客截取了Web浏览器和服务器之间的传输报文,就可以直接获得其中的信息。
Https:是以安全为目标的Http通道,是Http的安全版。Https的安全基础是SSL。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
二、Http协议的请求报文和响应报文由什么组成?
请求报文包括三部分:
(1).请求行:包含请求方法,URI,HTTP版本协议
(2).请求首部字段
(3).请求内容实体
响应报文包含三部分:
(1).状态行:包含HTTP版本,状态码,状态码原因短语
(2).响应首部字段
(3).响应内容实体
常见HTTP首部字段
(1)、通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式
(2)、请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言
(3)、响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:用来告知客户端,服务器是否能处理范围请求
Location:令客户端重新定向到的URI
Server:HTTP服务器应用程序的信息
(4)、实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的HTTP方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的内容编码方式(内容编码是指在不丢失实体信息的前提下所进行的压缩)
Content-Language:实体主体的自然语言(指中文或者英文等语言)
Content-Length:实体主体的的字节数(若对实体主体进行内容编码传输时,不能再使用content-length首部字段)
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
Last-Modified:指明资源最后一次修改的时间
Expires:会将资源失效的日期告知客户端
Content-Location:报文主体返回资源对应的URI
Content-MD5:是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达
三、常见的http状态码
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。
| 类别 | 原因短语 |
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 接收正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
200:请求被正常处理
204:请求已成功处理,但没有资源可以返回
206:客户端对资源的某一部分请求,服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
301:永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
302:临时重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上。
304:发送附带条件的请求时,条件不满足时返回,与重定向无关。
307:临时重定向,与302类似,只是强制要求使用POST方法。
400:请求报文语法有误,服务器无法识别。
401:请求需要认证。
403:请求的对应资源,被服务器拒绝了,(可能时无访问权限,或者访问权限出错之类的)
404:服务器无法找到对应资源
500:服务器处理请求时发生了错误,可能时web应用存在bug或临时某些故障。
503:服务器正忙或者正在停机维护,现在无法处理请求
四、常见的http的请求方法有哪些?
GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
OPTIONS:查询响应URI支持的HTTP方法
五、GET方法与POST方法的区别
(1)、get重点在从服务器上获取资源,post重点在向服务器发送数据;
(2)、get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;
post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
(3)、Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;
(4)、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
post较get安全性较高;
(5)、get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
post支持标准字符集,可以正确传递中文字符。
六、http和https的区别
(1)、连接方式不一样,http协议通过tcp三次握手成功之后,传输信息,https是先建立ssl连接,端口号也不一样,http的端口号是80,https的端口号是443。
(2)、http是超文本传输协议,信息是明文传输,内容可能会被窃听,也可能会被抓被分析;http不验证通信双方身份,可能会遭到伪装;无法验证报文的完整性,可能会被篡改。(http的缺点)
(3)、Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性;使用Https协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;Https是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。(https的优点)
(4)、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
七、Https的缺点(对比优点)
1、Https协议握手阶段比较费时,会使页面的加载时间延长近。
2、Https连接缓存不如Http高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响;
3、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
4、Https协议的加密范围也比较有限。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
八、https的通信步骤
步骤一:客户端向服务器端发送请求报文,报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度等)。
步骤二:服务器可进行ssl通信时,会发送响应报文,报文中包含ssl版本以及加密组件。服务器的加密组件内容是收到的客户端的加密组件筛选出来的。
步骤三:之后服务器发送certificate报文。报文中包含公开密钥证书
步骤四:最后服务器发送会再向客户端发送一个响应报文,通知客户端,最初阶段的ssl握手协商部分结束。
步骤五:ssl第一次握手结束之后,客户端向服务器发送报文作为回应,报文中包含通信加密使用的一种被称为per-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
步骤6:接着客户端继续发送ChangeCipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤8:服务器同样发送Change Ci -pher Spec报文。
步骤9:服务器同样发送Finished报文。
步骤10:服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
步骤11:应用层协议通信,即发送HTTP响应。
九、HTTP1.1版本新特性
a、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求,好处是减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,另外,减少开销的时间使HTTP请求和响应能够更早地结束,这样web页面的显示速度也就相应提高了。
b、管线化,客户端可以发出HTTP请求之后,不用等待服务器响应,再接着发送下一个请求
c、断点续传,例:客户端下载文件过程中,网络中断,客户端记录下当前的下载进度,有网络之后,客户端可以向服务器端请求续传,向服务器发送带有当前下载进度的请求报文,
十、什么是无状态协议?怎么解决Http协议无状态协议?
(1)、无状态协议对于事务处理没有记忆能力。也就是说,无法根据之前的状态进行本次的请求处理。例如:要求登陆认证的web页面本身无法进行状态管理,那么每次跳转新页面都要再次登陆
(2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。