• http响应状态码(Header常见属性 — Location属性)


    在介绍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**状态码时,服务端会告诉浏览器要跳转到哪个网址,此时就需要用到响应HeaderLocation属性

    (1) 永久重定向

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

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

    (2) 临时重定向

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

    2、永久重定向验证

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

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

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

    (2) 代码测试

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

    1. std::string http_response = "http/1.1 301 Permanently moved\n"; //响应状态行
    2. http_response += "Location: https://www.baidu.com\n"; //重定向跳转位置
    3. send(sock,http_response.c_str(),http_response.size(),0);

     

  • 相关阅读:
    【数据结构】用栈实现括号匹配
    数据分析可视化pandas
    LLMs LangChain结合推理和行动ReAct: Combining reasoning and action
    冒泡排序/鸡尾酒排序
    vue插件的使用方法
    Idea集成Docker
    市面上的护眼灯真的护眼吗?护眼灯作用大不大
    WIZnet 物联网设计大赛 - WizFi360大赛
    在T3开发板上实现SylixOS最小系统(六)
    【Python】利用matplotlib在Pycharm中显示本地图片
  • 原文地址:https://blog.csdn.net/challenglistic/article/details/126168305