文章目录
与HTTP协作的web服务器用单台虚拟主机实现多个域名通信数据转发程序:代理、网关、隧道代理网关隧道
保存资源的缓存缓存的有效期限客户端的缓存
HTTP首部HTTP报文首部HTTP首部字段HTTP首部字段传递重要信息HTTP首部字段结构HTTP首部字段类型
HTTP通用首部字段Cache-ControlConnectionDataPragmaTrailerTransfer-EncodingUpgradeviaWarning
请求首部字段AuthorizationExpectIf-xxxIf-MatchIf-Modified-SinceIf-RangeMax-ForwardsRefererUser-AgentHostcookieX-Forworded-For
响应首部字段Accept-RangesETagVaryWWW.Authenticateserver
实体首部字段Content-EncodingContent-MD5Content-Range
为cookie服务的首部字段Set-Cookie
其他首部字段X-Frame-OptionsX-XSS-ProtectionDNTP3P(在线隐私偏好平台)
确保web安全的HTTPSHTTP的缺点通信使用明文(不加密),可能会被窃听不验证对方的身份就可能遭遇伪装无法证明报文完整性,可能被纂改。
HTTP+加密+认证+完整性保护=HTTPSHTTPSHTTPS是身披SSL外壳的HTTP相互交换密钥的公开密钥加密技术证明公开密钥正确性的证书HTTP的安全通信机制SSL和TLS
与HTTP协作的web服务器
用单台虚拟主机实现多个域名
虚拟主机:允许一台服务器HTTP服务器搭建多个web站点。在相同IP地址下,在发送HTTP请求时,必须在host首部内完整指定URI。
通信数据转发程序:代理、网关、隧道
这些应用程序可以将请求转发给通信线路上的下一站服务器,并且能接受从那台服务器发送的响应再转发给客户端。
代理
有转发功能的应用程序,位于服务端和客户端之间。代理不改变URI,会将接受到的请求发送给前方持有资源的目标服务器。via首部字段标记经过的主机信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/10b75b80b46142fdac2125d4706d369c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
代理包括缓存代理和透明代理。缓存代理:代理转发响应时,会预先将资源的副本缓存到代理服务器上,当再次接收到相同资源的请求时,将之前缓存的资源作为响应返回。透明代理:不对报文做任何加工的代理类型;反正,对报文进行加工的代理称为非透明代理。使用代理服务器的理由:利用缓存技术减少网络带宽的流量、组织内部针对特定网站的访问控制,以获取访问日志为主要目的。
网关
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c2a7b40c40940d0b5b6aca5d9535b52.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
为通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,在客户端与网关之间的通信线路上加密。
隧道
![在这里插入图片描述](https://img-blog.csdnimg.cn/c7d50b8e6d6641ad8574a0b3814dd726.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
要求建立起一条与其他服务器的通信线路,并使用SSL等加密手段进行通信。隧道的目的是确保客户端与服务端进行安全通信。隧道不会解析HTTP请求,则原样中转,会在通信双方断开连接时结束。
保存资源的缓存
类似于上方的缓存代理,缓存服务器是代理服务器的一种。 缓存服务器可以避免多次从服务器转发资源。
缓存的有效期限
若源服务器资源更新,则缓存服务器会项源服务器确认资源的有效性。若判断缓存失效,则缓存服务器会再次从源服务器上获取新资源。
客户端的缓存
缓存不仅在缓存服务器中,也可以在客户端浏览器中。客户端缓存称为临时网络文件。缓存有效,则直接从本次磁盘读取。在有效期限上与缓存服务器性质相同。
HTTP首部
HTTP报文首部
![在这里插入图片描述](https://img-blog.csdnimg.cn/05f98d23a3bf4d34a118a1d810c378e9.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/706d6fe5a4fd473ab1e12d7bf2a32177.png#pic_center)
HTTP首部字段
HTTP首部字段传递重要信息
首部字段给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容
HTTP首部字段结构
首部字段名:字段值
例如
content-type:text/html
单个字段名可对应多个字段值若字段重复,不同浏览器处理放肆不同。
HTTP首部字段类型
通用首部字段
请求报文和响应报文均会使用的首部字段 2. 请求首部字段![在这里插入图片描述](https://img-blog.csdnimg.cn/4a464e58da4645b9ab60142cbaf24c55.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
响应首部字段 实体首部字段
请求报文和响应报文均使用的首部字段。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b3533298802d49f683e19c6e136e0568.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
HTTP通用首部字段
Cache-Control
Cache-Control:private,max-age=0,no-cache
指令参数多选,且用逗号分隔。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/4ebd1729e9aa4b45bdf22b40ac3bdcac.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Cache-Control:public
Cache-Control:private
![在这里插入图片描述](https://img-blog.csdnimg.cn/382e149c1f68492e87f259b4ed735b1a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Cache-Control:no cache //防止返回过期的资源
![在这里插入图片描述](https://img-blog.csdnimg.cn/cf746b99520b4f4e9280e1139f4c117a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Cache-Control:no-store //暗示请求或响应中包含机密信息
Cache-Control:max-age=64088
![在这里插入图片描述](https://img-blog.csdnimg.cn/cc65af73a82944639699934a99687c67.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Cache-Control:s-maxage=604800
与max-age指令相同,区别在于s-maxage只适用于供多用户使用的公共缓存服务器。 当使用这个指令时则直接忽略max-age指令的处理。
Cache-Control:min-fresh=60 //过了60秒的资源无法作为响应返回
指令要求缓存服务器返回至少还未过指定时间的缓存资源。
Connection
Connection:close
HTTP默认连接为持久连接,该指令表示服务端想明确断开连接。
Connection:不再转发的首部字段名
表示可控制不在转发给代理的首部字段
Data
表明创建HTTP报文的日期和时间
Pragma
发送时同时含有下面两个首部字段
Cache-Control:no-cache
Pragma:no-cache
![在这里插入图片描述](https://img-blog.csdnimg.cn/efb4ce957fbc4475bf3107bbb1e43059.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Trailer
事先说明在报文主体后记录了那些首部字段,可应用在分块传输编码。![在这里插入图片描述](https://img-blog.csdnimg.cn/09780378fe7040a098311f6b43482807.png#pic_center)
Transfer-Encoding
规定传输报文主体时采用的编码方式,仅对分块传输编码有效。
Upgrade
用于检测HTTP协议及其他协议是否可使用更高的版本进行通信。![在这里插入图片描述](https://img-blog.csdnimg.cn/dd5dabc1ec4643ca8f4169bd0e7b3db2.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
via
使用var是为了追踪客户端与服务器之间的请求和响应报文的传输路径每经过一层代理附加该首部字段信息。
Warning
HTTP警告码 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1054d098374365a2bf1a9f9ac06e13.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
请求首部字段
![在这里插入图片描述](https://img-blog.csdnimg.cn/00a4c958c0ce4e2cb404c35c3989d61d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Authorization
![在这里插入图片描述](https://img-blog.csdnimg.cn/faf4531bef06479aab89c3604886ca23.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Expect
Expect:100-continue //等待状态码100响应
If-xxx
附带条件的请求。服务器收到附带条件的请求,只有判断指定条件为真时,才会执行请求。
If-Match
![在这里插入图片描述](https://img-blog.csdnimg.cn/a21161e16c6b4e76ae5b2daf82573956.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
If-Modified-Since
![在这里插入图片描述](https://img-blog.csdnimg.cn/fec008cd115b415985982304b96d4885.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
If-Range
![在这里插入图片描述](https://img-blog.csdnimg.cn/544a76598faf428994310335c23f1351.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/65f0af8cc6e44209b652e2f5d519b072.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Max-Forwards
与TRACE方法类似 ![在这里插入图片描述](https://img-blog.csdnimg.cn/843e0e3914d54f269a3e07aac15ab79f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Referer
告知服务器请求的原始资源的URI,知道请求的URI从哪个web页面发起,即当前访问URL的上一个URL。
User-Agent
将创建请求的浏览器和用户代理名称等信息传达给服务器。
Host
被请求资源的主机和端口号
Host:www.xxxx.com:801
cookie
表示请求者身份
X-Forworded-For
代表请求端的IP,可多个使用逗号隔开。
响应首部字段
Accept-Ranges
Accept-Ranges:bytes
Accept-Ranges:none
ETag
强ETag不论多么细微的变化都会改变其值,但弱ETag只用于提示资源是否相同。
Vary
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a30f5e0f5f04f1a87afce2698cc8ccd.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
WWW.Authenticate
用于HTTP访问认证,告知客户端适用于访问请求URI所指定资源的认证方案。
server
实体首部字段
用于补充内容的更新时间等与实体相关的信息。
Content-Encoding
告知服务器端对实体的主体部分选用的内容编码方式 主要内容编码方式有以下四种
gzip compress deflate identify
Content-MD5
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ad930d2ef564aae8f04a074f3a7da85.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
Content-Range
Content-Range:bytes 5001-10000
为cookie服务的首部字段
cookie指某些网站为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据,而这些数据通常会进行加密处理
![在这里插入图片描述](https://img-blog.csdnimg.cn/3afa2b4ebf2e4dcaac9aec162240ae13.png#pic_center)
Set-Cookie
![在这里插入图片描述](https://img-blog.csdnimg.cn/86afabf74062469f9359af35fc2be775.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
cookie可通过用新的cookie来覆盖过期的cookie,即可实现对客户端cookie的实质性删除操作。path属性安全机制效果较差不指定domain属性更安全HttpOnly属性可以避免xss利用javascript劫持cookie
其他首部字段
X-Frame-Options
属于HTTP响应首部,用于控制网站内容在其他web网站的Frame标签内的显示问题,主要目的是防止点击劫持的攻击。
X-Frame-Options:DENY //拒绝
X-Frame-Options:SAMEORIGIN
X-XSS-Protection
属于HTTP响应首部,针对xss的一种对策,用于控制浏览器xss防护机制的开关需要服务器对DNT作对应的支持
X-XSS-Protection:0 //xss过滤设置为无效状态
X-XSS-Protection:1 //xss过滤设置为有效状态
DNT
属于HTTP请求首部,do not track
DNT:0 同意被追踪
DNT:1 拒绝被追踪
P3P(在线隐私偏好平台)
属于HTTP响应首部可以让个人隐私变为一种仅供程序可理解的形式,以达到保护用户的隐私
确保web安全的HTTPS
HTTP的缺点
通信使用明文(不加密),可能会被窃听
HTTP本身不具有加密的功能,无法对请求和响应的内容进行加密。为防止窃听,加密对象有通信的加密和内容的加密。通信的加密:HTTP协议与SSL或TLS组合使用,用SSL建立安全通信线路后,其中与SSL组合使用的HTTP被称为HTTPS或者HTTP over SSL。内容的加密:对HTTP协议传输的内容本身加密,即把HTTP报文进行进行先加密再发送。内容加密的前提是要求客户端和服务器同时具备加密和解密机制。
不验证对方的身份就可能遭遇伪装
HTTP协议不会确认通信方,不管是谁发过来的请求都会返回响应。无法阻止DoS攻击,无法确认正在通信的对方是否具备访问权限等等。SSL不仅提供加密处理,还提供一种证书的手段,来确认通信方。 证书由值得信赖的第三方机构颁发。
无法证明报文完整性,可能被纂改。
所谓完整性即信息的准确度。接受的内容可能有误,无法判断。像这样,请求或响应在传输途中遭攻击者拦截并纂改内容的攻击称为中间人攻击。常用MD5和SHA-1等散列值校验以及确认文件的数字签名方法来防止纂改内容。
HTTP+加密+认证+完整性保护=HTTPS
HTTPS
访问HTTPS通信有效的web网站时,浏览器的地址栏内会出现一个带锁的标记,对HTTPS的显示方式会因浏览器的不同而有所改变。
HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议来代替。 其他应用层上的协议均可配合SSL协议来使用。SSL是当今世界上最为广泛的网络安全技术。
相互交换密钥的公开密钥加密技术
SSL采用公开密钥加密的加密处理方式。近代加密方法中加密算法是公开的,而密钥却是保密的。加密和解密均会用到密钥,即只要持有密钥就能解密。加密和解密同用一个密钥的方式称为共享密钥加密,也叫对称密钥加密。密钥发送问题:公开密钥加密。即使一组非对称密钥,一把私有密钥,一把公开密钥。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,使用自己的私有密钥进行解密。HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段使用共享密钥加密方式。公开密钥加密的处理速度比共享密钥加密较慢。
证明公开密钥正确性的证书
为了证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥,可以使用有数字证书认证机构和其相关机关颁发的公开密钥证书。数字认证机构颁发公钥证书的流程: EV SSL证书可证明通信一方的服务器其是否规范,也可确认对方服务器背后运营的企业是否真实存在。拥有EV SSL证书的web网站的浏览器地址栏出的背景色是绿色,而且在地址栏的右侧显示了SSL证书中记录的组织名称以及颁发证书的认证机构的名称。EV SSL证书可防止用户被钓鱼攻击。HTTP中还使用客户端证书,来证明服务器正在通信的对方是预料之内的客户端,作用跟服务器证书相同,但客户端证书只能证明客户端存在,不能证明用户本人的有效性。独立构建的认证机构——自认证机构颁发的自签名证书是无用的,当浏览器访问该服务器时,会显示无法确认连接安全性或该网站的安全证书存在问题。大多数浏览器会预先植入备受信赖的认证机构的证书,但有的浏览器会植入中级认证机构的证书,有的浏览器当作正规证书,有的浏览器当作自签名证书。
HTTP的安全通信机制
HTTP的通信步骤
![在这里插入图片描述](https://img-blog.csdnimg.cn/ac93a028293c4d569ac7ed7703b25f95.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
客户端发送Client Hello报文开始进行SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法以及密钥长度)。服务端可进行SSL通信时,会以Server Hello报文作为应答。报文中包含的内容与客户端的的类别相同。服务器的加密组件内容时从接收到的客户端加密组件内筛选出来的。服务器发送Certificate报文,报文中包含公开密钥证书。服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。SSL第一次握手结束后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种Pre-master secret的随机密码串,该报文已被步骤3中的公开密钥加密,接着客户端发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商能否成功以服务器能否正确解密该报文作为判定标准。服务器发送同样Change Cipher Spec报文。服务器同样发送Finished报文。服务器和客户端Finished报文交换完毕之后,SSL连接就算建立完成,通信也会受到SSL的保护,从此开始进行应用层协议的通信,即发送HTTP响应。应用层协议通信,即发送HTTP响应。最后有客户端端来连接,断开连接时,发送close_notify报文最后发送TCN FIN报文来管不与TCP的通信 (这步上图中作了省略)
第十一步中应用层发送数据时会附加一种叫做MAC的报文摘要,MAC能查知报文是否遭到纂改,从而保护报文的完整性。
SSL和TLS
HTTPS使用SSL和TLS这两个协议。![在这里插入图片描述](https://img-blog.csdnimg.cn/d1881d030903423083c65be172bb12eb.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1ODU0Njc5,size_16,color_FFFFFF,t_70#pic_center)
为什么不一直使用HTTPS通信? 因为与纯文本通信相比,加密不严谨速度慢,而且消耗资源较多,能够处理的请求数量较少,且还需要向认证机构狗奶证书。因此,如果是非敏感信息使用HTTP通信。而HTTPS加密只是对一部分敏感信息加密来节约资源。
|