Header解析
不管是作为后端还是前端开发人员,对于web请求的过程和参数都是需要了解的。
下面是对一次简单的http请求的header分析,作为自己的一个总结,也希望对大家有所帮助。
以Chrome为例:

我们对header的参数挨个分析
General
- Request URL: http://localhost:88/ 这里需要了解的是URI的结构,URI和URL详细请参考这里
需要注意的地方:锚点(永远不会发到服务器端)
URI和URL的区别:URL是URI最常见的一种形式,URL的协议(http/https/ssh/ftp/wss/mailto) - Request Method: GET
请求方法除了常见的GET,POST,PUT,DELETE,还包括如下:
HEAD:请求获取由Request-URI所标识的资源的响应消息报头
CONNECT:保留
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods
- Status Code: 200 OK
状态码需要了解的大致如下:
1xx:服务器收到信息,等待请求者继续(100:contine,101:协议切换)
2xx:接受并操作成功(200,201:Created,202:Accepted-可能交给其它进程处理,203 Non-Authoritative Information,204:No Content,
205:Reset Content,206:Partial Content)
3**:重定向(300 Multiple Choice,301 Moved Permanently,302 Found,303 See Other,304 Not Modified,305 Use Proxy,
306 unused,307 Temporary Redirect,308 Permanent Redirect)
4xx:客户端错误(400 Bad Request-语义有错或参数错误,401 Unauthorized,402 Payment Required-备用,403 Forbidden-类似权限禁止,404 Not Found,
405 Method Not Allowed,406 Not Acceptable,407 Proxy Authentication Required,408 Request Timeout,409 Conflict,410 Gone,
411 Length Required,412 Precondition Failed,413 Payload Too Large,414 URI Too Long,415 Unsupported Media Type,
416 Requested Range Not Satisfiable,417 Expectation Failed,418 I'm a teapot-好玩,421 Misdirected Request,
422 Unprocessable Entity (WebDAV),423 Locked (WebDAV),424 Failed Dependency (WebDAV),425 Too Early,
426 Upgrade Required,428 Precondition Required,429 Too Many Requests,431 Request Header Fields Too Large,
451 Unavailable For Legal Reasons)对于nginx自定义的状态码(499:客户端断开连接,大部分情况是服务器响应超时导致)
5xx:服务器错误(500 Internal Server Error,501 Not Implemented,502 Bad Gateway,503 Service Unavailable,504 Gateway Timeout,
505 HTTP Version Not Supported,506 Variant Also Negotiates,507 Insufficient Storage,508 Loop Detected (WebDAV),
510 Not Extended,511 Network Authentication Required)
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
- Remote Address: [::1]:88 请求地址(此处的::1是IPv6本机地址,88为端口号)
- Referrer Policy: no-referrer-when-downgrade (用于过滤referrer)
no-referrer
整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。
no-referrer-when-downgrade (默认值)
在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)。
origin
在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。
origin-when-cross-origin
对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。
same-origin
对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。
strict-origin
在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。
strict-origin-when-cross-origin
对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。
unsafe-url
无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。
接下来是Response Header
- Accept-Ranges: bytes (主要用于表示接收文件的大小单位,比如为了断点续传)
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Ranges - Cache-Control: no-cache (注意这个缓存控制是分request和response的)
no-cache:强制确认缓存,也就是说向服务器确实是否有缓存(使用服务器端缓存则304)
no-store:禁止进行缓存
private:私有(同一用户)
public:共有
max-age:缓存过期机制(秒数)- 如果没有此参数则会检查expires属性,如果expires也没有,则检查last modified
must-revalidate:使用陈旧资源时必须向服务器验证(缓存驱逐了解下)
* 关于缓存,非常重要,详情可参考这里 - Connection: keep-alive
close: HTTP1.0默认
keep-alive: HTTP1.1默认,持久连接 (对于keep-alive的信息,在服务器设置max和timeout,分别标示最大请求数,超时时间)
* 所谓长连接是指TCP连接会保持一定时间不关闭 - Content-Length: 147 消息主体大小 (byte)
- Content-Type: text/html
结构:type/subtype;parameter=value,例如:text/plain;charset=UTF-8
分为两种:Discrete types和Multipart types
比较重要的类型如下:
application/octet-stream:默认二进制文件(未知),一般用作下载文件(和Content-Disposition:attachment一起用)
text/plain,text/css,text/html,text/javascript
multipart/form-data详情参考
- Date: Tue, 30 Apr 2019 08:33:21 GMT (响应时间,也就是报文创建的时间,注意是GMT格林威治时间)
- ETag: "5cc692d4-93" (资源版本号,用于后台校验资源是否变化)
- Expires: Tue, 30 Apr 2019 08:33:20 GMT (过期时间,同样是GMT时间)
- Last-Modified: Mon, 29 Apr 2019 05:59:48 GMT (资源最后更新时间,精确度比ETag低,备用验证资源是否过期的机制)
- Server: nginx/1.14.2 (处理请求的软件及其版本)
接下来是Request Header
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
告知服务器客户端可以处理的类型
<MIME_type>/<MIME_subtype> 单一精确的 MIME 类型, 例如text/html.
<MIME_type>/* 一类 MIME 类型, 但是没有指明子类。 image/* 可以用来指代 image/png, image/svg, image/gif 以及任何其他的图片类型。
*/* 任意类型的 MIME 类型
;q= (q因子权重)
值代表优先顺序,用相对质量价值表示,又称作权重。
对应Response的Content-Type Accept-Encoding: gzip, deflate, br (编码格式,一般是压缩类型,对应Response的Content-Encoding。用identity可以禁止压缩)
- Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
客户端可理解的自然语言和优先选择的区域
zh-CN是区域,zh是语言,;q是权重 - Cache-Control: no-cache
基本和Response中的Cache-Control对应
如下指定可禁止缓存:Cache-Control: no-cache, no-store, must-revalidate - Connection: keep-alive
- Host: localhost:88
- Pragma: no-cache (为了兼容HTTP1.0,等同Cache-Control:no-cache)
- Upgrade-Insecure-Requests: 1 (表示客户端优先选择加密及带有身份验证的响应,并且它可以成功处理)
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号
web浏览器的格式一般如下:
Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>
详情参考
Header解析的更多相关文章
- [转]netty对http协议解析原理
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- Nginx Parsing HTTP Package、header/post/files/args Sourcecode Analysis
catalog . Nginx源码结构 . HTTP Request Header解析流程 . HTTP Request Body解析流程 1. Nginx源码结构 . core:Nginx的核心源代 ...
- HtmlAgilityPack --解析Html源码
最近项目需要从网络上抓取一下数据解析Html源码,奈何正则表达式难写,于是网上搜索找到了“ HtmlAgilityPack”类库,敏捷开发,果然效率非同寻常. 在此做笔记,写下心得,顺便给自己总结一下 ...
- 解析JSON、扩展Fiddler
解析JSON.扩展Fiddler 按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fidd ...
- netty对http协议解析原理解析
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- Linux c使用gumbo库解析页面表单信息(三)
前面说了那么多,终于说到如何解析html表单信息了. 什么是表单信息呢,这里我们先要有一些概念: 如上图,这是一个QQ注册页面,注册页面当中需要我们填的空其实就是一个表单信息. 具体到html代码当中 ...
- RTP协议全解析(H264码流和PS流)
转自:http://blog.csdn.net/chen495810242/article/details/39207305 写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个 ...
- 动态加载与插件系统的初步实现(四):解析JSON、扩展Fiddler
按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fiddler扩展搬上来吧. Fiddle ...
- 从零开始一个http服务器(二)-请求request解析
从零开始一个http服务器 (二) 代码地址 : https://github.com/flamedancer/cserver git checkout step2 解析http request 观察 ...
随机推荐
- 如何撤销Git操作?
本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何撤销Git操作?: Git 版本管理时,往往需要撤销某些操作. 本文介绍几种最主要的情况,给出详细的解释.更多的命令可以参考< ...
- 廖雪峰Java10加密与安全-2加密算法-1URL编码
1.URL编码 URL编码是浏览器发送数据给服务器时使用的编码. 如通过百度搜索美女: 编码前:https://www.baidu.com/s?wd=美女 编码后:https://www.baidu. ...
- Kubernetes架构介绍
目录 Kubernetes架构 k8s架构图 一.K8S Master节点 API Server Scheduler Controller Manager ETCD 二.K8S Node节点 Kube ...
- 关于CSS3 animation 属性在ie edge浏览器中不能工作
我想要给div边框加一个闪烁,所以我将css中设置如下 给想要闪烁的div加上blink类 这样在firefox,chrome下是正常显示的,但是在ie下box-shadow属性不能被正常的展现 后 ...
- 抓取摩拜单车API数据,并做可视化分析
抓取摩拜单车API数据,并做可视化分析 纵聊天下 百家号|04-19 15:16 关注 警告:此篇文章仅作为学习研究参考用途,请不要用于非法目的. 摩拜是最早进入成都的共享单车,每天我从地铁站下来的时 ...
- mysql中的字符集和校对规则(mysql校对集)
1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...
- 群晖的moments套件 发生未知错误
一次了,哎 也不知道什么原因引起的 只能再搞一遍 先把homes文件夹数据弄走,免得弄丢 然后卸载momemts,删除数据库 还有其他人遇到这个情况http://www.gebi1.com/threa ...
- Python实例4- 列表到字典的函数,针对好玩游戏物品清单
假设征服一条龙的战利品表示为这样的字符串列表: dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'] 写一个名为 ...
- docker启动单节点server模式的consul | Bitdoom
原文:docker启动单节点server模式的consul | Bitdoom docker启动单节点server模式的consul 2017-09-07 环境:MacOSX, consul_0.9. ...
- 解决hive无法传参问题思路
由于hive执行过程中参数必须写死,无法进行传递参数.利用shell脚本和java编程进行解决 #!/bin/sh#date = `date -d -1days '+%Y-%m-%d'`if [ $# ...