总结一下最近关于HTTP的理解

时间线

时间 版本 功能
1991 0.9 只支持GET请求方法获取文本数据(比如HTML文档),且不支持请求头、响应头等,无法向服务器传递太多信息
1996 1.0 支持POSTHEAD等请求方法,支持请求头、响应头等,支持更多种数据类型(不再局限于文本数据)浏览器的每次请求都需要与服务器建立-个TCP连接,请求处理完成后立即断开TCP连接
1997 1.1 最经典、使用最广泛的版本支持PUTDELETE等请求方法采用持久连接 (Connection: keep-alive),多个请求可以共用同一个TCP连接
2015 2.0
2018 3.0

标准

口由万维网协会 (W3C)、互联网工程任务组 (ETF) 协调制定,最终发布了一系列的RFC

在RFC 5234中表明:ABNF用作internet中通信协议的定义语言

ABNF是最严谨的HTTP报文格式描述形式

格式

请求方法

方法名 用途
GET 常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)
POST 常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)
HEAD 请求得到与GET请求相同的响应,但没有响应体;使用场景:下载大文件前,先获取其大小,再決定是否要下载。以此可以节约带宽资源
OPTIONS 用于获取目的资源所支持的通信选项,比如服务器支持的请求方法
PUT 用于对已存在的资源进行整体覆盖
PATCH 用于对资源进行部分修改(资源不存在,会创建新的资源)
DELETE 用于删除指定的资源
TRACE 请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断
CONNECT 可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道 (tunnel)可以用来访问采用了 SSL (HTTPS) 协议的站点

头部字段

请求头字段

字段 说明 示例
User-Agent 浏览器的身份标识字符串 User-Agent: Mozilla/5.0 (X11;Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Host 服务器的域名、端口号 Host: localhost:80
Date 发送该消息的日期和时间 Date: Tue, 15 Nov 1994 08:12:31 GMT
Referer 表示浏览器所访问的前一个页面正是前一个页面的某个链接将浏览器带到了当前这个页面 Referer: https://www.baidu.com
Content-Type 请求体的类型 Content-Type: multipart/form-data
Content-Length 请求体的长度(字节为单位) Content-Length: 232
Accept 能够接受的响应内容类型(Content-Types) Accept: text/plain
Accept-Charset 能够接受的符集 Accept-Charset: GB2312,utf-8;q=0.7,*; q=0.7
Accept-Encoding 能够接受的编码方式列表 Accept-Encoding: gzip, deflate
Accept-Language 能够接受的响应内容的自然语言列表 Accept-Language: en-US
Range 仅请求某个实体的一部分。字节偏移以0开始 Range: bytes=500-999
Origin 发起一个针对跨域资源共享的请求 Origin: https://www.baidu.com
Cookie 之前由服务器通过set-Cookie发送的cookie Cookie: Version=1; Skin=new;
Connection 该浏览器根要优先伅用的连接类型 Connection: keep-alive
Cache-Control 用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令 Cache-Control: no-cache

q值越大,优先级越高。默认1.0

响应头字段

字段 说明 示例
Content-Type 响应体的类型 Content-Type: text/html; charset=utf-8
Content-Encoding 内容所使用的编码类型 Content-Encoding: gzip
Content-Length 响应体的长度(字节为单位) Content-Length: 348
Content-Disposition 一个可以让客户端下载文件并建议文件名的头部 Content-Disposition: attachment;filename="fname.ext"
Accept-Ranges 服务器支持哪些种类的部分内容范围 Accept-Ranges: bytes
Content-Range 这条部分消息是属于完整消息的哪部分 Content-Range: bytes 21010-47021/47022
Access-Control-Allow-Origin 指定哪些网站可参与到跨来源资源共享过程中 Access-Control-Allow-Origin:*
Location 用来进行重定向,或者在创建了某个新资源时使用 Location: http://www.w3.org
Set-Cookie 返回一个Cookie让客户端去保存 Set-Cookie: UserID=JohnDoe; Max Age=3600; Version=1
Connection 针对该连接所预期的选项 Connection: close
Cache-Control 向从服务器直到客户端在内的所有缓存机制告知,它们是否可以缓存这个对象。单位为秒 Cache-Control: max-age=3600