二,http协议
1 基础概念
1.1 报文格式
- 请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。
- 响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
1.2 无状态
- HTTP 是不保存状态的协议
- 使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。
- HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。
1.3 http方法
- GET和POST最常用
- HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。
- PUT和DELETE因自身不带验证机制,任何人都可以上传/删除文件 , 存在安全性问题。当配合 Web 应用程序的验证机制,或遵守 REST 标准时还是有可能会开放使用的。
1.4 持久连接和管线化技术
- 持久连接在建立 1 次 TCP 连接后进行多次请求和响应的交互
- 减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
- 减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了。
- 在 HTTP/1.1 中,所有的连接默认都是持久连接。
- 管线化技术能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。
- 管线化技术则比持久连接还要快。请求数越多,时间差就越明显。
2 http报文
2.1 报文结构
2.2 编码
- HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量的访问请求。但是,编码的操作需要计算机来完成,因此会消耗更多的 CPU 等资源。
- 通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
- 常用的内容编码
- 分块传输编码:在传输大容量数据时,通过把数据分割成多块(chunk),能够让浏览器逐步显示页面。
2.3 多部分对象集合
发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。
- multipart/form-data 在 Web 表单文件上传时使用。
- multipart/byteranges 状态码 206响应报文包含了多个范围的内容时使用。
2.4 范围请求
如果下载过程中遇到网络中断的情况,能从之前下载中断处恢复下载。
- 针对范围请求,响应会返回状态码为 206 Partial Content 的响应报文。
- 对于多重范围的范围请求,响应会在首部字段 ContentType 标明 multipart/byteranges 后返回响应报文。
2.5 内容协商
客户端和服务器端就响应的资源内容进行交涉,会以响应资源的语言、字符集、编码方式等作为判断的基准。
- 请求报文中的首部字段
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
3 http状态码
状态码如 200 OK,以 3 位数字和原因短语组成。
3.1 2xx
- 200 OK 请求已正常处理
- 204 No Content 一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
- 浏览器显示的页面不发生更新。比如对于a标签,如果链接的页面响应码为204,页面也不会发生跳转。
- 206 Partial Content 客户端进行了范围请求,而服务器成功执行了这部分的GET请求。
3.2 3xx
当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。
- 301 Moved Permanently 请求的资源已被分配了新的 URI,建议修改书签URI
- 302 Found 请求的资源已被分配了新的 URI,将来还有可能发生改变
- 303 See Other 请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源
- 304 Not Modified 客户端发送附带条件的请求,服务器端允许请求访问资源,但未满足条件的情况。
- 附带条件的请求是指采用 GET方法的请求报文中包含 If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
- 304 虽然被划分在 3XX 类别中,但是和重定向没有关系。
3.4 4xx
表明客户端是发生错误的原因所在。
- 400 Bad Request 请求报文中存在语法错误。
- 401 Unauthorized 表示发送的请求需要有通过 HTTP 认证的认证信息。另外若之前已进行过 1 次请求,则表示用户认证失败。
- 403 Forbidden 对请求资源的访问被服务器拒绝了。
- 404 Not Found 表明服务器上无法找到请求的资源。
- 也可以在服务器端拒绝请求且不想说明理由时使用。
3.5 5xx
- 500 Internal Server Error 表明服务器端在执行请求时发生了错误。
- 503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
4 通信数据转发程序
HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应再转发给客户端。
4.1 代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
- 每次通过代理服务器转发请求或响应时,会追加写入 Via 首部信息
4.2 网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
- 网关能使通信线路上的服务器提供非 HTTP 协议服务。
- 利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。
4.3 隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
5 http首部
5.1 通用首部
请求报文和响应报文两方都会使用的首部。
- Cache-Control 能操作缓存的工作机制。
- no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源,no-store 才是真正地不进行缓存。
- Connection
- 控制不再转发给代理的首部字段
- 管理持久连接
- HTTP/1.1 版本的默认连接都是持久连接。当服务器端想明确断开连接时,则指定Connection 首部字段的值为 Close。
- HTTP/1.1 之前的 HTTP 版本的默认连接都是非持久连接。要维持持续连接,则需要指定Connection 首部字段的值为 Keep-Alive。
- Via 为了追踪客户端与服务器之间的请求和响应报文的传输路径。
5.2 请求首部字段
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
- Accept-Encoding 告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
- Host 虚拟主机运行在同一个 IP 上,因此使用首部字段 Host 加以区分
- Host 首部字段在 HTTP/1.1 规范内是唯一一个必须被包含在请求内的首部字段。若服务器未设定主机名,那直接发送一个空值即可。
5.3 响应首部字段
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
5.4 实体首部字段
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
5.5 Cookie相关的首部字段
- Set-Cookie
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!