“图解HTTP笔记”的版本间的差异

来自Alex's wiki
跳转至: 导航搜索
6.3 HTTP1.1通用首部字段
(保护“图解HTTP笔记”([编辑=仅允许管理员](无限期)[移动=仅允许管理员](无限期)))
 
(未显示同一用户的65个中间版本)
第1行: 第1行:
 +
[http://mp.weixin.qq.com/s?__biz=MzI3MTI2NzkxMA==&mid=2247484671&idx=1&sn=ebc45465d09734387f04bbabda8b7882&chksm=eac525d6ddb2acc04c23d400019c1956283d2f27bb29cedc5bffd28d7359a08c702a18bae58b&mpshare=1&scene=1&srcid=1111kc9vjBEtdlzxVbrxXQYM#rd 详解HTTP响应头与状态码]
 
=第六章 HTTP首部=
 
=第六章 HTTP首部=
 
==6.2 HTTP首部字段==
 
==6.2 HTTP首部字段==
[[文件:HttpShowBuList1.jpeg|550px|居中|通用首部字段]]
+
[[文件:HttpShowBuList2.jpeg|550px|居中|请求首部字段]]
+
{| class="wikitable table-enhance"
[[文件:HttpShowBuList3.jpeg|550px|居中|响应首部字段]]
+
|-
 +
! 表6-1:通用首部字段名!!  说明
 +
|-
 +
| Cache-Control || 控制缓存行为
 +
|-
 +
| Connection || 逐跳首部、连接管理
 +
|-
 +
| Date || 创建报文的日期时间
 +
|-
 +
| Pragma || 报文指令
 +
|-
 +
| Trailer || 报文未端的首部一览
 +
|-
 +
| Transfer-Encoding || 指定报文主体的传输编码方式<br/><font class=code>Transfer-Encoding: chunked</font>
 +
|-
 +
| Upgrade || 升级为其它协议
 +
|-
 +
| Via || 代理服务器的相关信息
 +
|-
 +
| Warning || 错误通知
 +
|}
  
 +
{| class="wikitable table-enhance"
 +
|-
 +
! 表6-2:请求首部字段名 !! 说明
 +
|-
 +
| Accept || 用户代理可处理的媒体类型<br/><font class=code>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</font>
 +
|-
 +
| Accept-Charset || 优先的字符集<br/><font class=code>Accept-Charset: iso-8859-5, unicode-1-1; q=0.8</font>
 +
|-
 +
| Accept-Encoding || 优先的内容编码<br/><font class=code>Accept-Encoding: gzip, deflate</font>
 +
|-
 +
| Accept-Language || 优先的语言(自然语言)<br/><font class=code>Accept-Language: zh-cn, zh;q=0,7, en-us,en;q=0.3</font>
 +
|-
 +
| Authorization || Web认证信息
 +
|-
 +
| Expect || 期待服务器的特别行为
 +
|-
 +
| From || 用户的电子邮箱地址
 +
|-
 +
| Host || 请求资源所在的服务器
 +
|-
 +
| If-Match || 比较实体标记(ETag)
 +
|-
 +
| If-Modified-Since || 比较资源的更新时间
 +
|-
 +
| If-None-Match || 比较实体标记(与If-Match相反)
 +
|-
 +
| If-Range || 资源未更新时发送实体Byte的范围请求
 +
|-
 +
| If-Unmodified-Since || 比较资源的更新时间(与If-Modified-Since相反)
 +
|-
 +
| Max-Forwards || 最大传输跳数
 +
|-
 +
| Proxy-Authorization || 代理服务器要求客户端的认证信息
 +
|-
 +
| Range || 实体字节范围请求
 +
|-
 +
| Referer || 对请求中URI的原始获取方
 +
|-
 +
| TE || 传输编码的优先级
 +
|-
 +
| User-Agent || HTTP客户端程序信息
 +
|}
 +
 +
 +
{| class="wikitable table-enhance"
 +
|-
 +
! 表6-3:响应首部字段名称 !! 说明
 +
|-
 +
| Accept-Ranges || 是否接受字节范围请求
 +
|-
 +
| Age || 推算资源创建经过时间
 +
|-
 +
| ETag || 资源的匹配信息
 +
|-
 +
| Location || 令客户端重定向至指定URI
 +
|-
 +
| Proxy-Authenticate || 代理服务器对客户端的认证信息
 +
|-
 +
| Retry-After || 对再次发起请求的时机要求
 +
|-
 +
| Server || HTTP服务器的安装信息
 +
|-
 +
| Vary || 代理服务器缓存的管理信息
 +
|-
 +
| WWW-Authenticate || 服务器对客户端的认证信息
 +
|}
 +
 +
{| class="wikitable table-enhance"
 +
|-
 +
! 表6-4:实体首部字段名 !! 说明
 +
|-
 +
| Allow || 资源可支持的HTTP方法
 +
|-
 +
| Content-Encoding || 实体主体适用的编码方式
 +
|-
 +
| Content-Language || 实体主体的自然语言
 +
|-
 +
| Content-Length || 实体主体的大小(单位:字节)
 +
|-
 +
| Content-Location || 替代对应资源的URI
 +
|-
 +
| Content-MD5 || 实体主体的报文摘要
 +
|-
 +
| Content-Range || 实体主体的位置范围
 +
|-
 +
| Content-Type || 实体主体的媒体类型
 +
|-
 +
| Expires || 实体主体过期的日期时间
 +
|-
 +
| Last-Modified || 资源最后修改的日期时间
 +
|}
 
逐跳字段(除了以下这8个首部字段外,其它都属于端到端首部):
 
逐跳字段(除了以下这8个首部字段外,其它都属于端到端首部):
 
*Connection
 
*Connection
第13行: 第125行:
 
*Transfer-Encoding
 
*Transfer-Encoding
 
*Upgrade
 
*Upgrade
 +
 
==6.3 HTTP1.1通用首部字段==
 
==6.3 HTTP1.1通用首部字段==
 
===6.3.1 Cache-Control指令===
 
===6.3.1 Cache-Control指令===
 +
[http://www.jb51.net/article/34017.htm Cache-control使用Cache-control:private学习笔记]<br />
 +
 
<big>指令一览</big><br />
 
<big>指令一览</big><br />
 
缓存请求指令:
 
缓存请求指令:
第23行: 第138行:
 
| no-cache || 无 || 强制向源服务器再次验证
 
| no-cache || 无 || 强制向源服务器再次验证
 
|-
 
|-
| no-store || 无� || 不缓存请求或响应的任何内容
+
| no-store || || 不缓存请求或响应的任何内容
 
|-
 
|-
 
| max-age=[秒] || 必须 || 响应的最大Age值
 
| max-age=[秒] || 必须 || 响应的最大Age值
第31行: 第146行:
 
| min-refresh=[秒] || 必须 || 期望在指定的时间内仍然有效
 
| min-refresh=[秒] || 必须 || 期望在指定的时间内仍然有效
 
|-
 
|-
| no-transform || 无� || 代理不可更改媒体类型
+
| no-transform || || 代理不可更改媒体类型
 
|-
 
|-
 
| only-if-cached || 无 || 从缓存获取资源
 
| only-if-cached || 无 || 从缓存获取资源
第37行: 第152行:
 
| cache-extention || - || 新指令标记(token)
 
| cache-extention || - || 新指令标记(token)
 
|}
 
|}
 +
