📅  最后修改于: 2020-11-10 05:50:32             🧑  作者: Mango
HTTP状态代码确定客户端发出的请求是否已成功完成。提供服务器状态代码以响应客户端对服务器的请求。简而言之,可以说当客户端发出请求时,服务器发送的HTTP状态代码使客户端可以知道请求是成功,失败还是介于两者之间。
让我们详细了解HTTP状态代码。
当浏览器向服务器发送请求时,服务器将以三位数长的HTTP状态代码进行响应。
状态代码分为五类。 HTTP状态代码的第一位数字定义了这五个类中的类,而最后两位数字没有任何分类作用。 IANA(互联网号码分配机构)是一个包含HTTP状态代码的正式注册表的组织。以下是IANA标准定义的五种类别:
100个块是信息请求,200个块是成功请求,300个块用于重定向,400个块用于客户端错误,500个块是服务器错误。
当连接仍在进行时,以1开头的代码将提供一些信息。此类状态码定义已接收到请求并开始处理。发出信息响应以通知客户端请求处理已开始,并等待最终响应。响应仅由状态行和可选的标题字段组成。它以空行终止。
100继续
100继续是一个信息状态响应代码,指示到目前为止,一切正常,客户端应继续发送请求正文。如果请求完成,则忽略此状态码。
客户端应在初始请求中将Expect:100-continue作为标头发送,以便服务器可以检查请求的标头,客户端将在发送请求正文之前收到响应的100continue HTTP状态代码。
100种交换协议
客户端已请求服务器切换协议。服务器发送100交换协议作为响应码,以通知客户端它正在按照客户端的请求切换到协议,客户端发送了包含升级请求标头的消息。简而言之,我们可以说服务器响应升级请求标头。
102加工
服务器发送102处理状态代码,以通知客户端它已经接受了完整的请求并正在处理该请求,但是仍然没有响应可用。
2xx类表示已接收,理解并接受了客户端的请求。或者我们可以说2xx http状态代码表示Http请求成功。
200 OK
每当服务器发送回200 OK状态代码以响应客户端发出的请求时,该状态代码就会被接受并成功执行。 200 OK的实际响应可能取决于HTTP请求方法。可以在HTTP请求标头中发送以下方法:
Get方法:当我们需要服务器提供某些东西时,将使用Get()方法。例如,我们从服务器请求了一些资源。然后,请求的资源将在响应主体中发送。
Head方法:仅当我们请求标头时才使用head()方法。在响应主体中发送的请求资源的实体头字段,没有任何消息。
Post方法:如果将post()方法发送到服务器,则我们正在请求一些新资源。描述操作结果的实体在消息主体中传输。
创建了201
当服务器发回创建的201作为响应代码时,表示客户端向服务器发出的创建新资源的请求成功。服务器在头字段中返回有关新创建资源位置的信息。简而言之,我们可以说201 Created响应用于在新创建资源的location标头字段中提供URI。
202接受
服务器发送202接受作为响应,以通知客户端我们已经接受了请求,并将在以后进行请求处理。当需要大量计算处理或在不久的将来需要处理请求时,将使用此响应。例如,客户向服务器发送NEFT请求,其中NEFT用于将资金从一个帐户转移到另一家银行的另一个帐户。 NEFT请求每天处理3次,即一次,上午一次,下午第二次,晚上第三次。在这种情况下,系统会发送202接受的回复,说明您的转账请求已被接受,但稍后我会做。
203非权威信息
服务器使用另一个响应代码,即203非授权信息,它使客户端知道代理服务器位于客户端和服务器之间。代理可以改变也可以不改变头信息。
204没有内容
客户端请求成功后,将使用204 No Content,但服务器在响应正文中没有任何可发送的内容。服务器不是简单地说204,而是说您的请求成功。在此响应中,邮件正文为空。
205重设内容
有时,客户端还会收到“ 205重置内容” HTTP响应,并且在服务器希望重置客户端视口的情况下使用此响应。例如,客户端创建一个表单,通过该表单我们可以创建类别,然后提交该类别,服务器将发回205响应。此响应意味着客户端需要将输入类别重置为空白,或者将输入类别重置为先前使用的类别的名称。
206部分内容
客户端还可以接收206部分内容响应,并且此响应意味着服务器已满足部分GET请求,而不是完整的请求。客户端可以使用指示期望范围的范围标头字段,因此206可以导航到更大的响应。客户端还可以包括If-Range标头字段,以使请求成为条件请求。
207种多状态
207 Multi-Status是响应代码中的新增功能。例如,客户端向服务器发送请求;然后服务器准备响应。为了准备响应,服务器需要连接三台不同的机器,即数据库系统,文件系统和缓存系统。假设数据库系统已关闭,并且发送了500条消息;在这种情况下,服务器不能说成功还是不成功,因此它将发回207响应。多状态代码以text / xml或application / xml的形式包含在响应主体中。
已报告208
208与207类似,但仅用于WebDAV。 WebDAV代表Web分布式创作和版本控制。 WebDAV是超文本传输协议(HTTP)的扩展,它允许客户端在分布式网络上执行远程Web内容创作操作。
3xx块是用于重定向的类。它表明客户端需要采取一些其他措施来完成请求。此处的重定向意味着URL转发是向页面提供多个URL的过程。 HTTP为此类操作提供HTTP重定向响应。
重定向主要分为三类:
永久重定向是其中新URL替换现有URL的那些重定向。这意味着原始URL不再存在,并由新URL代替。
以下是永久重定向的状态代码:
301永久移动
301 HTTP状态代码告诉浏览器,该资源的uri已永久更改为“位置”响应标头中指定的新uri。如果我们在浏览器中提出了新的请求,则随后的浏览器将不再对原始链接提出其他请求。
例如,
Client request:
GET /index.php HTTP/1.1
Host: www.example.org
Server response:
HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp
在上面的示例中,当用户手动键入URL(即www.example.org/index.php)时,浏览器将调用www.example.org/index.asp,因为服务器会响应301文本已永久移动且新位置为www.example.org/index.asp的响应代码。
http响应状态代码301“永久移动”用于永久URL重定向,这意味着将更新当前链接。响应随附的“位置”字段中提供了新的URL。 301 HTTP状态代码也用于将用户从HTTP升级到HTTPS。
RFC 2616指出,如果收到响应GET或HEAD以外的301状态代码,则客户端必须在重定向之前询问用户。换句话说,我们可以说301响应状态代码没有通知浏览器自动将POST方法请求重定向到GET方法请求。但是某些浏览器错误地将POST方法请求重定向到GET方法请求。
308永久重定向
308状态代码于2015年4月进入HTTP标准,如RFC 7538文档规范中针对308状态代码所述。 308是HTTP响应状态代码,与301状态代码相似,这意味着所请求的资源已由响应中包含的Location标头中指定的新uri替换。 308很少表示实际问题,但主要是由于服务器行为或配置中发生的更改而发生。没有其他状态代码指示永久重定向。 308是唯一指示永久重定向的设备。它还避免了从POST方法请求到GET方法请求的自动重定向。
所有现代浏览器都会检测到308永久响应并自动执行重定向。服务器发送308 HTTP状态码作为响应,其中包括位置标头,其中位置标头定义了请求的资源位置。例如,如果客户端发出POST请求,则Web服务器将配置为重定向到其他uri。
临时重定向表示请求的资源已分配了在位置标头中临时指定的新uri。
以下是用于临时重定向的HTTP状态代码:
找到302个
302 Found通知浏览器该资源的uri已被临时更改。当客户端发出请求时,浏览器仅将其重定向到新位置。下次请求到达时,浏览器将调用原始uri。
303查看其他
服务器将303响应代码发送给客户端,以使用GET请求在另一个uri处获取请求的资源,这就是为什么此代码的名称为see other。 303 HTTP响应代码通知浏览器重定向到另一个页面,而不重定向到新上载的资源。仅当客户端发出PUT或POST请求时才发送响应。显示请求页面的方法是GET方法。
307临时重定向
307与302类似;唯一的不同是,它告诉浏览器下一个请求应使用与原始请求相同的动词进行。例如,对原始链接发出POST请求,然后仅通过POST将其重定向到新链接。
307与302类似,因为这两个响应都告诉客户端临时重定向到所请求资源的不同之处。 307和302之间的唯一区别是,在307中,客户端必须再次使用相同的请求。例如,如果客户端发出POST请求作为原始请求,则客户端应在下一个请求中遵循相同的POST请求。
特殊的重定向包括以下HTTP状态代码:
300种选择
当服务器发送300个多项选择时,HTTP响应指示该请求具有多个响应。浏览器可以选择它们之一。没有在这些多个响应之间进行选择的标准方法。
304未修改
仅当文件自上次访问以来未更改时,服务器才会生成304未修改响应。该响应基本上提高了用户浏览体验的速度。如果未修改用户正在访问的页面,则客户端将显示缓存的数据,该数据存储在用户本地,因此客户端不会向Web服务器请求该文件。响应于客户端的条件验证请求而发送304响应,以指示客户端的副本在缓存中可用。
当客户端发出条件验证请求时,客户端将在If-Modified-Since标头的帮助下发送其副本的上次修改日期,并在If-None-match标识符的帮助下发送缓存的副本的ETag标识符。服务器检查这些标头以查找高速缓存中是否有最新文件。如果它是最新的,则服务器发送回304 HTTP响应。在这种情况下,客户端可以使用缓存中的文件,而不是将请求发送给服务器。如果服务器在缓存中发现过时的文件,则它将发回200 OK响应和新的响应正文。
当客户端发出的请求中发生某些错误时,服务器会将4xx HTTP响应状态代码发送给客户端。此响应表明浏览器发送了错误的请求,并带有服务器无法处理的错误。为了获得正确的响应,客户端需要再次发送正确的请求。
以下是4xx中使用的状态代码:
400无效的请求
如果网络服务器由于语法错误而无法提供请求的资源,则服务器将发回400 HTTP无效请求作为响应。
401未经授权的请求
当某些网页需要身份验证,并且用户尝试访问已身份验证的资源时,服务器将发送401未经授权的请求作为响应。例如,该网页通过用户ID和密码进行身份验证。
402需要付款
402所需的付款HTTP响应指示要求客户端进行在线付款以处理该请求。此响应状态代码不是标准的客户端错误,仅供以后使用。
403禁止
当客户端发送正确的请求时,服务器将发送“ 403禁止的HTTP”响应,但服务器无法为其提供服务。 403与402不同,是402,应该授权用户访问网页,而在403,则没有身份验证的作用。例如,当一些授权用户尝试访问受限页面时,发送403。
找不到404
当请求的资源在服务器上不可用时,服务器发送404 Not Found错误。出现此错误的原因可能是网站所有者删除了URL,或者用户输入了错误的URL。
405方法不允许
服务器知道请求方法,但请求的资源不支持该方法时,会收到405方法不允许响应代码。在这种情况下,服务器将生成ALLOW标头字段,其中包含目标资源支持的所有方法。
406不接受的请求
当客户端以其他格式发出请求时,将生成“ 406不可接受的请求” HTTP响应。原因可能是请求中使用的语言或编码方法不同。
服务器发生某些问题时,5xx范围内的错误代码将发送到客户端。当客户端请求某个网站时,浏览器会将请求发送到网站的服务器,如果网站的服务器无法处理该请求,则会将5xx错误代码发送给客户端。这些错误主要发生在服务器遇到问题或无法执行请求时。
5xx错误消息表示服务器端错误消息,其中网站的服务器无法执行请求。服务器端错误并不表示问题出在网站,计算机或Internet连接上。
有多种5xx状态代码可用,以便可以识别特定问题:
500 Internet服务器错误
当服务器无法确定问题然后停止响应请求时,将出现500 Internet服务器错误状态代码。由于错误的服务器配置,可能会发生此错误。要更正此错误,网站所有者需要检查服务器的配置并与网络托管公司联系以对其进行修复。
501未执行
501未实现HTTP错误响应代码指示服务器无法提供请求的资源,因为不支持请求中提到的方法。
此错误状态代码还会发送Retry-After标头,告诉客户端何时重新检查功能。服务器支持的方法是GET和HEAD。如果服务器识别请求中指定的方法,但它将不支持该方法。在这种情况下,405不允许的响应将发送到客户端。
502错误的网关
502 Bad Gateway响应代码表示代理服务器未获得源服务器或上游服务器的响应。如果边缘服务器从原始服务器收到502错误网关,则它将500原始不可达响应发送回客户端。
503服务不可用
当其他请求使服务器超载或服务器处于维护状态时,将发送503服务不可用响应状态代码。 500和503之间的区别在于,在500中,服务器出了点问题,阻止了它处理请求,而在503中,服务器工作正常,也能够处理请求,但选择发送503响应。
网站可以使用以下方式来表示此错误:
Http/1.1 Service Unavailable
503 Error
503 Service Temporarily Unavailable
503 Service Unavailable
Service Unavailable - DNS Failure
HTTP Error 503
HTTP 503
Error 503 Service Unavailable
504网关超时
当服务器未从完成请求的另一上游服务器获取响应时,将发生504网关超时错误。当Web服务器尝试加载页面但未从第二台服务器获取所需信息的响应时,Web服务器将使用504作为响应代码。
不支持505 HTTP版本
如果服务器不支持请求中指定的HTTP版本,则不支持505 HTTP版本。
507空间不足
507空间不足是WebDAV规范引入的HTTP响应状态代码。它用于通知客户端,因为磁盘上没有可用空间,因此请求无法继续进行。
510扩展名丢失
客户端发送请求时,它还会发送要使用的扩展名。如果服务器不支持请求中指定的扩展名,则服务器将510作为响应代码发送。