HTTP报文、方法、状态码及缓存

超文本传输协议

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

目录

  • 报文
  • 方法
  • 状态码
  • 缓存

1、报文

HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,描述报文的内容及含义,后面跟着可选的数据部分

1.1 请求报文

向wbe服务器发送请求

格式:

<method><request-URL><version> //方法、版本号、对应的URL、状态码
<headers>//请求首部

<entity-body>//请求主体部分

1.2 响应报文

请求结果返回给客户端

格式:

<version><status><reason-phrase>//版本、状态码、原因字体等
<headers>//响应首部

<entity-body>//响应主体部分

1.3 通用首部

首部 描述
Connection 客户端和服务器是否保持连接
Date 日期,报文创建时间
Update 给出了发送端可能想要升级使用新版本或协议
Via 显示了报文经过的中间节点(代理、网关)
Trailer 如果报文采用分块传输编码方式,可以利用这个首部列出位于报文trailer部分的首部集合
Trailer-Encoding 告诉接收端对报文采用什么编码格式
Cache-Control 随报文传送缓存指示
Pragma 早期的随报文传送指示方式

1.4 请求首部

首部 描述
Client-IP 客户端IP
From 客户端邮件地址
Host 接收请求的服务器的主机名和端口号
Referer 提供了包含当前请求URI的文档的URL,告诉服务器自己来源
User—Agent 发起请求的客户端应用程序
Accept 告诉服务器能够发送那些媒体类型
Accept-Charset 告诉服务器能够发送那些字符集
Accept-Encoding 告诉服务器能够发送那些编码
Accept-Language 告诉服务器能够发送那些语言
Expect 允许客户端列出请求所要求的服务器行为
If-Match 如果ETag和文档当前ETag匹配,就获取文档
If-Modified-Since 除非在某个指定日期之后修改过,否则限制这个请求
If-None-Match 如果ETag和当前文档ETag不符合,获取资源
If-Range 允许对文档否个范围内的条件请求
If-Unmodified-Since 在某个指定日期之后没有修改过,否则现在请求
Cookie 客户端字符串

1.5 响应首部

首部 描述
Age 响应持续时间
Server 服务器应用软件名称和版本
Allow 列出了可用的请求方法
Location 告诉客户端实在在哪里,用于定向
Content-Base 解析主体中相对URL的基础URL
Content-Encoding 主体编码格式
Content-Language 解析主体时适用的语言
Content-Length 主体的长度或尺寸
Content-Location 资源实际位置
Content-MD5 主体的MD5校验和
Content-Range 在整个资源中此实体部分的字节范围
Content-Type 主体的MIME
ETag 主体的实体标记
Expires 过期时间
Last-Modified 实体最后一次修改时间

如图:


首部.png

2、方法

HTTP最大的作用就是客户端发送请求,服务器给出响应,客户端想服务器发送请求的方式有很多。

ps:在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST

  • GET-从指定的资源请求数据。
  • POST-向指定的资源提交要被处理的数据
  • HEAD-与 GET 相同,但只返回 HTTP 报头,不返回文档主体。
  • PUT-上传指定的 URI 表示。
  • DELETE-删除指定资源。
  • TRACE-回显服务器收到的请求,主要用于测试或诊断。
  • OPTIONS-返回服务器支持的 HTTP 方法。
  • CONNECT-把请求连接转换到透明的 TCP/IP 通道。

3、状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

状态码被分为五大类:
1、100-199 用于指定客户端应相应的某些动作。
2、200-299 用于表示请求成功。
3、300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
4、400-499 用于指出客户端的错误。
5、500-599 用于支持服务器错误。

状态代码 状态信息 含义
100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
200 OK 一切正常,对GET和POST请求的应答文档跟在后面。
201 Created 服务器已经创建了文档,Location头给出了它的URL。
202 Accepted 已经接受请求,但处理尚未完成。
203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。
204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告 诉客户,原来缓冲的文档还可以继续使用。
305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
400 Bad Request 请求出现语法错误。
403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。

ps:常见的状态码

4、缓存

每次访问网页,通常浏览器会从服务器下载所需的资源,例如 HTML 文档、图片、CSS、JavaScript,甚至包括字体文件等。这里面的许多文件(例如图片)都是很少变动的,如果每次都要从服务器重新下载,会不必要地增加网页载入时间,同时也会对服务器造成一定压力。通过合理配置缓存策略,可令浏览器以某种方式把这些静态的文件缓存起来,下次请求同一资源时,直接使用本地存储的副本,而不是从服务器重新下载。

缓存好处:

  • 减少页面加载时间
  • 减少服务器负载
4.1、HTTP header中与缓存有关的key。
key 描述
Cache-Control 指定缓存机制,覆盖其它设置
Pragma http1.0字段,指定缓存机制
Expires http1.0字段,指定缓存的过期时间
Last-Modified 资源最后一次的修改时间
ETag 唯一标识请求资源的字符串
4.2、缓存协商策略用于重新验证缓存资源是否有效, 有关的key如下.
key 描述
If-Modified-Since 缓存校验字段, 值为资源最后一次的修改时间, 即上次收到的Last-Modified值
If-Unmodified-Since 同上, 处理方式与之相反
If-Match 缓存校验字段, 值为唯一标识请求资源的字符串, 即上次收到的ETag值
If-None-Match 同上, 处理方式与之相反

4.3、Cache-Control

HTTP/1.1定义的 Cache-Control 头用来区分对缓存机制的支持情况, 请求头和响应头都支持这个属性。通过它提供的不同的值来定义缓存策略。

如:Cache-Control: no-store;//请求和响应都不缓存
Cache-directive共有如下12种(其中请求中指令7种, 响应中指令8种):

Cache-directive 描述 请求/响应
public 资源将被客户端和代理服务器缓存 响应
private 资源仅被客户端缓存, 代理服务器不缓存 响应
no-store 请求和响应都不缓存 请求、响应
no-cache 相当于max-age:0,must-revalidate即资源被缓存, 但是缓存立刻过期, 同时下次访问时强制验证资源有效性 请求、响应
max-age 缓存资源, 但是在指定时间(单位为秒)后缓存过期 请求、响应
s-maxage 同上, 依赖public设置, 覆盖max-age, 且只在代理服务器上有效. 响应
max-stale 指定时间内, 即使缓存过时, 资源依然有效 请求
min-fresh 缓存的资源至少要保持指定时间的新鲜期 请求
must-revalidation / proxy-revalidation 如果缓存失效, 强制重新向服务器(或代理)发起验证(因为max-stale等字段可能改变缓存的失效时间) 响应
only-if-cached 仅仅返回已经缓存的资源, 不访问网络, 若无缓存则返回504 请求
no-transform 强制要求代理服务器不要对资源进行转换, 禁止代理服务器对 Content-Encoding, Content-Range, Content-Type字段的修改(因此代理的gzip压缩将不被允许) 请求、响应
4.4、Pragma

Pragma 是HTTP/1.0标准中定义的一个header属性,请求中包含Pragma的效果跟在头信息中定义Cache-Control: no-cache相同,但是HTTP的响应头不支持这个属性,所以它不能拿来完全替代HTTP/1.1中定义的Cache-control头。通常定义Pragma以向后兼容基于HTTP/1.0的客户端。

ps:更多缓存解释详情请看饥人谷:「面试题」简述浏览器缓存是如何控制的


参考:


结语:本文纯属个人学习总结,如有冒犯请发简信联系我修改。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容