学习HTTP协议|青训营笔记

60 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

HTTP报文

Hyper Text Transfer Protocal

超文本传输协议

下文中的图解来自《图解HTTP》

HTTP报文

客户端:发送请求报文

服务端:返回响应报文

  • HTTP报文

    • 报文首部

      • 请求行:请求报文
      • 状态行:响应报文
      • 各种首部字段
    • 空行

    • 报文主体

方法

  • GET

  • POST

  • PUT

  • DELETE

  • HEAD

  • CONNECT

  • OPTIONS

  • TRACH

  • PATCH

  • 安全方法:不会修改服务器数据

    • GET, HEAD, OPTIONS
  • 幂等方法:执行多次的效果是一样的

    • GET HEAD, OPTIONS, PUT, DELETE

HTTP状态码

状态码类别

常见的14个状态码

2XX 成功

  • 200 OK

    • 正常处理
  • 204 No Content

    • 服务器请求处理成功,但没有实体的主体部分返回
  • 206 Partial Content

    • 客户端进行范围请求,服务端返回指定范围的实体内容

3XX 重定向

  • 301 Moved Permanently

    • 永久重定向,请求的资源已被分配了新的URI,需要按照Location收录字段提示的URI重新访问
  • 302 Found

    • 临时重定向
  • 303 See Other

    • 资源存在另一个URI,应该使用GET方法定向获取
  • 304 Not Modified

    • 服务端允许请求访问资源,但为满足条件
  • 307 Temporary Redirect

    • 临时重定向

4XX 客户端错误

  • 400 Bad Request

    • 请求报文中存在语法错误
  • 401 Unauthorized

    • 需要验证或验证失败
  • 403 Forbidden

    • 请求被服务器拒绝
  • 404 Not Found

    • 服务器上没有对应的资源

5XX 服务器错误

  • 500 Internal Server Error

    • 服务器在执行请求时发生错误
  • 503 Service Unavailable

    • 服务器处于超载或停机维护,暂时无法处理请求

Web服务器

HTTP1.1允许一台HTTP服务器搭建多个Web站点。

  • 代理

    • 接收客户端请求,转发给服务器
    • 接收服务器响应,转发给客户端
  • 网关

    • 转发其他服务器通信数据的服务器,可以进行非HTTP协议
  • 隧道

    • 隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双 方通信连接的应用程序。

HTTP报文首部

请求报文

  • 方法
  • URI
  • HTTP版本
  • HTTP首部字段
GET / HTTP/1.1
Host: hacker.jp
 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/⇒ 20100101 Firefox/13.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,⇒ */*; q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT
If-None-Match: "45bae1-16a-46d776ac"
Cache-Control: max-age=0

响应报文

  • HTTP版本
  • 状态码
  • 原因短句
  • HTTP首部字段
HTTP/1.1 304 Not Modified
Date: Thu, 07 Jun 2012 07:21:36 GMT
Server: Apache
Connection: close
Etag: "45bae1-16a-46d776ac"

4种首部字段类型

  • 通用首部字段
  • 请求首部字段
  • 响应首部字段
  • 实体首部字段