iOS开发应该知道的HTTP

前一阵子和同事讨论是否应该全部迁徙到HTTPS请求,由此引发了对整个HTTP协议的研究的想法,然后找了一本小学生也能看懂的关于HTTP协议的书《图解HTTP》,津津有味的翻了一遍,做个总结,下文主要以问答的形式组织,也为了以后方便回顾,查阅。(如有侵权,请及时联系)

了解Web及网络基础

1.WWW的构建技术有:

  • 作为页面的文本标记语言的HTML
  • 作为文本传输协议的HTTP
  • 作为指定文档位置的URL

2.网络基础TCP/IP协议簇

  • 应用层:FTP,HTTP,DNS等(决定了向用户提供什么服务)
  • 传输层:TCP,UDP(提供处于网络连接中得两台计算机的数据传输)
  • 网络层:IP(处理网络上流动的数据包,规定了通过怎样的路径传送)
  • 链路层:用于处理网络连接的硬件部分

3.与HTTP协议密切相关的三个协议

  1. IP协议: 要确保数据传送对象正确,有两个重要的因素就是IP地址和MAC地址,IP间的通信依赖于MAC地址,通过ARP协议反查出对应的MAC地址。
  2. TCP协议: 在传输的过程中,会把大块的数据切割成报文段的数据包管理,而TCP就是为了解决在这个过程中产生的不确定因素,建立一个可靠地链接。主要通过三次握手和四次挥手。
  3. DNS服务:主要提供了域名到IP地址间的解析,因为域名容易记,所以大多数情况我们是通过域名访问主机。

4.URL的组成部分

http://user:passwd@blog.tracyone.com:80/index//2015/06/18/iOS/XXX?userid=1#more

协议名称,登陆信息,服务器地址,服务器端口号,文件路径,查询条件,片段标示符

初识HTTP协议

1.HTTP协议特点

  • 肯定有一端是客户端,另一端是服务端,有时可能互换角色。
  • 规定请求从客户端发起,服务端响应,不会主动响应。
  • 是一种无状态协议,也就是说不做持久化处理。
  • 通过URL定位,通过方法(GET,POST等)告知服务端执行的操作。

2.HTTP协议中的连接

  1. 持久连接:在刚开始的版本中,每执行一次HTTP请求就会建立一次TCP连接,后来发现这样的开销很大,为了解决这个问题,引入了持久连接。好处就是,减少了TCP连接的重复建立和断开造成的开销。

  2. 管线化:正是由于持久连接使得请求以pipelining方式发送成为可能性,不用等待前一个请求返回就能发起下一个请求。

3.Cookie带来的状态管理

Cookie会根据服务端发送的响应中设置一个字段,下一次客户端再次访问的时候会带上这个字段,然后发送给服务端,服务端根据这个字段校验。

HTTP报文

HTTP报文是指通过HTTP协议交互的信息(请求报文,响应报文),大致可以分为报文首部和报文主体两块。

1.提升传输速率

  • 压缩传输的内容(gzip,compress,zlib)
  • 分割分块传输
  • 发送多种数据的对象集合(multipart/from-data,multipart/byteranges)

2.状态码大致分类

  • 1XX(信息性状态码):接收的请求正在处理
  • 2XX(成功状态码):请求正常处理结束
  • 3XX(重定向状态码):需要进行附加操作
  • 4XX(客户端错误状态码):服务器无法处理
  • 5XX (服务端错误状态码):服务端处理出错

3.四种HTTP首部字段类型

  • 通用首部字段(Cache-Control,Date,Via等)
  • 请求首部字段(Accept,Host,User-Agent等)
  • 响应首部字段(Server,Location等)
  • 实体首部字段(Content-Encoding,Allow等)

与HTTP协作的Web服务器

1.通信数据的转发程序

  • 代理:主要是做客户端和服务端的中间人作用,可以利用缓存技术减少网络带宽流量,获取访问日记等。
  • 网关:可以使通信线路上得服务器提供非HTTP请求,提高通信的安全性。
  • 隧道:确保客户端和服务端通信安全,隧道本身是透明的。

