- 本章知识点很多,不仅仅是HTTP首部字段的罗列,涉及很多HTTP的核心知识;
- 通用首部字段:Cache-Control(代理服务器缓存控制)、Connection(控制连接)、Trailer(分块传输)、Pragma(历史遗留缓存字段)、Via(通信路径)……
- 请求首部字段:Accept系列、Host、Authorization、Referer、If-Match、If-Range、User-Agent……
- 响应首部字段:Etag、Location、Retry-After、WWW-Authenticate……
- 实体首部字段:Content系列(Content-Type、Content-Range……)、Allow、
- Cookie、Cookie首部字段:
- HttpOnly放跨站脚本攻击XSS;
其他首部字段:X-Frame-Options(iframe相关)、安全相关(X-XXS-Protection、DNT、P3P)。
疑问:
http请求中最常见的的Content-type代表什么?
- 答:代表报文主体的对象类型。
- 前端更包后的浏览器刷新问题能否通过设置http首部字段cache-control解决?
- 答:应该不能,更包后的旧资源问题是浏览器是使用了本地临时文件,而首部字段cache-control是和缓存服务器息息相关的。问题的本质在于“没有请求”,而不是请求到了旧文件。
- Authenticate与Authorization的区别是什么?
- Authenticate系列为响应首部字段,由服务器发出,记载了证书认证信息。
- Authorization系列为请求首部字段,由客户端发出,记载了证书信息。
- Auth认证字段系列加不加proxy前缀的区别是什么?
- 加proxy-前缀代表了代理服务器。
Set-Cookie的HttpOnly字段不是为了XSS诞生的?那是为了什么?
4种首部字段
- 通用首部字段:请求/响应报文均会使用的首部字段。
- 请求首部字段
- 响应首部字段
- 实体首部字段
- 补充资源内容的更新时间等与实体相关的信息。
- Content-type就在这个角落里。
首部字段很多,笔记只记录常用字段和特殊字段,其余用时再翻书查看
HTTP/1.1通用首部字段
Cache-Control:操作缓存的工作机制。
- 缓存请求指令、缓存响应指令【详见书p.86】
-
Connection:管理连接
控制不再转发给代理的首部字段
管理持久连接
Trailer:记录在报文主体后的首部字段,常用于HTTP/1.1分块传输编码。
- Pragma:历史遗留字段,仅作为HTTP/1.0的向后兼容,用于规范缓存。
-
请求首部字段
用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等。
Accep:客户端可以希望得到的资源格式
Accept-Charset:页面的字符解析模式
-
Host:用于区分虚拟主机
-
Authorization:认证相关
用来告知服务器用户代理的认证信息(证书值)
接收到401状态码后,通常会把Authorization字段加入请求
If-Match:条件请求。
只有当If-Match的值与Etag(资源标识符)相等时,服务器才会接收请求。
其他详见书本。
Accept-Encodeing:用来告知服务器客户端支持的报文主体编码方式。
- Accept-Language:用来告知支持的语言。
- Expect:客户端期望服务端能做到的事
- 服务端做不到时会返回417 Expectation Failed状态码
- From:用户代理的电子邮件地址。
- If-Modified-Since:资源于XXX后发生了变更则服务器接收请求。
- If-Unmodified-Since:与上相反。
- If-None-Match:与If-Match相反。
- If-Range
- 值与Etag或时间匹配则作为条件请求返回资源。
- 不匹配则返回所有资源。
- Rerferer:用于告知请求的发起者
- P.S. Referer的正确拼写是Referrer,不知为何大家一直沿用了错误拼写哈哈哈
- User-Agent:用于传达浏览器的种类。
- Max-Forwards:请求可被转发的最大次数。
- 通过Trace或Option方法发送请求时使用。
- 到达最大转发次数时则直接返回响应。
Proxy-Authorization:接收到代理服务器的质询时,返回的认证信息
响应首部字段
用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等 信息。
Etag:资源标识
有点像资源的id,资源更新时随之更新
- 资源被缓存时就会被分配Etag
强弱Etag
该字段通常会配合3xx状态码
几乎所有浏览器在接收包含Location的响应后都会强制重定向。
Retry-After:多久后再次请求
-
WWW-Authenticate
用于HTTP访问认证
-
其他详见书本。
Accept-Range:服务器是否能接受范围请求
- Age:服务器在多久前创建了响应
- Proxy-Authenticate:认证信息相关。
- Server:记载服务器HTTP服务信息
-
实体首部字段
Allow
用于通知客户端服务端支持的所有HTTP方法。
Content-Location
- 报文主体返回资源对应的URI
- 与Location不同
-
Content-MD5
一种验证内容准确性的算法
-
Content-Type
要丝撒,最常见的字段居然在这种角落
-
其他
Content-Encoding:服务器对内容主题的编码格式。
- Content-Language:告知客户端实体使用的语言。
- Content-Length:告知客户端实体大小。
- Content-Range:针对范围请求,记录服务器返回的实体内容范围和大小。
- Expires:资源缓存时限。
- 当字段Cache-Control中包含max-age时,max-age优先。
-
为Cookie服务的首部字段
关于cookie
- 工作机制:用户识别、状态管理
- web网站会把数据临时写入用户计算机内
- 调用cookie时会校验cookie的有效期、发送方的域、路径、协议等信息
Set-Cookie
响应首部字段
特别注意HttpOnly属性
- 使用HttpOnly属性后,就无法使用javascript的document.cookie获取cookie了
- 因此就无法在跨站脚本攻击XSS中利用javascript劫持cookie了
-
Cookie
其他首部字段
X-Frame-Options【132】
- 响应首部字段
- 用于控制网站内容在其他Web网站的Frame标签内的显示问题。
- 主要用于防止点击劫持攻击。
- X-XXS-Protection
- 响应首部字段
- 针对跨站脚本攻击(XXS)的一种对策
- 用于控制浏览器XXS防护机制的开关。(为啥要开关啊,一直开着不香么)
- DNT(Do Not Track)
- 请求首部字段
- 拒绝个人信息被收集
- P3P
- 响应首部字段
- 用于保护用户隐私