HTTP报文学习
HTTP报文用于HTTP协议的信息交互,分为请求报文和响应报文。报文由首部和主体两部分组成,中间使用空行(CR+LF)分隔
1. 报文结构
- 报文由首部、空行和实体组成;
- 报文中首先是请求行或者状态行,然后是各种首部字段,再就是空行和实体;
- 首部包含请求和响应的各种条件和属性,主要分为请求首部、响应首部、通用首部、实体首部和其他,cookie就在未定义的其他首部中。
2. 报文信息
- 编码提升传送速率:
- 由于需要进行编码,会消耗更多的CPU资源;
- 报文主体和实体主题在编码后不一致,编码后实体主体发生变化;
- 对实体主体进行内容编码后,可以通过Content-Encoding查看编码类型;
- 实体主体编码后可以进行分块传输,客户端接收后进行解析,Transfer-Encoding:chunked。
- 可以发送多部分实体对象集合,通过首部Content-Type查看信息;
- 可以获取资源的内容范围,通过content-range首部;
- 服务端和客户端可以通过ACCEPT等首部进行协商,确定返回的内容。
3. 通用首部字段
- Cache-Control:控制缓存的行为
- 浏览器缓存会使用该字段;
- no-cache: 强制向原服务器再次验证;
- max-age: 必须,响应的最大值;
- Connection:逐跳首部、连接的管理
- 管理持久连接;
- 控制不再转发给代理的首部字段;
- Date:创建报文的日期时间
- Program:报文指令
- Trailer:报文末端的首部一览
- 报文实体后面存在的首部字段,分块传输使用;
- Transfer-Encoding:指定报文主体的传输编码方式
- HTTP/1.1中仅对分块传输有效;
- Upgrade:升级为其他协议
- Via:代理服务器的相关信息
- Warning:错误通知
4. 请求首部字段
- Accept:用户代理可处理的媒体类型
- text/html,application/json
- 可以使用q指定优先级,1为最大值,如text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8;
- Accept-Charset:优先的字符集
- Accept-Encoding:优先的内容编码
- compress、gzip等;
- Accept-Language:优先的语言(自然语言)
- zh-CN,zh;q=0.8,en;q=0.6,la;q=0.4;
- 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客户端程序的信息
- 传递浏览器种类;
5. 响应首部字段
- Accept-Ranges:是否接受字节范围请求
- Age:推算资源创建经过时间
- ETag:资源的匹配信息
- 每分资源都有对应的ETag值;
- Location:令客户端重定向至指定URI
- Proxy-Authenticate:代理服务器对客户端的认证信息
- Retry-After:对再次发起请求的时机要求
- Server:HTTP服务器的安装信息
- Vary:代理服务器缓存的管理信息
- WWW-Authenticate:服务器对客户端的认证信息
6. 实体首部字段
- Allow: 资源可支持的HTTP方法
- Content-Encoding: 实体主体使用的编码方式
- Content-Language: 实体主体的自然语言
- Content-Length: 实体主体的大小(单位:字节)
- Content-Location: 替换对应资源的URI
- Content-MD5: 实体主体的报文摘要
- Content-Range: 实体主体的位置范围
- Content-Type: 实体主体的媒体类型
- Expires: 实体主体过期的日期时间
- Last-Modified: 资源的最后修改日期时间
7. 其他首部字段
- 和cookie相关的首部:
- set-cookie:响应首部,管理使用的cookie,键值对;
- httponly: js无法获取cookie,防止跨站脚本攻击XSS;
- cookie:请求首部,服务器接收;
- X-Frame-Options:响应首部,可以控制网站内容在其他Web网站的Frame标签内的显示问题,防止点击劫持;
- X-XSS-Protection:XSS防护0/1。
HTTP报文学习的更多相关文章
- 关于HTTP请求报文和响应报文学习笔记
超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层的一种通信协议.它是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接 ...
- 实验:传输层:UDP协议 学习笔记
一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...
- VXLAN学习之路-结合VRF在Linux中实践VXLAN网络
一.概述 近期在在搞网络安全HCIE.CISP的认证的事,顺便将VXLAN技术再次系统的学习一下,学习过程中看到云原生实验室里的一篇文章,就是关于VXLAN在Linux系统中的实践,感觉文章写得很好, ...
- HTTP 总结
一.概念 特性 1. HTTP协议用于客户端和服务端之间的通信 2. 通过请求和响应的交互达成通信 : HTTP协议规定,请求从客户端发出,最后服务器端响应请求并返回,也就是说,肯定是从客户端开始建立 ...
- vxlan 协议
vxlan 协议原理简介 1. vxlan 简介 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网.它是一种 overlay 技术,通 ...
- VLAN和VXLAN的区别
VLAN ·概况 VLAN (Virtual Local Area Network)意为虚拟局域网,是在交换机实现过程中涉及到的概念,由802.1Q标准所定义.由于交换机是工作在链路层的网络设备,连接 ...
- OSPF中DR和BDR到底是谁先选举出来的?
在OSPF的DRBDR选举的过程中,DR的选举依靠的是hello报文,在two-way之后,交互hello报文完成DR/BDR的选举. 那么在每台路由器根据收到的所有hello报文,会构建自己接口的数 ...
- VXLAN 基础教程:在 Linux 上配置 VXLAN 网络
上篇文章结尾提到 Linux 是支持 VXLAN 的,我们可以使用 Linux 搭建基于 VXLAN 的 overlay 网络,以此来加深对 VXLAN 的理解,毕竟光说不练假把式. 1. 点对点的 ...
- linux 旁路掉协议栈的处理点
对于协议栈的发展,目前有三种处理趋势,一种是类似于使用dpdk的方式,然后将协议栈放到用户态来做,做得比较好的一般都是以bsd的协议栈为底子,可以参考的是腾讯开源的的方案,另外一种是,继续放在内核,但 ...
随机推荐
- 将.mat文件中的数据转换成图片
%% 如何将.mat文件中的数据转换成图片 clc;clear all; addpath F_data/MAT;load('D:\face.mat') for i=1:q img=uint8(re ...
- Servlet页面跳转的两种方式
一.页面跳转 1. 请求转发: (1) 使用requestDispatcher对象: 转发格式:request.getRequestDispatcher("path").forwa ...
- linux 下使用dd制作启动U盘 安装linux
1.找到U盘: sudo fdisk -l 2.卸载U盘:(这个不是必须,如果没有挂载u盘,可以省略) sudo umount /dev/sdb1 3.建立文件系统,格式化U盘: sudo mkfs. ...
- 工作流调度系统Azkaban的简介和使用
1 概述 1.1 为什么需要工作流调度系统 l 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 l 各任务单元之间存在时间 ...
- [BJOI2019]光线——递推
题目链接: [BJOI2019]光线 设$F_{i}$表示从第$1$面玻璃上面向下射入一单位光线,穿过前$i$面玻璃的透光率. 设$G_{i}$表示从第$i$面玻璃下面向上射入一单位光线,穿过前$i$ ...
- 浅谈 es6 箭头函数, reduce函数介绍
今天来谈一下箭头函数, es6的新特性 首先我们来看下箭头函数长什么样子, let result = (param1, param2) => param1+param2; 上述代码 按照以前书写 ...
- Linux命令行提交更新冲突
1.在harry目录下的hello文件第五行加一些内容 2.将修改后文件执行提交操作 提交成功,文件版本升为5 3.在sally目录下同样修改hello文件第五行 4.sally进行提交操作 发现提交 ...
- Jenkins修改显示语言为中文
1 安装插件 主界面 -> 系统管理 -> 插件管理 -> 可选插件 1.1 安装插件Locale plugin 1.2 安装插件Localization: Chinese(Simp ...
- 【Robot Framework 项目实战 02】使用脚本生成统一格式的RF关键字
背景 在微服务化的调用环境下,测试数据及接口依赖的维护是一个问题,因为依赖的接口和数据可能不在同一个服务下,而这相关的多个服务往往是不同人员来测试的. 因此为了节省沟通成本,避免关键字的重复冗余.所以 ...
- 第11组 Alpha冲刺(5/6)
第11组 Alpha冲刺(5/6) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11898559.html 作业博客 https://edu ...