HTTP消息报文

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只是一个概念,一种定义,不存在这种包。是在服务端保存的一个数据结构

PC 服务器 1.GET/POST index.php 2.Cookie 服务器产生Cookie的同时会设置 失效时间Timeout, 失效之后Cookie不再起作用 3.GET/POST + Cookie PC 服务器
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/ htmlHTML文档
    application/ xmlXML文档
    text/ csscss
    mage/gifGIF图像
    application/ pdfPDF 文档
    */*包含所有
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
  • 用于表示实体内容的过期时间
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇者lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值