缓存响应指令:
 +
{| class="wikitable"
 +
|-
 +
! 指令 !! 参数 !! 说明
 +
|-
 +
| public || 无 || 可向任意方提供响应的缓存
 +
|-
 +
| private || 可省略 || 仅向特定用户返回响应
 +
|-
 +
| no-cache || 可省略 || 缓存前必须先确认其有效性
 +
|-
 +
| no-store || 无 || 不缓存请求或响应的任何内容
 +
|-
 +
| no-transform || 无 || 代理不可更改媒体类型
 +
|-
 +
| must-revalidate || 无 || 可缓存但必须再向源服务器进行验证
 +
|-
 +
| proxy-revalidate || 无 || 要求中间缓存服务器对缓存的响应有效性再进行确认
 +
|-
 +
| max-age=[秒] || 必须 || 响应的最大Age值
 +
|-
 +
| s-maxage=[秒] || 必须 || 公共缓存服务器响应的最大Age值
 +
|-
 +
| cache-extension || - || 新指令标记(token)
 +
|}
 +
;no-cache指令
 +
:事实上:no-cahce代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源。
 +
:no-store才是真正的不缓存资源。
 +
[[文件:NoCache.jpeg|600px|缩略图|居中|no-cache]]
 +
;s-maxage:功能与max-age相同,不同是本指令只适用于供多用户使用的公共缓存服务器(一般指代理)。
 +
:另外,当使用s-maxage指令后,则直接忽略Expires首部字段及max-age指令的处理。
 +
;max-age:在HTTP/1.1时优先级大于Expires 。<font class=code>Cache-Control: max-age=604800</font>
 +
[[文件:CacheControlMaxAge.jpeg|600px|缩略图|居中|max-age]]
 +
;min-refresh:在原缓存时间的基础上减少多少有效时间。
 +
;max-stale:在原缓存时间基础上增加多少时间。预即使过期也照常接收(只要处于max-stale指定的时间内)。
 +
 +
===6.3.2 Connection===
 +
<big>作用一 控制不再转发给代理的首部字段:</big><br />
 +
 +
