HTTP 基础

HTTP(HyperText Transfer Protocol),即超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。基于 TCP/IP 协议实现。

相关概念

资源

媒体类型(MIME)

MIME(Multipurpose Internet Mail Extension)多用途英特网邮件扩展,最初是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。

MIME 类型是一种文本标记,由一种主类型和一个特定的子类型表示,主类型和子类型以斜杠 / 来分隔。

MIME 一般都是独立类型,例如:

  • text/plaintext/htmltext/css

  • image/jpegimage/png

  • audio/oggaudio/oggaudio/*

  • video/mp4

  • application/jsonapplication/octet-stream

但是某些时候还需要更加的细分领域的类型种类,例如:

  • multipart/form-data

  • multipart/byteranges

HTTP 中可以通过头部的 Content-Type 设置 MIME 类型,以及 X-Content-Type-Options 阻止 MIME 嗅探

URI

URI(Uniform Resource Identifier)统一资源标识符,唯一标识并定位信息资源。

URL

URL(Uniform Resource Locator)统一资源定位符,是 URI 的最常见表达形式。

大部分的 URL 遵循一种标准格式:

{协议类型}://{服务器地址}[:{端口号}][/{资源层级 UNIX 文件路径}][?{查询条件}][#{片段}]
部分描述

协议类型

HTTP,HTTPS 等

服务器地址

域名或 IP 地址

端口号

数字表示,HTTP 协议时默认为 80,HTTPS协议时默认为 433

资源层级文件路径

查询条件

? 字符微起点,每个查询条件以 & 分割,再以 = 分割条件和值

片段

# 字符为起点

事务

方法

HTTP 支持几种不同的请求命令,每种方法会告诉服务器执行什么样的行为。常见 HTTP 方法:

HTTP Method描述

GET

获取相应指定资源

PUT

将来自客户端的数据存储到指定的服务器资源中

DELETE

移除指定资源

POST

将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改.

PATCH

修改指定资源

HEAD

获取指定资源,但是不获取响应体中的内容

OPTION

用于描述指定资源的通信选项

CONNECT

建立一个到由目标资源标识的服务器的隧道

TRACE

沿着到目标资源的路径执行一个消息环回测试

状态码

每 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码。告知用户代理请求是否成功或者需要采取其它动作。

HTTP 响应码一般遵循以下规则:

分类描述

1**

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

2**

成功,操作被成功接收并处理

3**

重定向,需要进一步的操作以完成请求

4**

客户端错误,请求包含语法错误或无法完成请求

5**

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

常见 HTTP Response Code:

Response Code描述

200

成功

302

重定向

404

资源不存在

报文

HTTP 报文由一行一行的简单字符串组成。HTTP 报文包括三个部分:

  • 起始行

  • 首部字段

  • 主体

请求报文和响应报文的起始行以及支持的首部字段不完全一样

历史版本

HTTP 协议大部分都是向下兼容的。

  • HTTP/0.9

  • HTTP/1.0

  • HTTP/1.0+

  • HTTP/1.1

  • HTTP-NG(HTTP/2.0)

HTTP/0.9

已过时。只接受 GET 请求,且不支持请求头。

HTTP/1.0

第一个广泛使用的版本。首次支持版本号、HTTP 首部字段、以及对多媒体对象的处理。

HTTP/1.0+

增加了许多新特性,如 keep-alive 连接、虚拟主机支持,以及代理连接支持。属于非正式的 HTTP 扩展版本。

HTTP/1.1

该版本主要关注于校正原先 HTTP 设计中的结构性缺陷,明确语义,引入重要的性能优化,并移除一些不好的特性。目前主要使用的 HTTP 版本。

HTTP/2.0

HTTP/2.0 重点关注的是性能的大幅度优化。

最后更新于