写在前面:这个是对《图解HTTP》一书梳理的一个大概的知识点,第一次用markdown写,感觉格式怪怪的,图片表格的大小不知道怎么调
一、HTTP协议基础
1、URI(Uniform Resource Identifier)——统一资源标识符,由某个协议方案表示的资源的定位定位标识符,协议方案指访问资源所使用的协议类型名称。URI用字符串标识某一互联网资源,而URL表示资源的地点,URL是URI的子集。URI格式如下:
2、HTTP协议通过请求和响应的交换达成通信。HTTP是一种无状态协议,协议自身不对请求与和响应之间的通信状态进行保存。为了实现保持状态功能,引入了Cookie技术
3、HTTP/1.0和HTTP/1.1支持的方法
4、为节省通信量,HTTP采用持久连接,即不是每次请求HTTP资源都要建立和拆除TCP连接,而是在建立TCP连接后,只要没有任意一方明确提出断开连接,则保持TCP连接状态,并通过管线化(连续发送请求,不用等待对方响应)使得并行发送多个请求成为可能。
5、HTTP请求报文及响应报文的结构及实例
6、报文与实体
报文:HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输
实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成
HTTP报文的主体用于传输请求或响应的实体主体
7、提升传输速率
(1)压缩传输的内容编码,常用的编码:
- gzip(GNU zip)
- compress(UNIX系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
(2)分割发送的分块传输编码
8、请求内容
(1)获取部分内容的范围请求:首部中Range字段可以指定资源的byte范围
Range:bytes=-3000, 5001-10000 //开始到3000字节,5000~10000字节
(2)内容协商机制:客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断基准。内容协商技术有以下3种类型:
- 服务器驱动协商(Server-driven Negotiation)由服务端进行内容协商,以请求的首部字段为参考,在服务器端自动处理。
- 客户端驱动协商(Agent-driven Negotiation)由客户端进行内容协商,用户从浏览器显示的可选列表中手动选择。
- 透明协商(Transparent Negotiation)服务器驱动和客户驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。
二、返回结构的状态码
常用的14种状态码:
状态码 | 描述 |
---|---|
200 OK | 从客户端发来的请求在服务器端被正常处理 |
204 No Content | 请求被正确处理,但返回响应报文不包含实体主体 |
206 Partial Content | 客户端进行了范围请求,而服务器成功执行了请求 |
301 Moved Permanently | 永久性重定向,请求的资源已被分配了新的URI,以后应使用资源现在所指的URI |
302 Found | 临时性重定向,请求的资源已被分配了新的URI,本次使用资源新的URI |
303 See Other | 由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源 |
304 Not Modified | 客户端发动附带条件的请求时,服务器允许请求访问资源,但未满足条件 |
307 Temporary Redirect | 临时性重定向,与302 Found有相同含义,尽管302标准禁止POST变成GET,但实际使用时大家并不遵循,307会遵照浏览器标准,不会从POST变成GET |
400 Bad Request | 请求报文中存在语法错误 |
401 Unauthorized | 发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息,若进行过1次请求,则表明用户认证失败 |
403 Forbidden | 请求资源的访问被服务器拒绝 |
404 Not Found | 服务器上无法找到请求的资源 |
500 Internal Server Error | 服务器本身发生错误 |
503 Service Unavailable | 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 |
三、与HTTP协作的Web服务器——通信数据转发程序
1、代理——一种有转发功能的应用程序,接受由客户端发送的请求并转发给服务器,同时接受服务器返回的响应并转发给客户端。代理不改变请求URI,会直接发送给前方持有资源的目标服务器。转发时,需要附加Via首部字段以标记出经过的主机信息
使用代理的理由:利用缓存技术减少网络带宽流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的等。
(1)缓存代理——代理转发响应是,缓存代理会预先将资源的副本保存在代理服务器上,等到再次收到对相同资源的请求时,就可以不从源服务器那里获取资源,而将之前缓存的资源作为响应返回。
(2)透明代理——不对报文做任何加工的代理
2、网关——转发其他服务器数据的服务器,接受从客户端发来的请求时,就像自己拥有资源的源服务器一样对请求进行处理。网关能使通信线路上的服务器提供非HTTP服务。利用网关能提供通信安全性因为可以在客户端和网关之间的通信线路上加密以确保连接安全。
3、隧道——在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。可按要求建立一条与其他服务器的通信线路并使用SSL等加密手段进行通信,隧道的目的是确保客户端能与服务器进行安全通信。
四、HTTP首部字段
1、HTTP/1.1规范定义了如下47种首部字段
2、非HTTP/1.1首部字段
除了HTTP/1.1定义的47中首部字段,还有Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段,这些非正式的首部字段统一归纳在RFC4229 HTTP Header Field Registrations中。
(1)Cookie
- Set-Cookie:响应首部字段,开始状态管理所使用的Cookie信息
- Cookie:请求首部字段,服务器接收到的Cookie信息
(2)其他首部字段
- X-Frame-Options:响应首部字段,用于控制网站内容在其他Web网站的Frame标签内的显示问题,主要目的是为了防止点击劫持攻击
- X-XSS-Protection:响应首部字段,是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关
- DNT:请求首部字段,其中DNT是Do Not Track,意为拒绝个人信息被收集,表示拒绝被精准广告追踪的一种方法
- P3P:响应首部字段,通过利用P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让Web网站上的个人隐私变成一种仅供程序可理解的形式,已达到保护用户隐私的目的
3、End-to-End首部和Hop-by-Hop首部
(1)端到端首部(End-to-End Header)——在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发,在HTTP/1.1中,除了8个逐跳首部字段外,其他所有字段都属于端到端首部
(2)逐跳首部(Hop-by-Hop Header)——分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后的版本中,如果要使用逐跳首部,需提供Connection首部字段。以下列举HTTP/1.1中8个逐跳首部字段:
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- Trailer
- TE
- Transfer-Encoding
- Upgrade
五、确保Web安全的HTTPS
1、HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用 ,加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)
2、HTTPS:HTTP+加密+认证+完整性保护
(1)加密
- 公开秘钥加密(Public-key cryptography),也叫作非对称秘钥加密,该加密方式使用一对分对称秘钥,即公钥和私钥。SSL采用这种方式加密
- 共享秘钥加密(Common key crypto system),也叫作对称秘钥加密,加密和解密使用同一个密钥。
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。公开密钥加密比共享密钥加密的处理速度要慢,所以在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
(2)下图说明了从仅使用服务器端的公开密钥证书(服务器证书)建立HTTPS通信的整个过程
六、用户身份认证
HTTP/1.1使用以下认证方式
1、BASIC认证(基本认证)
2、DIGEST认证(摘要认证)
3、SSL客户端认证——在本地安装客户端证书,常见于使用网银
4、FormBase认证(基于表单认证)——认证多半为基于表单认证,客户端向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证,多数网站的用户登录即为表单认证。通常会使用Cookie来管理会话
七、基于HTTP的功能追加协议
1、SPDY——没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作,同时考虑到安全性问题,SPDY规定通信中使用SSL。
使用SPDY后,HTTP协议额外获得以下功能
- 多路复用流
- 赋予请求优先级
- 压缩HTTP首部
- 推送功能
- 服务器提示功能
局限:SPDY基本上只是将单个域名(IP地址)的通信多路复用,所以当一个Web网站上使用多个域名下的资源,改善效果就会受到限制。
2、使用浏览器进行全双工通信的WebSocket
主要特点
- 推送功能
- 减少通信量
3、Web服务器管理文件的WebDAV
(1)WebDAV为实现远程文件管理,向HTTP/1.1中追加了以下方法
(2)为配合扩展的方法,状态码也随之扩展
八、构建Web内容的技术
- HTML——超文本标记语言
- 动态HTML——支持动态内容,如Google Maps等。该技术是通过调用客户端脚本语言JaveScript,实现对HTML的Web页面的动态改造。利用DOM(Document Object Model,文档对象模型)可指定欲发生动态变化的HTML元素。
- Web应用
- 数据发布的格式及语言——XML(可扩展标记语言);RSS/Atom;JSON(JavaScript Object Notation),一种以JavaScript(ECMAScript)的对象表示法为基础的轻量级数据标记语言
九、Web攻击技术
1、针对Web的攻击技术,如在客户端篡改请求。针对Web用的攻击模式,包括主动攻击和被动攻击。
2、因输出值转义不完全引发的安全漏洞
- 跨站脚本攻击
- SQL注入攻击
- OS命令注入攻击
- HTTP首部注入攻击
- 邮件首部注入攻击
- 目录遍历攻击
- 远程文件包含漏洞
3、因设置或设计上的缺陷引发的安全漏洞
- 强制浏览
- 不正确的错误消息处理
- 开放重定向
4、因会话管理疏忽引发的安全漏洞
- 会话劫持
- 会话固定攻击
- 跨站点请求伪造
5、其他安全漏洞
- 密码破解
- 点击劫持
- DoS攻击
- 后门程序