文章目录
目录
前言
主要介绍了计算机网络的HTTP协议。
一、Web+网络基础
- 定义
- Web使用HTTP协议作为规范,完成从客户端到服务器端的一系列运作流程
- TCP/IP
- 定义
- 将互联网相关联的协议集合总称为TCP/IP
- 分层
- 应用层
- 提供应用服务时通信的活动
- FTP、DNS、HTTP
- 传输层(进程--端口)
- 计算机之间的数据传输
- TCP、UDP
- 网络层(主机)
- 处理网络上流动的数据包,选择传输路线
- IP、各种路由选择协议
- 数据链路层(网卡)
- 处理网络连接的硬件部分
- MAC
- 应用
- 发送数据时,经过每一层会将数据封装,加上各层协议的首部信息,方便在网络上传输
- 收到数据时,经过每一层将其首部消去,最终只拿到数据内容
- 应用层
- 定义
- 与HTTP密不可分的协议
- IP(网络层)
- 依赖IP地址(可变)和MAC地址(不可变)完成数据包传输
- ARP协议
- 不同局域网主机传输数据时,会利用中转设备MAC地址转发数据(此时不知道实际下一接收方的MAC地址),ARP协议可以通过接收方主机IP地址反查出对应MAC地址
- 路由选择routing
- 实际完成传输之前,无法确定到底走哪条传输路径,每一台传输路径上的主机,动态根据当时网络状况选择下一步发往哪一个主机
- TCP(传输层)
- 提供可靠的、面向字节流的服务
- 可靠
- 超时重传机制,确保数据可靠传给对方
- 字节流
- 数据分割成以报文段为单位的数据包发送
- 可靠
- 建立/解除连接
- 三次握手
- SYN、ACK
- 四次挥手
- FIN、ACK
- 三次握手
- 提供可靠的、面向字节流的服务
- DNS(应用层)
- 域名服务系统:根据主机名和域名查询IP地址(或逆向)
- IP、TCP、DNS、HTTP关系
- DNS通过接受方域名解析出其IP地址,发送HTTP请求,TCP将请求数据分割为报文段发送,根据IP地址在整个网络上一边中转一边传送,接收方收到后去除IP首部,TCP将报文段重新排序组合,HTTP对请求解析,并且返回请求的资源
- 万维网服务器会将HTTP请求报文将作为TCP连接三次握手的第三个报文的数据发送给万维网服务器
- IP(网络层)
- URI、URL
- 统一资源标识符URI标识某一互联网资源
- 统一资源定位符URL标识互联网资源的地址
- URI格式
-
- 在浏览器地址栏输入URL+回车后发生的事件
- 浏览器向DNS服务器请求解析出URL对应的IP地址
- 根据IP地址和默认端口号80,与服务器建立TCP连接
- 浏览器发出URL对应资源的HTTP请求(该请求作为TCP三次挥手的第三个报文的数据)交给服务器
- 服务器做出响应,将URL对应的资源发送给浏览器
- 释放TCP连接
- 浏览器显示文本
二、HTTP协议
- 客户主动发出请求,服务端被动响应请求,使用TCP连接,ASCII码串构成请求,类MIME(一种媒体类型)构成响应,无状态协议(可用Cookie存状态),是一个面向事务(一系列必须一起完成的信息交换)的应用层协议
- HTTP格式
- 请求
-
- 响应
-
- 请求
- 访问资源用URI定位,访问服务器用*代替URI
- HTTP方法
- GET获取资源
- POST传输实体主体
- PUT传输文件
- 请求报文主体内存文件,发送保存到URI处
- 无验证,一般不用,除非遵守REST标准
- HEAD获取报文头部
- 用于确认URI有效性和资源更新时间等通信状态
- 和GET一样但是不返回报文主体
- DELETE删除文件
- 删除URI指定的资源
- 无验证,一般不用,除非遵守REST标准
- OPTIONS询问URI标识的资源支持的方法
- TRACE追踪路径
- CONNECT用隧道协议连接代理
- 安全套接层SSL和传输层安全TLS协议把通信内容加密后经网络隧道传输
- 持久连接
- 非持久连接的HTTP/1.0每次请求需要2*RTT,HTTP/1.1的TCP连接一次,可以执行多次HTTP请求和响应的交互,直到任意一方明确提出断开连接(或者长时间未发送数据)再断开
- 管线化技术(流水线技术)
- 无需收到上个请求的响应,就可直接发送下一个请求,可实现并行发送多个请求
- Cookie状态管理
- 在请求和响应报文中写入Cookie信息,控制客户端状态
- 过程
- 第一次发送时,客户端向服务器端请求Cookie信息,服务端生成Cookie用于记录客户端是谁,在响应中添加Cookie返回
- 第二次请求时,服务器通过客户端发来的请求中Cookie信息就可以认出客户端(Cookie记住客户端状态)
三、HTTP报文内HTTP信息
- 报文格式
- 请求
- 请求行(方法+URI+HTTP版本)+请求首部+请求主体
- 响应
- 响应行(HTTP版本+状态码+原因短语)+响应首部+响应主体
- 请求
- 编码提升传输速率
- 报文主体(TCP将大数据分割成报文段易于传输)用于传输实体主体(实际需要传输的数据)
- 压缩传输的内容编码
- 服务端通过HTTP协议中的内容编码功能压缩实体,客户端收到通过内容编码功能压缩的实体后解码
- 分割发送的分块传输编码
- HTTP协议中的分块传输编码功能可以将实体主体分块,实现浏览器逐步显示页面
- 多部分对象集合
- 通过多用途因特网邮件扩展机制MIME实现邮件中各种类型附件的添加,HTTP协议中采纳多部分对象集合实现一份报文含多类型实体
- boundary字符串 划分多部分对象集合指明的各类实体,各个实体起始行前插入--字符串(boundary) 标记,每个部分类型实体都可以有首部字段Content-type,多部分对象集合结尾用--字符串--(boundary)标记
- Web表单文件上传
- 获取部分内容的范围请求
- 范围请求Range Request功能可以指定下载实体的范围,在恢复中断的下载时无需从头开始下载
- 实现范围请求后,响应状态码为206 Partial Content,多重范围的范围请求响应首部字段Content-Type会标明multipart/byteranges(多部分对象集合的一种);实现不了响应状态码为200 OK,返回完整实体内容
-
- 内容协商返回最合适内容
- 内容协商Content Negotiation功能根据请求报文的某些首部字段作为判断标准,在同一URI对应的多个页面资源中选择最合适的一个作为响应
- 服务器驱动、客户端驱动(用户自动选择中、英文/根据OS或浏览器自动选择PC端或者手机端)、透明协商(客户、服务器各自协商)
四、返回结果之HTTP状态码
- 响应的状态码(数字+原因短语)用于描述请求的处理结果,5类33种
- 1XX 表示通知信息,请求收到或正在进行处理
- 2XX 成功
- 200 OK 成功返回所需要的资源(GET返回实体,HEAD返回实体首部)
- 204 No Content 请求处理成功无资源返回
- 206 Partial Content 成功完成范围请求(响应报文有Content-Range指定范围)
- 3XX 重定向
浏览器需要执行某些特定的处理以正确处理请求- 301 Moved Permanently 永久的重定向,需要更新请求中的URI
- 302 Found 临时重定向,这次请求使用新的URI但不永久更新URI
- 303 See Other 需要用GET方法通过所请求资源的另一个URI发送请求
- 304 Not Modified 发送附带条件的请求时,服务器允许访问资源但是附带条件不满足
- 307 Temporary Redirect 临时重定向,302会将方法从POST变为GET,307不变(每种浏览器都不同)
- 4XX 客户端错误
- 400 Bad Request 请求报文有语法错误
- 401 Unauthorized 请求需要通过HTTP认证
- 403 Forbidden 服务器拒绝请求资源的访问
- 404 Not Found 找不到资源/拒绝请求但是不想说明理由
- 5XX 服务器错误
- 500 Internal Server Error 服务器端出现错误
- 503 Service Unavailable 服务器超负荷或停机维修
五、HTTP协作的Web服务器
- 虚拟主机功能
- 一台服务器实现虚拟主机功能对应多个域名(多个Web站点),这些域名DNS解析后对应一个IP地址,需要在Host首部完整指定主机名或域名URI
- 通信数据转发程序
- 代理Proxy
- 有转发功能的应用程序,客户端与服务器的中间人,经过代理服务器时,会追加写入Via首部信息,以标记出经过的主机信息
- 缓存代理
- 保存资源副本,再次访问该资源时无需再次向源服务器发送请求
- 透明代理
- 不对报文进行修改(非透明代理对报文进行修改加工)
- 网关
- 转发其他服务器通信数据的服务器,像自己拥有资源一样处理客户端发来的请求
- 可以使通信线路上的服务器提供非HTTP协议服务
- 提高通信安全性,可以在客户端与网关之间的通信线路上加密以确保连接的安全
- 隧道
- 保持远距离的客户端与服务器之间安全通信连接的应用程序
- 安全套接层SSL和传输层安全TLS协议把通信内容加密后经网络隧道传输
- 代理Proxy
- 缓存
- 在缓存代理或者客户端本地磁盘(称作临时网络文件)内保存资源副本,减少对源服务器的重复请求,节约资源,提高效率
- 为了防止资源更新导致缓存不能用,在缓存有效期限超过/客户端要求时,需要向源服务器确认资源有效性
六、HTTP首部
- 首部字段类型
- 通用
-
- 请求
-
- 响应
-
- 实体
-
- 通用
- 非HTTP/1.1首部字段
- Cookie、Set-Cookie等很常用
- End-To-End/Hop-To-Hop
- End-To-End端到端首部:必须被转发到最终接收目标处,且在缓存中保存,在代理处必须被转发
- Hop-To-Hop逐跳首部:只对单次转发有效,遇到代理/缓存不再转发(HTTP/1.1后必须提供Connection首部字段)
- Connection、Keep-Alive、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade(其他都是端到端)
七、确保Web安全的HTTPS
- HTTP的不安全问题
- 明文不加密,易被窃听
- 传输加密
- HTTP与SSL+TLS结合,升级为HTTPS,对整个通信线路加密处理
- 内容加密
- 对传输的报文实体部分加密处理,要求客户端与服务器必须同时具备加密与解密机制
- 传输加密
- 不进行通信双方身份的认证,易遭伪装
- SSL提供证书,以验证通信双方的身份
- 报文完整性不确认,易遭篡改
- SSL提供认证和加密处理和摘要功能,与HTTP的MD5(一种散列值校验)和PGP(Web提供PGP完美隐私创建数字签名)共同实现完整性保障
- 明文不加密,易被窃听
- HTTPS=HTTP+加密+认证+完整性保护
- SSL
应用最为广泛的网络安全技术- SSL提供加密处理、认证和完整性保护(MAC(信息未改变编码)摘要)功能,HTTP通过SSL(和TLS)与TCP通信
- SSL的功能
- 加密方法
明文不加密- 共享(对称)密钥加密
- 加密、解密应用同一个密钥,必须将密钥传输给接收方,易被监听,但是速度较快
- 公开(非对称)密钥加密
- 发送方用接收方提供的公开密钥加密,接收方用自己配对的私有密钥解密,密钥无需传输,避免被监听,但是速度较慢
- 通过数字证书认证机构发布公钥数字证书,以确认公开密钥的身份
- HTTPS使用混合加密方式
- 建立通信交换报文阶段使用共享密钥加密,在交换密钥环节使用公开密钥加密
- 共享(对称)密钥加密
- 证书
通信双发不认证- 公钥数字证书
- 服务器证书
- 认证服务器身份
- 运营组织认证证书(EV SSL证书)
- 证书可以认证服务器背后运营的企业的真实性
- 客户端证书
- 认证客户端身份,需要购买,一般网银这种大客户端才会购买
- 自签名证书
- 自认证机构发布的,但实际不能在互联网上用的自签名证书
- 摘要
报文完整性保护- MAC(Message Authentic Code)摘要,搭配HTTP的MD5、PGP实现
- 加密方法
- SSL