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

来自Alex's wiki
跳转至: 导航搜索
6.2 HTTP首部字段
(保护“图解HTTP笔记”([编辑=仅允许管理员](无限期)[移动=仅允许管理员](无限期)))
 
(未显示同一用户的30个中间版本)
第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首部字段==
第16行: 第17行:
 
| Trailer || 报文未端的首部一览
 
| Trailer || 报文未端的首部一览
 
|-
 
|-
| Transfer-Encoding || 指定报文主体的传输编码方式<br/><font class=lightgray>Transfer-Encoding: chunked</font>
+
| Transfer-Encoding || 指定报文主体的传输编码方式<br/><font class=code>Transfer-Encoding: chunked</font>
 
|-
 
|-
 
| Upgrade || 升级为其它协议
 
| Upgrade || 升级为其它协议
第29行: 第30行:
 
! 表6-2:请求首部字段名 !! 说明
 
! 表6-2:请求首部字段名 !! 说明
 
|-
 
|-
| Accept || 用户代理可处理的媒体类型<br/><font class=lightgray>Accept: text/html,application/xhtml+xml,application/xml;1=0.9,*/*;q=0.8</font>
+
| 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=lightgray>Accept-Charset: iso-8859-5, unicode-1-1; 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=lightgray>Accept-Encoding: gzip, deflate</font>
+
| Accept-Encoding || 优先的内容编码<br/><font class=code>Accept-Encoding: gzip, deflate</font>
 
|-
 
|-
| Accept-Language || 优先的语言(自然语言)<br/><font class=lightgray>Accept-Language: zh-cn, zh;q=0,7, en-us,en;q=0.3</font>
+
| Accept-Language || 优先的语言(自然语言)<br/><font class=code>Accept-Language: zh-cn, zh;q=0,7, en-us,en;q=0.3</font>
 
|-
 
|-
 
| Authorization || Web认证信息
 
| Authorization || Web认证信息
第127行: 第128行:
 
==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 />
 
缓存请求指令:
 
缓存请求指令:
第180行: 第183行:
 
;s-maxage:功能与max-age相同,不同是本指令只适用于供多用户使用的公共缓存服务器(一般指代理)。
 
;s-maxage:功能与max-age相同,不同是本指令只适用于供多用户使用的公共缓存服务器(一般指代理)。
 
:另外,当使用s-maxage指令后,则直接忽略Expires首部字段及max-age指令的处理。
 
:另外,当使用s-maxage指令后,则直接忽略Expires首部字段及max-age指令的处理。
;max-age:在HTTP/1.1时优先级大于Expires 。<font class=lightgray>Cache-Control: max-age=604800</font>
+
;max-age:在HTTP/1.1时优先级大于Expires 。<font class=code>Cache-Control: max-age=604800</font>
 
[[文件:CacheControlMaxAge.jpeg|600px|缩略图|居中|max-age]]
 
[[文件:CacheControlMaxAge.jpeg|600px|缩略图|居中|max-age]]
 
;min-refresh:在原缓存时间的基础上减少多少有效时间。
 
;min-refresh:在原缓存时间的基础上减少多少有效时间。
 
;max-stale:在原缓存时间基础上增加多少时间。预即使过期也照常接收(只要处于max-stale指定的时间内)。
 
;max-stale:在原缓存时间基础上增加多少时间。预即使过期也照常接收(只要处于max-stale指定的时间内)。
 +
 
===6.3.2 Connection===
 
===6.3.2 Connection===
 
<big>作用一 控制不再转发给代理的首部字段:</big><br />
 
<big>作用一 控制不再转发给代理的首部字段:</big><br />
 
   
 
   
 
[[文件:ConnectionUpgrade.jpeg|600px|缩略图|居中|不再转发的首部字段名]]
 
[[文件:ConnectionUpgrade.jpeg|600px|缩略图|居中|不再转发的首部字段名]]
作用一 管理持久连接:
+
<big>作用二 管理持久连接:</big><br />
 
[[文件:ConnectionClose.jpeg|600px|缩略图|居中| Connection: close]]
 
[[文件:ConnectionClose.jpeg|600px|缩略图|居中| Connection: close]]
 
[[文件:ConnectionKeepalive.jpeg|600px|缩略图|居中|Connection: Keep-Alive]]
 
[[文件:ConnectionKeepalive.jpeg|600px|缩略图|居中|Connection: Keep-Alive]]
 +
 
===6.3.6 Transfer-Encoding===
 
===6.3.6 Transfer-Encoding===
 
可以用它来控制分块传输:
 
可以用它来控制分块传输:
第198行: 第203行:
 
==6.4 请求首部字段==
 
==6.4 请求首部字段==
 
===6.4.1 Accept===
 
===6.4.1 Accept===
例子:<font class=lightgray>Accept: text/html,application/xhtml+xml,application/xml;1=0.9,*/*;q=0.8</font><br />
+
例子:<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 ...
 
;文本文件:text/html,text/plain, text/css ...
第205行: 第210行:
 
;视频文件:video/mpeg, video/quicktime ...
 
;视频文件:video/mpeg, video/quicktime ...
 
;应用程序使用的二进制文件:application/octet-stream, application/zip ...
 
;应用程序使用的二进制文件: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 指的是公钥还是私钥哦?