[[文件:ConnectionUpgrade.jpeg|600px|缩略图|居中|不再转发的首部字段名]]
 +
<big>作用二 管理持久连接:</big><br />
 +
[[文件:ConnectionClose.jpeg|600px|缩略图|居中| Connection: close]]
 +
[[文件:ConnectionKeepalive.jpeg|600px|缩略图|居中|Connection: Keep-Alive]]
 +
 +
===6.3.6 Transfer-Encoding===
 +
可以用它来控制分块传输:
 +
 +
[[文件:Transfer-EncodingChunked.jpeg|600px|缩略图|居中|Transfer-Encoding: chunked]]
 +
===6.3.8 Via===
 +
==6.4 请求首部字段==
 +
===6.4.1 Accept===
 +
例子:<font class=code>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</font><br />
 +
下面是媒体类型的例子:
 +
;文本文件:text/html,text/plain, text/css ...
 +
:application/xhtml+xml,application/xml ...
 +
;图片文件:image/jpeg, image/gif, image/png ...
 +
;视频文件:video/mpeg, video/quicktime ...
 +
;应用程序使用的二进制文件:application/octet-stream, application/zip ...
 +
===6.4.5 Authorization===
 +
[[文件:AuthorizationDemo.jpeg|600px|缩略图|居中|Authorization示例]]
 +
 +
==6.5响应首部字段==
 +
===6.5.8 Vary===
 +
[https://imququ.com/post/vary-header-in-http.html HTTP 协议中 Vary 的一些研究]
 +
==6.7 为Cookie服务的首部字段==
 +
表6-8为Cookie服务的首部字段
 +
{| class="wikitable table-enhance"
 +
|-
 +
! 首部字段名 !! 说明 !! 首部类型
 +
|-
 +
| Set-Cookie || 开始状态管理所使用的Cookie信息 || 响应首部字段
 +
|-
 +
| Cookie || 服务器接收到的Cookie信息 || 请求首部字段
 +
|}
 +
===Set-Cookie===
 +
<font class=code>Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path=/; domain=.hackr.jp;</font><br />
 +
 +
表6-9:Set-Cookie字段的属性
 +
{| class="wikitable"
 +
|-
 +
! 属性 !! 说明
 +
|-
 +
| NAME=VALUE || 赋予Cookie的名字和其值(必须项)
 +
|-
 +
| expires=DATE || Cookie的有效期(若不明确指定则默认为浏览器关闭前为止)
 +
|-
 +
| path=PATH || 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)<br/><font class=bg-warning>如果指定了则采用未尾匹配原则</font>
 +
|-
 +
| domain=域名 || 作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名)
 +
|-
 +
| Secure || 仅在HTTPS安全通信时才会发送Cookie
 +
|-
 +
| HttpOnly || 加以限制,使Cookie不能被JavaScript访问。主要是方XSS攻击。<br/><font class=code>Set-Cookie: name=value; HttpOnly</font>
 +
|}
 +
 +
===Cookie===
 +
<font class=code>Cookie: status=enable</font>
 +
==6.8 其他首部字段==
 +
{| class="wikitable table-enhance"
 +
|-
 +
! 首部字段名 !! 说明 !! 首部类型
 +
|-
 +
| X-Frame-Options || 用于控制网站内容在其他Web网站的Frame标签内的显示问题。主要是为了防点击劫持。<br/><font class=code>X-Frame-Options: DENY</font> DENY:拒绝  SAMEORIGIN:仅同源域名下的页面 || 响应首部字段
 +
|-
 +
| X-XSS-Protection || XSS防护机制开关,取值为0或1。<br/> <font class=code>X-XSS-Protection: 1</font> || 响应首部字段
 +
|-
 +
| DNT || Do Not Track,取值为0或1。<br/> <font class=code> DNT: 1</font> || 请求首部字段
 +
|-
 +
| P3P ||  The Platform for Privacy Preferences,在线隐私偏好平台。<br/>可以让Web网站上的个人隐私变成一种仅供程序可以理解的形式<br/> <font class=code> P3P: CP="CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa"</font> || 响应首部字段
 +
|}
 +
 +
=第7章 确保Web安全的HTTPS=
 +
[https://www.v2ex.com/t/154792 在 nginx 配置 https 的时候, ssl_certificate_key 指的是公钥还是私钥哦?]<br />

2017年5月27日 (六) 03:25的最后版本

详解HTTP响应头与状态码

第六章 HTTP首部

6.2 HTTP首部字段

表6-1:通用首部字段名 说明
Cache-Control 控制缓存行为
Connection 逐跳首部、连接管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文未端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Transfer-Encoding: chunked
Upgrade 升级为其它协议
Via 代理服务器的相关信息
Warning 错误通知
表6-2:请求首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset 优先的字符集
Accept-Charset: iso-8859-5, unicode-1-1; q=0.8
Accept-Encoding 优先的内容编码
Accept-Encoding: gzip, deflate
Accept-Language 优先的语言(自然语言)
Accept-Language: zh-cn, zh;q=0,7, en-us,en;q=0.3
Authorization Web认证信息
Expect 期待服务器的特别行为
From 用户的电子邮箱地址
Host 请求资源所在的服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与If-Match相反)
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体字节范围请求
Referer 对请求中URI的原始获取方
TE 传输编码的优先级
User-Agent HTTP客户端程序信息


