HTTP 知识点总结

背景

  • WWW:万维网,表示由 HTML 、HTTP 、URL 这一系列所构成的技术集合体
  • HTML/2.0 1994 年
  • HTTP/1.0 1995 年 5 月 RFC 1945
  • HTTP/1.1 1997 年 1 月 RFC 2616

TCP/IP

  • 分层:应用层、传输层、网络层、数据链路层
  • 应用层:向用户提供服务时通信决定做哪些事,比如:FTP(文件上传)、DNS(域名系统)、HTTP(文本传输)
  • 传输层:提供两端间的数据传输,两个性质不同的协议:TPC(传输控制协议)、UDP(用户数据报协议)
  • 网络层:处理流动数据包,计算将数据包传输到对方计算机的最佳传输路线
  • 数据链路层:处理硬件,如操作系统、设备驱动、网络适配器等物理可见部分

    HTTP 报文

首部

  • 请求行:方法、URI、HTTP 版本
  • 状态行:状态码、原因短语、HTTP 版本
  • 首部字段:请求和响应的首部,一般 4 种,分别为通用首部、请求首部、响应首部、实体首部
  • 其他:RFC 未定义的首部(Cookie 等)

状态码

  • 1xx 信息性状态码,表示请求正在处理
  • 2xx 成功状态码,表示请求正常处理完毕
  • 3xx 重定向状态码,表示需要进行附加操作以完成请求
  • 4xx 客户端错误状态码,表示服务器无法处理请求
  • 5xx 服务器错误状态码,表示服务器处理请求出错

2xx

  • 200 Ok 服务端正常处理
  • 204 No Content 服务端正常处理,但没有返回任何报文的实体主体
  • 206 Partial Content 指客户端进行范围请求,服务端正常返回了包含 Content-Range 首部字段的范围实体主体

3xx

  • 301 Moved Permanently 永久性重定向
  • 302 Found 临时性重定向
  • 303 See Other 类似 302,但明确表示客户端要以 GET 方式来请求在 Location 中规定的 URI
  • 304 Not Modified 使用未过期缓存,表示客户端发送附带条件的请求,服务端允许访问并且未满足条件,响应报文中不包含报文主体,客户端可直接使用未过期缓存
  • 307 Temporary Redirect 同 302,但会遵照浏览器标准,不会从 POST 变成 GET

当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内主体,之后请求会自动再次发送。301、302 标准是禁止将 POST 改变成 GET 方法的,但实际使用大家都会这么做。 – 摘自《图解 HTTP》

附带条件的请求是指采用 GET 方法的请求报文包含 If-Match,If-Modified-Since,If-None-Match,if-Range,If-Unmodified-Sine 中任一首部。 – 摘自《图解 HTTP》

4xx

  • 400 Bad Request 表示请求报文存在语法错误,浏览器会像 200 一样对待该错误码
  • 401 Unauthorized 表示请求需要通过 HTTP 认证,响应首部必须包含 WWW-Authenticate 字段以完成用户信息认证
  • 403 Forbidden 访问被服务器拒绝
  • 404 Not Found 服务端未找到请求资源

5xx

  • 500 Internal Server Error 服务端执行出错
  • 503 Service Unavailable 服务器超负载或停机维护,可在响应首部写入 Retry-After 字段,以告知客户端稍后重试

数据转发

  • 代理:转发 HTTP 请求与响应报文,一般有缓存代理、透明代理
  • 网关:可以将 HTTP 请求转换为非 HTTP 协议并发送至服务器处理数据,具有提高安全性等作用
  • 隧道:确保客户端与服务端安全通信,如使用 SSL 等加密手段通信,隧道本身不会解析 HTTP