这是我参与「第四届青训营 」笔记创作活动的第11****天
第一章:序
HTTP
HTTP:超文本传输协议,但是这种译法并不严谨;严谨的译名应该为“超文本转移协议”
成长时代
1990年11月,CERN成功研发了世界上第一台Web服务器和Web浏览器
- HTTP/1.0
- HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945。虽说是初期标准,但该协议标准至今仍 被广泛使用在服务器端
- HTTP/1.1
- 1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。当初 的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本
网络基础TCP/IP
HTTP属于TCP/IP的一个子集
TCP/IP各层
- 应用层
- 应用层决定了向用户提供应用服务时通信的活动 (HTTP也属于该层)
- 传输层
- 传输层对上层应用层,提供处于网络连接中的两台计算机之间的 数据传输
- 网络层
- 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小 数据单位
- 链路层
- 用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动
各种协议与HTTP协议的关系
第二章:简单的HTTP笔记
客户端(请求访问资源的一端)
服务端(提供响应资源的一端)
请求与响应
服务端响应,客户端发送请求
HTTP状态
http是无状态协议,对于发送过的请求与响应都不做持久化处理
HTTP/1.1引入cookie管理状态
请求URI定位资源
URL是URI的子集
发送请求
- URI为完整的请求URI
GET hackr.jp/index.html HTTP/1.1
- 在首部字段Host中写明网络域名或IP地址
GET /index.html HTTP/1.1
常用HTTP方法
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获取报文首部
DELETE:删除文件
LINK和UNLINK已被HTTP/1.1废弃
持久连接
HTTP/1.0中每进行一次通信就要断开一次TCP连接
为了解决上述问题,HTTP/1.1想出了持久连接( HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse )
管线化
发送多个HTTP请求
三次握手与四次挥手
- 客户端发送一个SYN与SEQ,
- 服务端接收后发送一个SYN包回去。ACK = x + 1,表示确认收到(客户端发来的Seq值 + 1),Seq = y, 表示让客户端确认是否能收到
- 客户端再次发送确认包(ACK),ACK = y + 1, 表示确认收到服务器的包(服务端发来的Seq值 + 1)
使用Cookie的状态管理
Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie
第三章:HTTP报文内的HTTP信息
客户端的HTTP报文叫做请求报文,响应端的叫做响应报文
报文结构
- 请求行
- 包含用于请求的方法
- 状态行
- 包含表明响应结果的状态码
- 首部字段
- 包含表示请求和响应的各种条件和属性的各类首部
- 其他
- cookie等
范围请求
解决网络中断,需要重头开始的问题
使用Range首部字段
Range:bytes=5001-10000
Range:bytes=5000-
第四章:HTTP状态码
类别
- 200 OK
- 表示请求被正常处理了
- 204 No Content
- 请求已成功处理,但在返回的响应报文 中不含实体的主体部分
- 206 Partial Content
- 客户端进行了范围请求,而服务器成功执行了这部分 的 GET 请求
- 301 Moved Permanently
- 永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以 后应使用资源现在所指的 URI
- 302 Found
- 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希 望用户(本次)能使用新的 URI 访问
- 303 See Other
- 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源
- 304 Not Modified
- 该状态码表示客户端发送附带条件的请求 A 时,服务器端允许请求 访问资源,但未满足条件的情况
- 307 Temporary Redirect
- 临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标 准禁止 POST 变换成 GET,但实际使用时大家并不遵守
- 400 Bad Request
- 该状态码表示请求报文中存在语法错误
- 401 Unauthorized
- 该状态码表示发送的请求需要有通过 HTTP 认证
- 403 Forbidden
- 该状态码表明对请求资源的访问被服务器拒绝了
- 404 Not Found
- 表示资源不存在
- 500 Internal Server Error
- 该状态码表明服务器端在执行请求时发生了错误
- 503 Service Unavailable
- 该状态码表明服务器暂时处于超负载或正在进行停机维护