HTTP报头:通用报头,请求报头,响应报头和实体报头
缓存控制优先级从高到低分别是Pragma -> Cache-Control -> Expires
- 报头
每一个报头都是由 [名称 + ":" + 空格 + 值 + ] 组成。有四种不同类型的报头:
- 通用报头:可用于请求,也可以用于响应,它是作为一个整体而不是特定的资源与事务相关联。
- 请求报头:允许客户端传递关于自身的信息和希望得到的响应格式。
- 响应报头:服务端关于传递自身信息的响应。
- 实体报头:定义被传输资源的信息,可以用于请求,也可以用于响应。
注意,每个报头后必须以<CR><LF>(即 \r\n)结尾,报头与主体之间以<CR><CL>分割。
- 通用报头
通用头包含请求和响应消息都支持的头域,但不能用于实体报头。对通用报头的扩展要求通讯双方都支持此扩展,若存在不支持的通用报头,一般会作为实体头域处理。
既可以出现在请求报头,也可以出现在响应报头中
table th:first-of-type {
width: 150px;
}
table th:nth-of-type(2) {
width: 150px;
}
| 报头名称 | 值 | 说明 |
|---|---|---|
| Cache-Control | 指定请求和响应遵循的缓存机制。 | |
| public | 指示所有的内容都将被缓存(客户端和代理服务都可缓存) | |
| private | 默认值,指示内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不能缓存) | |
| no-cache | 指示请求或响应消息不能缓存。 | |
| no-store | 指示所有的内容都不会被缓存到缓存或 Internet 临时文件中。 | |
| max-age | 指示缓存的内容将在多少秒后失效,仅在 HTTP/1.1 可用,与 Last-Modified 一起使用时,优先级更高。 | |
| must-revalidate | 若缓存失效,请求必须发生到服务器以进行重新验证。 | |
| Date | 表示消息产生的日期和时间。 | |
| Pragma | 唯一值为 no-cache,表示服务器必须返回一个刷新后的文档。其作用等价于 Cache-Control: no-cache。在 HTTP/1.0 版本中,只实现了 Pragma: no-cache,而 Cache-Control 是在 HTTP/1.1 引入的。 | |
| Connection | 允许发送指定连接的选项。 | |
| keep-alive | 客户端与服务器的连接不关闭,后续会再次使用这一条连接。 | |
| close | 表示一个请求完成后,客户端与服务器断开连接。 | |
| Transfer-Encoding | 标明报文主体的传输编码方式。 若是请求和响应的头信息中都要 Transfer-Encoding: chunked , 表明回应将由数量未定的数据快组成。在每个非空的数据块之前,会一个 16 进制的数值,表示这个块的长度。最后是一个大小为 0 的块,表示本次回应的数据发送完毕。 | |
| Upgrade | 升级为其他协议,允许服务器指定一种新的协议或新的协议版本,与响应编码 101(切换协议)配合使用。 | |
| Via | 代理服务器相关信息。 | |
| Referrer Policy | 共5种策略:no-referrer、no-referrer-when-downgrade(默认)、origin、origin-when-crossorigin、unsafe-url。详情:https://imququ.com/post/referrer-policy.html |
- 请求报头
请求报头允许客户端向服务端传输请求的附加信息以及客户端自身的信息。在 HTTP/1.1 协议中,所有的请求头,除 Host 外,都是可选的。
table th:first-of-type {
width: 150px;
}
table th:nth-of-type(2) {
width: 150px;
}
| 报头名称 | 值 | 说明 |
|---|---|---|
| Accept | 用于指定客户端接受哪些类型的信息。 | |
| Accept-Charset | 用于指定客户端接受的字符集。 | |
| Accept-Encoding | 用于指定客户端可接受的内容编码。如 gzip、deflate | |
| Accept-Language | 用于指定客户端可接受的自然语言。如 zh-cn、de | |
| Authorization | 用于证明客户端有权限查看某个资源。 | |
| Cookie | 用于将 Cookie 值发送给服务器。 | |
| Host | 用于指定被请求资源的主机和端口号。 | |
| If-Modified-Since | 请求时指定资源的最后修改时间,用于比较资源的更新时间,与 Last-Modified 一起配合 Cache-Control 使用。当资源过期时(Cache-Control 中 max-age 设置),发现资源有 Last-Modified 声明,则再次向服务器请求时带上 If-Modified-Since,表示请求时间。服务器收到请求后发现头有 If-Modified-Since ,则与被请求的资源进行最后修改时间进行对比。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(200);若最后修改时间较旧,说明资源没有修改,会响应 304,告知浏览器继续使用保存的 cache 。 | |
| If-None-Match | 请求时加上的资源 ETag 值,用于比较实体标识(ETag),与 ETag 一起配合 Cache-Control 使用。当资源过期时(Cache-Control 中 max-age 设置),发现资源有 ETag 声明,则再次向服务器请求带上 If-None-Match (ETag 值)。服务器收到请求后发现头 If-None-Match,则与被请求资源相应校验串进行对比,返回 200 或 304 。 | |
| Referer | 用于指定客户端是从哪个资源来访问服务器的,可用于防盗链。 | |
| User-Agent | 允许客户端将其操作系统、浏览器和其它属性告诉服务器。 |
- 响应报头
响应报头允许服务器传递不能放在状态行中的附加信息,以及关于服务器的信息和对 Request-URL 所标识的资源进行下一步访问的信息。
table th:first-of-type {
width: 150px;
}
table th:nth-of-type(2) {
width: 150px;
}
| 报头名称 | 值 | 说明 |
|---|---|---|
| ETag | 缓存相关的头,可用于实时更新。和 If-None-Match 配合使用。 ETag 主要作用是在文件后面添加一个唯一的参数,该参数由服务器生成,并随着文件的改变而改变。下次浏览器只需要重新获取 ETag 发送了变化的文件。 | |
| Location | 用于重定向一个新的位置。该响应状态码为 302(临时重定向),常用于在更换域名时。 | |
| Server | 与 User-Agent 相对应,包含了服务器用来处理请求的软件信息。 | |
| WWW-Authenticate | 包含在 401(为授权)响应信息中,当客户端收到 401 响应消息,并发送 Authorization 报头请求服务器对其进行验证时,服务器端响应报头就会包含该消息。 | |
| Vary | Accept-Encoding | 指定Vary: Accept-Encoding标头可告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题。 |
| X-Content-Type-Options | nosniff | 1.互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:”text/html”代表html文档,”image/png”是PNG图片,”text/css”是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。2.如果服务器发送响应头 “X-Content-Type-Options: nosniff”,则 script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME 类型混淆的攻击。 |
| X-Frame-Options | 给浏览器指示是否允许一个页面在 <frame>, <iframe> 或者 <object> 中展现。X-Frame-Options 有三个值:1.DENY,表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。2.SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。3.ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示。换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。 |
- 实体报头
实体报头定义了关于实体的元信息,实体信息一般由实体报头和实体组成。
table th:first-of-type {
width: 150px;
}
table th:nth-of-type(2) {
width: 150px;
}
| 报头名称 | 值 | 说明 |
|---|---|---|
| Content-Encoding | 指明数据的压缩方法。发送数据可以是任何格式,我们可以把数据压缩后再发送客户端请求时,Accept-Encoding 指明可以接受哪些压缩方法。 | |
| Content-Language | 描述资源所用的自然语言。 | |
| Content-Length | 指明响应的实体正文的长度。 对于 HTTP/1.1 引入的持久连接机制,一个 TCP 连接可以传送多个响应,此时要区分数据包是属于哪一个响应的。Content-Length 指明本次响应的数据长度,当到达指定的长度后,后面的字节就属于下一个响应了。 | |
| Content-Type | 指明发送给接收者的实体正文的媒体类型(MIME)。 客户端请求时,Accept 指明可以接受哪些类型。 | |
| Content-Disposition | 指明浏览器以下载的方式打开数据。 | |
| Last-Modified | 指明资源最后修改的时间(该文件在服务器端最后修改的时间)。 当 Last-Modified 与 ETag 一起使用时,服务器会优先验证 ETag。 | |
| Expires | 指明响应文档过期的日期和时间。当文档过期后,会重新从服务器获取,并更新缓存。 为了让代理服务器或浏览器在一段时间后更新缓存的页面,可通过 Expires 指定页面过期的时间。当设置为 0 时,表示不让浏览器缓存页面。Expires 等同与 Cache-Control: max-age ,但若同时存在,则会被后者覆盖。Expires 属于 HTTP/1.0 的产物,从 HTTP/1.1 开始,使用 Cache-Control: max-age= 代替。 |
HTTP报头:通用报头,请求报头,响应报头和实体报头的更多相关文章
- HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...
- Http 请求头 响应体 详解
Referrer Policy 是什么? 我们知道,在页面引入图片.JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求, 浏览器一般都会给这些请求头加上表示来源的 Referre ...
- http协议(二)请求和响应报文的构成
http协议用于客户端和服务器之间的通信,请求访问资源的一方称为客户端,而提供资源响应的一方称为服务器端. 下面就是客户端和服务端之间简单的通信过程 PS:请求必须从客户端建立通信,服务端没收到请求之 ...
- express-6 请求和响应对象(1)
URL的组成部分 协议: 协议确定如何传输请求.我们主要是处理http和https.其他常见的协议还有file和ftp. 主机名: 主机名标识服务器.运行在本地计算机(localhost)和本地网络的 ...
- HTTP请求与响应方式
HTTP请求格式 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: l 请求方法URI协议/版本 l 请求头(Request Hea ...
- 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析
[渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...
- python爬虫(二)_HTTP的请求和响应
HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...
- http协议基础(二)请求和响应报文的构成
http协议用于客户端和服务器之间的通信,请求访问资源的一方称为客户端,而提供资源响应的一方称为服务器端. 下面就是客户端和服务端之间简单的通信过程 PS:请求必须从客户端建立通信,服务端没收到请求之 ...
- HTTP协议--请求与响应
1.简介 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990 年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW 中使用的是HT ...
随机推荐
- POJ-2415 Hike on a Graph (BFS)
Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...
- 基础最短路(模板 spfa)
Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还 ...
- 如何用xmlspy将xml文档生成xsd文件
所以我们有必要知道如何通过xmlspy这个非常方便的工具进行xml的转换工作.点击“File”-“New”系统会弹出“create new document”的窗口,此时选择“xml XML docu ...
- iOS UI-集合视图(UICollectionView)
BowenCollectionViewCell.xib #import <UIKit/UIKit.h> @interface BowenCollectionViewCell : UICol ...
- Python gui编程pyQt5安装步骤t
Python gui编程pyQt5安装步骤 pip install PyQt5 Pip3 install PyQt5 https://riverbankco ...
- 对va_list; va_start ; va_end ;vsprintf理解(转)
以下为转载内容: int printf(const char* fmt, ...) { va_list args; int i; //1.将变参转化为字符串 va_start(args,fmt); v ...
- httpclient cookie相关介绍
http状态管理 cookie是HTTP代理和目标服务器可以交流保持回话的状态信息的令牌或短包. httpclient使用Cookie接口来代表抽象的cookie令牌,在它的简单形式中http的coo ...
- Transfer files Using sshpass
#! /bin/bash user=root password=12345678 remote_ip=192.168.3.140 remote_dir=/usr/bin/ local_file_dir ...
- javascript开发HTML5游戏--斗地主(单机模式part3)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- bzoj1626
题解: 简单最小生成树 x,y都要double 我也不知道为什么 代码: #include<bits/stdc++.h> using namespace std; ; int n,m,f[ ...