HTTP 指南

HTTP 规范是我们在开发 Web 相关工程是应该要遵守的,这里记录下我觉得常用的基础知识和常见用法。


更新历史

  • 2017.04.02: 完成初稿

HTTP 简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种基于 TCP/IP 通信协议来传递数据的网络传输协议,所有的 WWW 文件都必须遵守这个标准。HTTP 默认端口号为 80。

  • HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 内容类型。
  • HTTP 是无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP Status Code

无论是返回 HTML 还是 API 响应,我们都应该尽可能遵从 HTTP 状态码规范,没有必要自己再搞一套。简单来说,HTTP 状态码包含三个十进制数字,第一个数字是类别,后俩是编号,一共有五个大类。

注:加粗的为常用的状态码

1XX 信息

服务器收到请求,需要请求者继续执行操作

  • 100 Continue
    • 继续。客户端应继续其请求
  • 101 Switching Protocols
    • 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议

2XX 成功

操作被成功接收并处理

  • 200 OK
    • 请求成功。一般用于 GET 与 POST 请求
  • 201 Created
    • 已创建。成功请求并创建了新的资源
  • 202 Accepted
    • 已接受。已经接受请求,但未处理完成
  • 203 Non-Authoritative Information
    • 非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本
  • 204 No Content
    • 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
  • 205 Reset Content
    • 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
  • 206 Partial Content
    • 部分内容。服务器成功处理了部分GET请求

3XX 重定向

需要进一步的操作以完成请求

  • 300 Multiple Choices
    • 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
  • 301 Moved Permanently
    • 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
  • 302 Found
    • 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI
  • 303 See Other
    • 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看
  • 304 Not Modified
    • 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
  • 305 Use Proxy
    • 使用代理。所请求的资源必须通过代理访问
  • 306 Unused
    • 已经被废弃的HTTP状态码
  • 307 Temporary Redirect
    • 临时重定向。与 302 类似。使用 GET 请求重定向

4XX 客户端错误

请求包含语法错误或无法完成请求

  • 400 Bad Request
    • 客户端请求的语法错误,服务器无法理解
  • 401 Unauthorized
    • 请求要求用户的身份认证
  • 402 Payment Required
    • 保留,将来使用
  • 403 Forbidden
    • 服务器理解请求客户端的请求,但是拒绝执行此请求
  • 404 Not Found
    • 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置”您所请求的资源无法找到”的个性页面
  • 405 Method Not Allowed
    • 客户端请求中的方法被禁止
  • 406 Not Acceptable
    • 服务器无法根据客户端请求的内容特性完成请求
  • 407 Proxy Authentication Required
    • 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
  • 408 Request Time-out
    • 服务器等待客户端发送的请求时间过长,超时
  • 409 Conflict
    • 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
  • 410 Gone
    • 客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置
  • 411 Length Required
    • 服务器无法处理客户端发送的不带 Content-Length 的请求信息
  • 412 Precondition Failed
    • 客户端请求信息的先决条件错误
  • 413 Request Entity Too Large
    • 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息
  • 414 Request-URI Too Large
    • 请求的URI过长(URI通常为网址),服务器无法处理
  • 415 Unsupported Media Type
    • 服务器无法处理请求附带的媒体格式
  • 416 Requested range not satisfiable
    • 客户端请求的范围无效
  • 417 Expectation Failed

5XX 服务器端错误

服务器在处理请求的过程中发生了错误

  • 500 Internal Server Error
    • 服务器内部错误,无法完成请求
  • 501 Not Implemented
    • 服务器不支持请求的功能,无法完成请求
  • 502 Bad Gateway
    • 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
  • 503 Service Unavailable
    • 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
  • 504 Gateway Time-out
    • 充当网关或代理的服务器,未及时从远端服务器获取请求
  • 505 HTTP Version not supported
    • 服务器不支持请求的HTTP协议的版本,无法完成处理

HTTP Request Method

HTTP 1.0 定义了三种请求方法:GET, POST 和 HEAD方法。HTTP 1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

  • GET
    • 请求指定的页面信息,并返回实体主体。
  • HEAD
    • 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
  • POST
    • 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT
    • 从客户端向服务器传送的数据取代指定的文档的内容。
  • DELETE
    • 请求服务器删除指定的页面。
  • CONNECT
    • HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • OPTIONS
    • 允许客户端查看服务器的性能。
  • TRACE
    • 回显服务器收到的请求,主要用于测试或诊断。

HTTP Request Header

  • Allow
    • 服务器支持哪些请求方法(如GET、POST等)。
  • Content-Encoding
    • 文档的编码(Encode)方法。只有在解码之后才可以得到 Content-Type 头指定的内容类型
    • 利用gzip压缩文档能够显著地减少HTML文档的下载时间
  • Content-Length
    • 表示内容长度。只有当浏览器使用持久 HTTP 连接时才需要这个数据
  • Content-Type
    • 表示后面的文档属于什么 MIME 类型
  • Date
    • 当前的 GMT 时间
  • Expires
    • 应该在什么时候认为文档已经过期,从而不再缓存它
  • Last-Modified
    • 文档的最后改动时间。客户可以通过 If-Modified-Since 请求头提供一个日期,该请求将被视为一个条件 GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个 304(Not Modified) 状态
  • Location
    • 表示客户应当到哪里去提取文档
  • Refresh
    • 表示浏览器应该在多少时间之后刷新文档,以秒计
    • 注意:这种功能通常是通过设置 HTML 页面 HEAD 区的 <META HTTP-EQUIV=”Refresh” CONTENT=”5;URL=http://host/path">实现
    • 注意:Refresh 的意义是”N秒之后刷新本页面或访问指定页面”,而不是”每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV=”Refresh” …>。
    • 注意 Refresh 头不属于 HTTP 1.1 正式规范的一部分,而是一个扩展
  • Server
    • 服务器名字
  • Set-Cookie
    • 设置和页面关联的 Cookie
  • WWW-Authenticate
    • 客户应该在 Authorization 头中提供什么类型的授权信息?在包含401(Unauthorized) 状态行的应答中这个头是必需的

HTTP Content Type

用来向浏览器和服务器提供信息,表示该 URL 对应的资源类型,应该匹配好,不要挂羊头卖狗肉

注:这里只列出比较常见的

文件后缀 Content-Type(Mime-Type)
.css text/css
.gif image/gif
.htm text/html
.html text/html
.jpeg image/jpeg
.jpg image/jpeg
.js application/x-javascript
.ico image/x-icon
.mp3 audio/mp3
.mp4 video/mpeg4
.mpeg video/mpg
.mpg video/mpg
.pdf application/pdf
.png image/png
.tif image/tiff
.tiff image/tiff
.torrent application/x-bittorrent
.wav audio/wav
.xhtml text/html

参考链接

捧个钱场?