在介绍http协议的响应格式时,我们便已经提到了状态码的概念,因为http响应状态行中就包含了响应状态码和状态码的描述信息。下面就来详细了解什么是状态码。


目录

一、状态码

1、为什么要有状态码

2、状态码的分类

 3、浏览器如何看待状态码

二、重定向状态码 3**

1、重定向的分类

(1) 永久重定向

(2) 临时重定向

2、永久重定向验证

(1) Header常见属性 —— Location属性

(2) 代码测试


一、状态码

1、为什么要有状态码

当我们给服务器发送请求的时候,服务端会根据你的资源路径返回相应的内容。此时就存在多种情况了:

(1) 服务端找到你要的资源,把资源返回给你

(2) 服务端找不到你要的资源

(3) 服务端与客户端的连接断开

... ...

既然存在诸多情况,服务端必须要把自己的处理结果返回给客户端,让客户端知道并及时做出调整,这里的处理结果就是状态码,如 404 (Not Found) 、500 (Bad GateWay) 都是常见的状态码。

2、状态码的分类

状态码大致可以分为以下五大类,4**代表以4开头的状态码,如 404 (Not Found)

(1)  1** :信息性状态码,说明服务端正在处理接收到的请求。

(2)  2** :成功状态码,说明请求处理成功,并返回相应的资源。

(3)  3** :重定向状态码,一般用于网址的更换,比如当我们访问一个网站的时候,由于该网站的URL已经被废弃了,此时服务端会引导我们跳转到一个新的网站。

(4) 4** :客户端错误状态码,最典型的例子就是当服务端找不到我们请求的资源路径时,就会返回404状态码。

(5) 5**:服务端错误状态码,一般是服务端处理请求出错。

 3、浏览器如何看待状态码

状态码对浏览器而言没有任何指导意义,我们通过浏览器给服务端发送请求,服务端即便是返回404状态码,浏览器本身也不会有任何提示,我们所看到的页面,是服务端因为找不到资源路径,自己返回一个页面。

二、重定向状态码 3**

1、重定向的分类

3**的状态码是有特殊含义的,分为两种情况,永久重定向临时重定向。跟其他状态码不同,重定向是需要浏览器给我们提供支持的,浏览器必须3**状态码。服务端响应3**状态码时,服务端会告诉浏览器要跳转到哪个网址,此时就需要用到响应Header的Location属性

(1) 永久重定向

假设我们请求的资源路径是 /old/member,但是这个路径的内容因版本太旧被废弃了,你要的资源被移动到了其他路径 /new/staff ,此时服务器就会把你的请求路径 引导至 现在资源所在的路径。

说的通俗一点,当我们访问一个网站的时候,该网站的URL已经被废弃了,此时我们会跳转到一个新的网站。

(2) 临时重定向

当我们跳转到一个新网站的时候,一旦处理完对应的业务就会回到原本的网站,最典型的例子就是我们美团外卖下单以后,会跳转到支付页面,当支付完成的时候,会回到原本的订单页面。

2、永久重定向验证

(1) Header常见属性 —— Location属性

当浏览器响应的状态码为3**时,我们就需要用到这个属性,这个属性会告诉浏览器接下来要访问哪条资源路径。

Location: https://www.baidu.com         //告诉浏览器,接下来要跳转到百度页面
                                        //(也可以是自己服务器上的路径)   

(2) 代码测试

为了方便,我们测试的时候直接就重定向到 www.baidu.com,其实也可以重定向到自己服务器上的某个资源所在位置。

std::string http_response = "http/1.1 301 Permanently moved\n";    //响应状态行
http_response += "Location: https://www.baidu.com\n";              //重定向跳转位置

send(sock,http_response.c_str(),http_response.size(),0);

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