《图解HTTP》读书笔记(二)——HTTP状态码及Web服务器

本文是《图解HTTP》读书笔记的第二部分,详细介绍了HTTP状态码的分类和常见类型,如200、301、302、404和500等,同时讲解了Web服务器的虚拟主机技术、通信数据转发程序(代理、网关、隧道)以及缓存机制的作用和重要性。
摘要由CSDN通过智能技术生成

前言

       本文是本系列的第二篇,主要记录了HTTP报文响应的状态码和Web服务器的相关知识,如果有错误烦请大家指出。

返回结果的HTTP状态码

1.状态码告知从服务器端返回的请求结果
       状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正确的处理了请求还是出现了错误。状态码由三位数字和原因短语组成,如200 OK。
在这里插入图片描述
       数字中的第一位指定了响应类别,后两位无分类。响应类别有1-5五种:

  • 1XX:信息性状态码,表示接收的请求正在处理。
  • 2XX:成功状态码,表示请求正常处理完毕。
  • 3XX:重定向状态码,表示需要进行附加操作以完成请求。
  • 4XX:客户端错误状态码,表示服务器无法处理请求。
  • 5XX:服务器错误状态码,表示服务器处理请求出错

       只要遵循状态码类别的定义,即使改变RFC2616中定义的状态码,或服务器自己定义状态码都没问题,接下来我们来看一下常用的14种状态码。
2.2XX 成功
       2XX的响应结果表明请求已经被正常处理了。

  • 200 OK
           表示从客户端发来的请求在服务器端被正常处理了,在响应报文内随状态码一起返回的信息会因方法的不同而改变。例如,使用GET方法时,对应请求资源的实体将会作为响应返回;使用HEAD方法时,对应请求资源的实体不随报文首部返回。

  • 204 No Content
           该状态码表示服务器接收的请求已处理成功,但在响应报文中不含实体的主体部分。对用户来说返回204响应,浏览器显示的页面不发生更新。

  • 206 Partial Content
           该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。

3.3XX 重定向
       3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

  • 301 Moved Permanently
           永久重定向,该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。

  • 302 Found
           临时重定向,该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。两种重定向之后的URI会包含在响应报文首部的Location字段中。
           其他有关301、302状态码的知识请:https://www.jianshu.com/p/e82fbca7f682。

  • 303 See Other
           该状态码表示请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。303和302有着相同的功能,但303明确表示客户端应该采用GET方法获取资源。
    (注1:许多HTTP/1.1版本以前的浏览器不能正确理解303状态码,不允许客户端在重定向时改变请求的方法)
    (注2:当301、302、303状态码返回时,几乎所有浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会再次发送。虽然301、302标准是禁止的,但实际使用时大家都会这样做。)

  • 304 Not Modified
           该状态码表示服务器端资源未改变,可直接使用客户端未过期的缓存。304状态码返回时,不包含任何响应的主体部分。

  • 307 Temporary Redirect
           该状态码与302 Found有相同含义,也表示临时重定向。在大多数时候,尽管302标准禁止POST变换成GET但实际使用时大家并不遵守,而307会遵照浏览器的标准,不会从POST变成GET。但是对于处理响应时的行为,不同浏览器有不同定义。

4.4XX 客户端错误
       4XX的响应结果表明客户端是发生错误的原因所在。

  • 400 Bad Request
           该状态码表示请求报文中存在语法错误。

  • 401 Unauthorized
           该状态码表示发送的请求需要有通过HTTP认证的认证信息。返回含有401的响应必须包含一个适用于被请求资源的www-Authenticate首部用以质询用户信息。

  • 403 Forbidden
           该状态码表明对请求的资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的理由,如果想作说明的话可以在实体的主体部分对原因进行描述,这样用户就可以看到了。

  • 404 Not Found
           该状态码表明服务器上无法找到请求的资源。

5.5XX 服务器错误
       5XX的响应结果表明服务器本身发生错误。

  • 500 Internal Server Error
           该状态码表示服务器端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时故障。

  • 503 Service Unavailable
           该状态码表明服务器暂时出于超浮在或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端。

与HTTP协作的Web服务器

1.虚拟主机技术
       HTTP/1.1允许一台HTTP服务器搭建多个Web站点,这是利用了虚拟主机的功能。即使物理层面只有一台服务器,但只要使用虚拟主机功能,则可以假想已具有多台服务器。
在这里插入图片描述
       我们都知道,访问一个网站时,域名通过DNS服务映射到IP地址之后访问目标网站。可见,当请求发送到服务器时,已经是以IP地址的形式访问了。所以,如果一台服务器托管了多个域名,当收到请求时,就要弄清楚究竟要访问哪个域名。因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。
2.通信数据转发程序:代理、网关、隧道
       HTTP通信时,除了服务器和客户端之外,还有一些用于通信数据转发的应用程序——“代理、网关、隧道”,可以配合服务器工作。这些应用程序能够将请求转发给通信线路上的下一站服务器,并且能接受从那台服务器发送的响应请求再转发给客户端。

  • 代理
           代理扮演了服务器和客户端之间的“中间人”。代理不改变请求URI,会直接发送给前方持有资源的目标服务器,响应也通过经过的代理服务器传给客户端。
           在HTTP通信中,可以级联多台代理服务器。请求和响应的转发会经过一条代理服务器链。转发时,需要附加Via首部字段以标记经过的主机信息。
    在这里插入图片描述
           使用代理的理由有:利用缓存技术减少网络带宽的流量、组织内部针对特定网站的访问控制,获取访问日志等等。代理转发响应时,缓存代理会预先将资源的副本(缓存)在代理服务器上。当代理再次接受到相同资源的请求时,就可以不用从源服务器处获取资源。
  • 网关
           网关的工作机制和代理十分相似,网关能使通信线路上的服务器提供非HTTP服务。比如,网关可以连接数据库,通过SQL语句查询数据;在网上银行结算时,网关可以和信用卡结算系统联动。 在这里插入图片描述
  • 隧道
           隧道可以按要求建立起一条客户端与其他服务器的通信线路,并且使用SSL等加密手段进行通信。隧道本身不会去解析HTTP请求,只是保持原样中转给后续的服务器,隧道会在通信双方断开连接时结束。(注:隧道本身是透明的,客户端不用在意隧道的存在)

3.保存资源的缓存
       缓存是指代理服务器或客户端本地磁盘内保存的资源副本,利用缓存可减少对源服务器的访问。对于缓存服务器来说,当转发从服务器返回的响应时,缓存服务器将会保存一份资源的副本(缓存)。
在这里插入图片描述
       缓存服务器的优势在于利用缓存服务器可以避免多次从源服务器转发资源,客户端可以就近从缓存服务器获取需要的资源,提高了通信效率。
       缓存是有时效性的,这很容易理解,如果服务器上的资源发生了更新,但还是使用不变的缓存,这是不可以的。所以即使服务器上有缓存,客户端也需要向源服务器确认资源的有效性。如果判断缓存失效,缓存服务器将会再次从源服务器上获取资源。
在这里插入图片描述
       此外,在客户端浏览器,也具有缓存机制,与借助缓存浏览器的过程完全相同。
在这里插入图片描述

小结

       本系列的下一篇将带来HTTP首部的相关内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值