1. 请求字段(Request Header )
HTTP请求报文中的请求字段也是极多的,此处记录数个常用的。
1. Host
- 表示请求的主机和端口
Host: www.baidu.com //请求主机为百度,端口默认80(如果是HTTPS则端口默认443)
2. User-Agent
- “用户代理”,将客户端的操作系统和浏览器信息告知服务器,服务端可以据此得知你只用的浏览器、设备等等。
- 很多安全软件可以伪造这个字段欺骗服务器。
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3872.400 QQBrowser/10.8.4455.400 //W10+QQ浏览器
3. Referer
- 当我们从A页面跳转进入B页面时,一般会带有Referer字段,它会包含A页面的URL。
- 可用于广告统计、安全分析、CDN统计等。
Referer:www.baidu.com?url=s8VrysxSnahbDF8j //则代表通过百度页面跳转过来,后面为携带的参数
4. Origin
- 跟Referer类似,表示从哪个网站(域)跳转过来的,但是只存在于POST请求中。
- 相比Referer更安全,不会携带参数。
- 服务器可以通过Origin字段判断请求是否合法,拒绝一切Origin字段为外站的请求,可以解决CSRF跨站请求攻击。
Origin: http://www.localhost.net //则代表从本地跳转过来POST请求
5. Cookie
-
通过在客户端记录信息确定用户身份,例如通过cookie可以免密登录网站。
-
HTTP是无状态协议,而通过引入cookie,可以支持会话管理(session)。即有了cookie才有session
-
Cookie和Session的区别
-
Cookie是一个字段,可以通过抓包获取到。
-
Session只是一个概念,一种定义,不存在这种包。是在服务端保存的一个数据结构
-
6. Range
- 用于分块请求实体内容,例如一个较大的文件,通过range多线程下载
Range:bytes=0~100 //下载头100字节内容
7. x-forward-for
- 表示客户端的IP地址,一般称为“XXF”头,服务端通过这个头可以知道客户端的真实或代理IP
- 攻击者也可以通过这个头,伪造源IP地址,欺骗服务端
- 例如,真实访问ip是100.1.1.1,但是xxf:200.2.2.2,则服务端会以200.2.2.2为准
8. Accept
-
表示客户端能够接收哪些文件类型(MIME)
-
常见MIME类型
MIME类型 含义 text/ plain 文本 text/ html HTML文档 application/ xml XML文档 text/ css css mage/gif GIF图像 application/ pdf PDF 文档 */* 包含所有 … …
Accept: image/webp,image/apng,image/*,*/*;q=0.8,application/json, text/javascript, */*; q=0.01 //这里q是优先级的意思数字越大优先级越高
9. Accept-Charset
-
表示客户端能够接受的字符集
Accept-Charset: UTF-8
10. Accept-Encoding
-
表示客户端能够接受的编码
Accept-Encoding: gzip, deflate //通用标准,几乎没有变化
11. Accept-Language
-
表示客户端能够接受的语言
Accept-Language: zh=CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7 //q代表优先级
2. 响应字段(Response Header)
响应头出现在响应报文中,用于服务端根据客户请求做响应
1. Set-Cookie
-
服务器通过此字段为客户端设置cookie信息,后续客户端根据此cookie来进行请求
-
HttpOnly字段:用于解决XSS跨站请求脚本攻击,JS脚本不能获取cookie
Set-Cookie: PHPSESSID=s1xxo1x10q2pdckxxktr19zzo5; path=/; HttpOnly //前者为cookie的值,其次path为路径,最后就是httponly字段
2. Server
-
表示Web服务器信息,为了安全性,尽量关闭或修改
Server: nginx/1.4.6 (Ubuntu) //能够看到通过什么启动的服务
3. X-Powered-By
-
表示服务器的程序版本,为了安全性,尽量关闭或修改
X-Powered-By: PHP/5.5.9-1ubuntu4.21 //编程语言和服务器系统
4. Accept-Ranges
-
表示是否接受字节范围请求
Accept-Ranges: bytes
5. Locatioin
- 服务器告知客户端去哪里访问这个资源,一般用于重定向,配合状态码302使用
6. WWW-Authenticate
- 服务器对客户端的认证信息,一般存在于弹框认证而不是表单认证中
7. ETag
- Entity Tags,表示资源的匹配信息
8. Vary
- 代理服务器缓存的管理信息
3. 通用字段 (General Header)
通用字段可以存在请求和响应报文中
1. Connection
-
用于表示连接是否可持续
Connection: keep-alive //在收到关闭命令之前一直开启
2. Cache-Control
-
用于控制缓存信息
Cache-Control: no-cache //不缓存过期信息 Cache-Control: no-store //不要进行缓存 Cache-Control: max-age=94608000 //服务器告诉客户端,缓存这个信息的最长时间
3. Transfer-Encoding
-
表示输出的内容长度不能确定,需要分块处理
-
对于动态的内容或者在发送数据前不能判定长度的情况下,可以使用分块的方法来传送编码
Transfer-Encoding: chunked
-
对于静态的内容或者发送数据可以预判长度的情况下,可以使用content-length来标识
content-length: 190875
-
4. Upgrade
- 升级为其他协议
5. Via
- 代理服务器相关信息
6. Warning
- 错误信息通告
7. Date
-
用于表示内容产生的时间
Date: Sun, 18 Jul 2021 07:33:13 GMT //GMT指世界时。世界时UT即格林尼治平太阳时间
8. Pragma
-
报文指令
Pragma: no-cache //不缓存过期信息
4. 实体字段
实体字段可以存在请求和响应报文中,针对实体内部进行描述
1. Content-Type
-
用于表示实体内容的介质类型(MIME)
Content-Type: text/html; charset=UTF-8
2. Content-Encoding
-
用于表示实体内容的编码方式
Content-Encoding: gzip
3. Content-Length
- 用于表示实体内容的长度
4. Content-Language
- 用于表示实体内容的语言
5. Content-Location
- 代替对应资源的URI
6. Content-MD5
- 用于表示实体内容的报文摘要
7. Last-Modified
- 用于表示实体内容的最后修改时间
8. Expires
- 用于表示实体内容的过期时间