2.HTTP使用的认证方式

  • BASIC认证(客户端发起请求-服务端返回401请求认证-客户端base64编码发送认证-成功返回200失败返回401)
  • DIGEST认证(客户端发送请求-服务端返回临时质询码-客户端发送摘要及响应码-成功返回200失败返回401)
  • SSL客户端认证(接收到认证资源请求后,服务端会发送request报文要求客户端提供证书-客户端发送证书-服务端验证通过后进行HTTPS加密通信)
  • FormBase认证(基于表单的认证也就是根据不同的Web应用,会让你输入账户密码等认证行为,一般通过cookie来记录状态)

HTTP扩展出来的协议

1.HTTP的缺点

  • 通信使用明文,内容很容易被窃取
  • 不需要验证身份,可能遭遇伪装
  • 无法验证报文完整性,有可能被篡改

2.HTTPS = HTTP+加密+认证+完整性保护

  • 客户端发送报文开始SSL通信,报文中包含SSL版本,加密组件等
  • 服务端可进行SSL通信时,返回SSL版本和加密组件等
  • 服务器发送证书报文
  • 服务器发送报文通知SSL握手协商结束
  • 客户端发送报文回应,并发送一段随机码用证书中得公钥加密过
  • 客户端再发送报文提示服务端以后通信会用这个密钥加密
  • 客户端发送结束报文
  • 服务端同样发送确认用该密钥加密
  • 服务端发送结束报文

3.HTTP的瓶颈:

  • 一个连接只能发送一个请求
  • 请求只能由客户端发起
  • 首部没有经过压缩
  • 发送冗长的首部(每次都需要发)
  • 没有强制压缩发送

4.SPDY的功能:

  • 多路复用流
  • 赋予请求优先级
  • 压缩HTTP首部
  • 推送功能
  • 服务器提示功能

5.WebSocket的功能

  • 推送功能
  • 减少通信量
  • 握手请求,响应

针对Web的攻击技术

1.因输出值转移不完全引发的安全漏洞

  • 跨站脚本攻击(是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JS进行攻击)
  • SQL注入攻击(针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击)
  • OS命令注入攻击(通过Web应用,执行非法的操作系统命令达到攻击的目的,调用shell函数)
  • HTTP首部注入攻击(通过在响应首部字段内插入换行,天剑任意响应首部或者主题的一种攻击)
  • 邮件首部注入攻击(通过向邮件首部To或者Subject内任意添加非法内容引起的攻击)
  • 目录遍历攻击(是指对本无意公开的目录,通过非法截断目录路径,达成访问目录的攻击)
  • 远程文件包含漏洞(是指当部分脚本内容需要读取其他文件时,攻击者利用指定外部服务器的URL充当以来文件)

2.因设置或设计上缺陷引发的安全漏洞

  • 强制浏览(从安置Web服务器的公开目录下地文件中,浏览那些原本非自愿公开的文件)
  • 不正确地错误消息处理(是指Web应用的错误消息内包含对攻击者有效地信息)
  • 开放重定向(是一种对指定的URL做重定向跳转的功能)

3.因会话管理疏忽引发的安全漏洞

  • 会话劫持(指攻击者通过某种手段拿到了用户的会话ID,伪装成用户)
  • 会话固定攻击(强制用户使用攻击者指定的会话ID)
  • 跨站点请求伪造(攻击者通过设置好陷阱,强制对已完成认证的用户信息更新和状态更新)

4.其他安全漏洞

  • 密码破解(算出密码,突破认证)
  • 点击劫持(利用透明的按钮或者链接覆盖在Web页面上)
  • Dos攻击(是一种让运行中得服务呈现停止状态的攻击)
  • 后门程序 (是指开发设置的隐藏入口,可不按正常步骤使用受限功能)