走进HTTP协议之报文(上)

HTTP报文结构

  客户端与服务器之间的通信通过底层流处理传输数据,但是如果两者之间只是单纯的发送字节数据,彼此根本不知道对方所描述的信息,两种之间必须通过某种数据格式传输数据,好比人们写信一样,要按照某一种格式写,如果只是在纸上不按规矩随便写上自己的内容,接收方是无法理解你写的东西的。而客户端与服务器之间通信约定的格式就是HTTP协议

对于新同学来说首先上图:我以火狐浏览器为例,打开浏览器按下F12,就可以看到许多条浏览器请求服务器的记录,随便选中一条就可以看到HTTP部分模样了。

HTTP请求

HTTP请求和响应的报文结构一致

  • 对于请求来说请求行包含请求服务器的方法,资源URL和HTTP版本信息
  • 对于响应来说响应行包含请求结果的状态码,消息说明和HTTP版本信息
  • 请求头包含请求或响应的各种条件和属性,一般分未4钟头部:通用头部,请求头部,响应头部,实体头部
    1. 通用首部字段:请求报文和响应报文都会使用的各种头部。
    2. 请求首部字段:从客户端向服务器发送请求时使用的各种头部。
    3. 响应首部字段:从服务器向客户端发送响应时使用的各种头部。
    4. 实体首部字段:在请求/响应的实体部分使用的各种头部。

注意:当HTTP报文首部出现了两个或以上相同头部字段名时到底是处理第一次出现还是最后一次的头部,各浏览器内部处理逻辑不同。

HTTP首部

HTTP首部字段是传递额外重要信息的作用,比如告知对方自己处理的字符集,压缩格式,实体类型等等。
我们以HTTP1.1为例(目前使用最为广泛的就是HTTP的1.1版本,各版本之间的区别,在以后会讲到)

常见的通用头部字段

  • Connection 连接管理:
    1.控制代理服务器不再转发该头部 Connection:Upgrade
    2.管理持久连接 Connection:Keep-Alive 表示客户端与服务器的连接是持久连接,这也是HTTP1.0和1.1很大的不同之处。
  • Date 创建报文的时间:
    Date:Tue,01 Jul 1999 09:09:09 GMT 表示通信双方发送报文的时间。
  • Transfer-Encoding 编码方式:
    Transfer-Encoding:chunked 表示传输报文主体时采用的编码方式。
  • Via 路径追踪:(各个代理服务器会在Via信息中添加自己服务器的元信息)
    Via:1.0 gw.hackr.jp(Squid/3.1),1.1 a1 example.com(Squid/2.7) 表示HTTP报文从客户端到目标服务器经过所有的代理或网关,每经过一个代理服务器,Via的信息就会添加追加一条该服务器的元信息。
  • Warning 警告:
    Warning:[警告码][主机:端口]"[警告内容]"([警告时间]) 表示通信之间的各种警告提示信息。

常见的请求首部字段

  • Accept 能接受的格式:
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 表示客户端告知服务器自己能处理的媒体信息类型,类型之间逗号隔开,q表示权重,不指定权重,默认q=1。
  • Accept-Charset 能接受的字符集:
    Accept:Charset:iso-8859-1,unicode-1-1;q=0.8 表示客户端告知服务器自己能处理的字符集,q表示字符集间的权重优先级,各种字符集之间逗号隔开。
  • Accept-Encoding 能接受的内容编码:
    Accept-Encoding:gzip,deflate 表示客户端告知服务器自己处理文件的编码方式,gzip和deflate均是压缩算法格式,q表示权重优先级。
  • Accept-Language 能接受的语言:
    Accept-Language:zh-cn,zh;q=0.7;en-us,en;q==0.3 表示客户端告知服务器自己能处理的语言,中文或英文等等。
  • Authorization 认证信息:
    Authorization:Basic wllirSOI64Slsdkhsdf635dg== 表示客户端告知服务器用户代理的认证信息,如果服务器要求该认证信息,而客户端没有传入,则会抛出401错误。
  • Host 请求的目标服务器主机名:
    Host:www.wangzhicto.com 指明要请求的目标服务器,当某个IP地址下映射了多个域名,转发服务器无法得知客户端要访问哪一个子服务器时,就必须要明确指定时哪一个子服务器。
  • Range 请求资源范围:
    Range:bytes=1024-2048 表示客户端告知服务器自己所需要的资源的范围,比如客户端需要username.txt文件的第1024-2048字节内容,服务器就无需全部返回。注:范围单位是字节。
  • Referer 请求发起来源地址:
    Referer:http://www.taobao.com/index.html 表示请求的URL是从哪一个页面发起的。
  • User-Agent 客户端信息:
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36 客户端告知服务器自己的基本信息,比如操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

常见的响应首部字段

  • Server 服务器信息:
    Server:Apache/2.2.0 (Unix) 表示服务器告知客户端当前服务器上的HTTP服务器应用程序基本信息。
  • Accept-Ranges 范围处理:
    Accept-Ranges:bytes 告知客户端当前服务器能否处理范围请求,不能处理就返回none
  • Location 资源重定向:
    Location:http://www.wangchicto2.com/hello.html 表示服务器告知客户端,被请求的资源在另一个地址,希望客户端按照如下地址进行请求,并且返回的状态码为3开头的三位数,比如302重定向。
  • Retry-After 服务器维护通知:
    Retry-After:Tue,01 Jul 1999 09:09:09 GMT 告知客户端服务器维护到某个时刻以后再来访问。
  • Content-Encoding 内容编码方式:
    Content-Encoding:gzip
  • Content-Language 内容语言:
    Content-Language:zh-CN
  • Content-Length 内容大小:
    Content-Length:1024 表示返回的内容大小,单位:字节。
  • Content-Range 内容范围:
    Content-Range:1024-2048 表示返回的内容范围。
  • Content-Type 实体类型:
    Content-Type:text/html;charset=utf-8 表示返回的内容类型格式。

其他

  • Cookie 客户端信息对象:
    Cookie:username=wangzhi 表示客户端告知服务器一些私密信息

HTTP常见状态码速查

  HTTP状态码表示服务器返回给客户端的状态,可以大概描述处理的结果情况。HTTP状态码分为5类,分别是1xx,2xx,3xx,4xx,5xx ('xx’表示数字)
1xx:1开头的三位数,表示服务器接收后请求正在处理。
2xx:2开头的三位数,表示服务器正常处理完毕。
3xx:3开头的三位数,表示该请求需要附加操作才能继续完成。
4xx:4开头的三位数,表示服务器无法处理该请求。
5xx:5开头的三位数,表示服务器在处理请求过程中出错。

  • 200 表示客户端发起的请求被服务器正常成功处理。
  • 206 表示客户端发起了范围请求。
  • 302 表示该请求的资源被分配到了新的路径上,希望客户端重新按照返回的URL请求。
  • 304 表示服务器告知客户端,该资源可以使用你的缓存,不需要重新获取。
  • 400 表示请求报文中存在语法格式错误,请客户端检查发请的请求格式是否合法。
  • 401 表示服务器需要客户端提供身份认证。
  • 403 表示客户端请求的资源不允许访问。
  • 404 表示服务器上没有客户端要请求的资源。这个错误很常见,请求的资源不存在。
  • 500 表示服务器在处理请求的时候发生了错误,可能是程序BUG引起。
  • 502 表示服务器宕机或防火墙问题。
  • 503 表示服务器处于超负荷运行或正在停机维护。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Minor王智

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

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

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

打赏作者

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

抵扣说明:

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

余额充值