【图解HTTP】读书笔记
常见概念
- HTTP:全称是Hyper Text Transfer Protocol,超文本传输协议
- 版本:HTTP/1.0、HTTP/1.1
- 协议:某一种公用的规则
- HTTP相关协议
- DNS:用于将域名解析为IP,供IP层使用
- TCP:提供可靠在字节流服务,用于传输HTTP报文
- IP:根据IP地址,选择合适的路由,发送对应的数据包
- ARP:用于将IP解析为MAC地址,供数据链路层使用
- URL与URI
- URI:Uniform Resource Identifier,统一资源标识符,也就是通过某种协议方案标识的资源的定位符
- Uniform:以统一的格式进行标识
- Resource:可以用于标识的资源
- Identifier:标识具体可以标识的对象
- 作用:用于标识资源
- URL:Uniform Resource Locator,统一资源定位符,是URI的一个子集,用于标识某一具体的资源
- 需要注意的是,URI可以用于描述某一资源,但可能无法具体定位到某一个资源,而URL则是可以具体定位到该资源
- URI:Uniform Resource Identifier,统一资源标识符,也就是通过某种协议方案标识的资源的定位符
简单的HTTP协议
通信模式:基于请求和响应模式,没有请求则没有响应,通信过程中不保存状态信息(无状态协议),也就是不对请求和响应之间的通信状态进行保存
报文类型
- 请求报文
- 格式(请求行 请求头部字段\r\n请求实体内容)
- 响应报文
- 格式(响应行 响应行头部字段\r\n响应实体内容)
HTTP方法
- GET:用于获取资源
- POST:用于传输主体的实体
- PUT:用于传输文件(一般网站不开发该功能)
- HEAD:与GET类似,但是不返回报文主体内容,主要用于确认URI有效性以及资源的更新日期
- DELETE:用于删除文件,与PUT相反(一般不开放)
- OPTIONS:用于查询指定URI资源支持的方法
- TRACE:跟踪路径(不怎么使用)
- CONNECT:要求使用隧道协议连接代理,主要是SSL(Secure Sockets Layer,安全套接字)和TLS(Transport Layer Security,传输层安全)将通信的内容加密
长连接和短连接
- 短连接:在HTTP初期版本中,每次完成一个HTTP传输,就需要建立一次TCP连接,会造成很多不必要的开销,使得网络性能降低
- 长连接:只要通信的一端没有明确提出断开连接,则保持TCP连接(keep-alive),建立一个TCP连接可以进行多次的HTT通信,减少了TCP的建立以及断开所造成的额外开销,减轻负担
管线化
在长连接的基础上,使得请求管线化成为可能,在这之前,每一次请求都需要等到前一次请求的响应回来之后才能发出,而采用管线化之后,则可以不用等到响应再发出新的请求
Cookie技术
在请求和响应报文中,加入Cookie信息,用于保存状态信息,从而使得无状态协议HTTP协议可以保存状态
HTTP报文信息
- HTTP报文
- 使用HTTP协议进行通信的信息称为HTTP报文
- 请求端发出的报文称为请求报文
- 响应段发出的报文称为响应报文
- 报文的基本格式(报文首部CRLF报文主体)
【报文结构图】
HTTP状态码
- 作用:用于告知客户端服务端处理的结果
- 格式:3位数字 + 状态码说明
- 类别
- 1XX:信息性状态码,表示请求正在处理
- 2XX:成功状态码,表示请求正常处理完毕
- 3XX:重定向状态码,需要进行附加操作以完成请求
- 4XX:客户端错误状态码,服务器无法处理请求
- 5XX:服务器错误状态码,服务器处理请求错误
- 常用状态码
- 2XX系列,表示成功
- 200 OK,表示请求被正常处理
- 204 No Content, 表示请求被正常出来,但是返回的响应报文中不包含实体的主体部分
- 206 Partial Content,表示客户端进行范围请求,而服务端成功执行了这部分的请求,响应报文由Content-Range指定实体内容
- 3XX系列,重定向,表示浏览器需要执行某些特殊的处理以正确处理请求
- 301 Moved Permanently,永久性重定向,表示请求的资源已经分配了新的URI,以后应该使用新的URI
- 302 Found,临时性重定向,表示请求的资源已经分配新的URI,希望用户本次能使用新的URI访问
- 303 See Other,表示请求的资源存在另外一个URI,应使用GET方法定向获取资源
- 304 Not Modified,请求的附带条件的资源找到,但是未满足请求的条件(与重定向无关)
- 307 Temporary Redirect,临时性重定向,与302类似
- 4XX系列,客户端错误,表明客户端是发生错误的原因所在
- 400 Bad Request,请求报文中存在语法错误
- 401 Unauthorized,表示请求需要认证
- 403 Forbidden,表示请求的资源被服务器拒绝
- 404 Not Found,无法找到请求的资源
- 5XX系列,服务器错误,表示服务器本身发生错误
- 500 Internal Server Error,服务器执行请求时发生了错误或临时性故障
- 503 Service Unavailable,服务器暂时处于超载状态或正在进行停机维护,现在无法处理请求
- 2XX系列,表示成功
HTTP首部
- 作用:在客户端与服务器通信过程中传递额外信息
- 格式:
首部字段名: 字段值1, 字段值2, ...
- 类型
-
通用首部字段(请求和响应报文都会使用的字段)
-
请求首部字段(补充了请求的附加信息)
-
响应首部字段(补充了响应的附加信息)
-
实体首部字段(补充与实体内容有关的信息)
-
确保安全的HTTPS
HTTP缺点(未加密协议)
- 使用明文通信,内容可能会被窃听
- 不验证通信方的身份,有可能会遭遇伪装
- 无法验证报文的完整性,有可能内容遭修改
加密策略
- 通信加密,通过和SSL或TLS组合使用,建立安全的通信通道,加密HTTP通信内容
- 内容加密,将参与通信的内容本身加密
HTTPS = HTTP + 加密 + 认证 + 完整性保护,需要注意的是,HTTPS本身并非新的协议,只是在HTTP上加了SSL