表6-3:响应首部字段名称 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
表6-4:实体首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源最后修改的日期时间

逐跳字段(除了以下这8个首部字段外,其它都属于端到端首部):

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

6.3 HTTP1.1通用首部字段

6.3.1 Cache-Control指令

Cache-control使用Cache-control:private学习笔记

指令一览
缓存请求指令:

指令 参数 说明
no-cache 强制向源服务器再次验证
no-store 不缓存请求或响应的任何内容
max-age=[秒] 必须 响应的最大Age值
max-stale(=[秒]) 可省略 接收已过期的响应
min-refresh=[秒] 必须 期望在指定的时间内仍然有效
no-transform 代理不可更改媒体类型
only-if-cached 从缓存获取资源
cache-extention - 新指令标记(token)

缓存响应指令:

指令 参数 说明
public 可向任意方提供响应的缓存
private 可省略 仅向特定用户返回响应
no-cache 可省略 缓存前必须先确认其有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
must-revalidate 可缓存但必须再向源服务器进行验证
proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
max-age=[秒] 必须 响应的最大Age值
s-maxage=[秒] 必须 公共缓存服务器响应的最大Age值
cache-extension - 新指令标记(token)
no-cache指令
事实上:no-cahce代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源。
no-store才是真正的不缓存资源。
no-cache
s-maxage
功能与max-age相同,不同是本指令只适用于供多用户使用的公共缓存服务器(一般指代理)。
另外,当使用s-maxage指令后,则直接忽略Expires首部字段及max-age指令的处理。
max-age
在HTTP/1.1时优先级大于Expires 。Cache-Control: max-age=604800
max-age
min-refresh
在原缓存时间的基础上减少多少有效时间。
max-stale
在原缓存时间基础上增加多少时间。预即使过期也照常接收(只要处于max-stale指定的时间内)。

6.3.2 Connection

作用一 控制不再转发给代理的首部字段:

不再转发的首部字段名

作用二 管理持久连接:

Connection: close
Connection: Keep-Alive

6.3.6 Transfer-Encoding

可以用它来控制分块传输:

Transfer-Encoding: chunked

6.3.8 Via

6.4 请求首部字段

6.4.1 Accept

例子:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
下面是媒体类型的例子:

文本文件
text/html,text/plain, text/css ...
application/xhtml+xml,application/xml ...
图片文件
image/jpeg, image/gif, image/png ...
视频文件
video/mpeg, video/quicktime ...
应用程序使用的二进制文件
application/octet-stream, application/zip ...

6.4.5 Authorization

Authorization示例

6.5响应首部字段

6.5.8 Vary

HTTP 协议中 Vary 的一些研究

6.7 为Cookie服务的首部字段

表6-8为Cookie服务的首部字段

首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段

Set-Cookie

Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path=/; domain=.hackr.jp;

表6-9:Set-Cookie字段的属性

属性 说明
NAME=VALUE 赋予Cookie的名字和其值(必须项)
expires=DATE Cookie的有效期(若不明确指定则默认为浏览器关闭前为止)
path=PATH 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)
如果指定了则采用未尾匹配原则
domain=域名 作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名)
Secure 仅在HTTPS安全通信时才会发送Cookie
HttpOnly 加以限制,使Cookie不能被JavaScript访问。主要是方XSS攻击。
Set-Cookie: name=value; HttpOnly

Cookie

Cookie: status=enable

6.8 其他首部字段

首部字段名 说明 首部类型
X-Frame-Options 用于控制网站内容在其他Web网站的Frame标签内的显示问题。主要是为了防点击劫持。
X-Frame-Options: DENY DENY:拒绝 SAMEORIGIN:仅同源域名下的页面
响应首部字段
X-XSS-Protection XSS防护机制开关,取值为0或1。
X-XSS-Protection: 1
响应首部字段
DNT Do Not Track,取值为0或1。
DNT: 1
请求首部字段
P3P The Platform for Privacy Preferences,在线隐私偏好平台。
可以让Web网站上的个人隐私变成一种仅供程序可以理解的形式
P3P: CP="CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa"
响应首部字段

第7章 确保Web安全的HTTPS

在 nginx 配置 https 的时候, ssl_certificate_key 指的是公钥还是私钥哦?