让你思考的 HTTP 状态代码
去年,我写了一篇关于我们可能错误使用某些 HTTP 状态代码的文章,这次我发现了一些我们不常用的 HTTP 状态代码,但它们可能具有令人着迷的用例。
因此,在本文中,我们将讨论一些可能让你思考的 HTTP 状态代码。让我们开始吧!
如果你在阅读标题的同时尝试猜测状态代码的含义,那将会更有趣!😉
103条早期提示🫣
103 Early Hints HTTP 状态码有点不寻常,但相当有趣。它就像是 Web 服务器向你的浏览器发出的友好提前通知。当服务器发送 103 状态码时,它的意思是:“嘿,我要给你发送一堆东西,这里有一个预览,让你快速入门。”
这有点像你在餐厅用餐时,厨师在上主菜之前先送上一道小开胃菜。在这种情况下,服务器会通知你的浏览器有更多数据正在传输中,以便浏览器可以开始准备接收。这一切都是为了优化加载过程,让你的网络体验更加流畅。
其好处包括:
-
更快的加载:向浏览器提供早期提示,使它们能够更快地开始获取关键资源,从而加快页面渲染速度。
-
增强用户体验:减少感知的加载时间,从而带来更好的用户体验和更高的参与度。
-
优化资源获取:优先考虑重要资产,优化首屏内容的加载。
-
减少往返:最大限度地减少额外请求的需要,减少延迟和加载时间。
-
节省带宽:避免获取不必要的资源,为用户和服务器节省带宽。
请阅读此处以了解更多信息。
300 个多项选择
HTTP 状态代码 300“多种选择”用于指示所请求的资源有多种可用表示,每种表示都有其自己的特定位置(URI),并且用户或客户端必须选择其中一种。
当服务器返回 300 状态码时,它通常会在响应中包含一个“Location”标头,其中包含资源备选表示形式的 URI 列表。客户端可以根据用户偏好或应用程序逻辑决定遵循哪个 URI。
例如,如果客户端请求某个资源(例如文档),而服务器拥有该文档的多个不同格式(例如 HTML、PDF 和纯文本)的版本,则可以响应 300 状态码并提供每个版本的 URI。然后,客户端可以提示用户选择首选格式,也可以使用自己的逻辑进行选择。
300 状态代码在典型的 Web 交互中相对罕见,主要用于需要内容协商以根据用户或应用程序要求确定资源的最佳表示的场景。
请阅读此处以了解更多信息。
303 查看其他👀
HTTP 状态代码 303 See Other 是一个重定向状态代码,用于指示 Web 客户端(通常是 Web 浏览器)向其他 URI 执行 GET 请求。它表示客户端请求的资源可以在其他位置找到,客户端应该从该位置获取。
此状态代码就像一个路标,上面写着:“您请求的东西不在这里。去别处看看!” 这是 Web 服务器用来告诉您的浏览器您正在寻找的资源可以在其他位置或 URL 找到的一种方式。

等一下,这听起来不是很像 HTTP 状态代码 302 Found 吗?
HTTP 状态码 302 和 303 都用于处理重定向,但它们的用途不同。关键区别在于重定向的性质。302 状态码表示临时重定向,其中请求的资源暂时在不同的 URI 上可用。
相比之下,303 状态代码表示更明确的重定向,指示客户端向请求资源的备用 URI 发出新的 GET 请求。
虽然 302 意味着未来的请求可能仍会定向到原始 URI,但当您想要确保对同一资源的后续请求始终转到新的 URI 时,通常会使用 303,这使得它对于某些 Web 表单和数据提交特别有用。
例如,在网站上成功提交表单后,服务器可能会响应 303 状态码和指向新 URI 的“Location”标头,该 URI 会显示感谢消息或确认页面。这确保刷新确认页面不会导致重复提交表单。客户端会被指示向新 URI 发出 GET 请求来检索结果或查看确认信息,从而将其与初始 POST 请求解耦。
请阅读此处以了解更多信息。
406 不可接受❌
当客户端的请求指定了某些响应条件(例如可接受的媒体类型(内容类型)、语言或字符集),而服务器无法根据可用资源满足这些条件时,Web 服务器会返回 HTTP 状态代码 406 Not Acceptable。换句话说,服务器无法提供符合客户端指定偏好设置的响应。
例如,如果客户端发送 HTTP 请求标头,表明它只接受特定语言或内容类型的响应,而服务器没有该语言或格式的请求内容,则它将以 406 状态代码进行响应。
406 状态代码本质上是服务器与客户端沟通的一种方式,它无法满足请求中指定的特定内容要求,客户端可能需要调整其偏好或相应地处理情况,例如通过请求不同的内容类型或语言。
听起来很像 404 Not Found 吧?不,其实不然。如果你仔细阅读,就会发现 406 状态码表示服务器拥有资源,但资源格式不符合请求的格式;而 404 状态码则表示服务器根本找不到资源。
请阅读此处以了解更多信息。
409冲突⚔️
HTTP 状态代码 409(冲突)用于指示由于与目标资源的当前状态发生冲突,请求无法完成。此状态代码通常出现在涉及并发更新或资源更改冲突的场景中。
例如,如果两个用户尝试同时修改同一条数据,则可能会发生冲突。在这种情况下,服务器可能会响应 409 状态代码,告知客户端由于冲突的更改而无法处理其请求。
响应通常包含有关如何解决冲突的附加信息或指导,例如导致冲突的资源状态,或客户端在解决冲突后如何重试其请求。它通常用于 Web 应用程序(尤其是具有协作编辑或版本控制功能的 Web 应用程序),以在多方可以修改同一资源的情况下管理数据一致性。
读到上面的案例,你有没有想过 400 Bad Request 错误?好吧,需要澄清的是,400 错误指的是请求本身存在问题,而 409 错误则指的是被修改资源的状态引发的冲突。
请阅读此处以了解更多信息。
410 已消失🪄
HTTP 状态代码 410(即“已删除”)用于指示服务器上先前可用的资源已无法访问,且已被故意移除或永久删除。与仅表示资源未找到的 404 状态代码不同,410 状态代码明确表示该资源过去存在,但现在已被故意移除,并且预计未来不会再次可用。
网站管理员和开发者可以使用 410 状态代码来通知客户端和搜索引擎某个资源(例如网页或 API 端点)已永久停止服务。这有助于维护搜索引擎结果的准确性,并告知用户他们所查找的资源已无法访问。
请阅读此处以了解更多信息。
417 期望失败😞
HTTP 状态代码 417“期望失败”用于表示服务器无法满足 HTTP 请求的“Expect”请求标头中指定的客户端期望。
“Expect”标头通常用于定义客户端对服务器如何处理请求的某些期望,例如请求服务器使用特定状态代码进行响应或遵守某些协议扩展。
当服务器遇到无法满足的“Expect”标头时,它会响应 417 状态代码。例如,如果客户端期望服务器支持特定的身份验证方法或协议扩展,但服务器无法满足该期望,则可能会发生这种情况。
417 状态代码相对罕见,在日常网页浏览中可能不会遇到。
请阅读此处以了解更多信息。
418 我是一把茶壶🫖

HTTP 状态代码 418(“我是一把茶壶”)是一个愚人节玩笑,并非标准的 HTTP 状态代码。它是在 RFC 2324(一份名为“超文本咖啡壶控制协议”的文档)中引入的,这份文档并非一份严肃的 HTTP 规范,而是一个幽默诙谐的版本。
此状态码纯属玩笑性质,并非用于实际的 Web 开发或服务器与客户端之间的通信。Web 服务器或浏览器无法识别或实现此状态码。
因此,如果您在任何情况下遇到“418 I'm a teapot”状态代码,它很可能被用来取乐或以幽默的方式传达该请求无效或不应被认真对待。
请阅读此处以了解更多信息。
422 无法处理的内容😵💫

您可能了解 HTTP 状态代码 400(“错误请求”),它表示服务器由于请求本身存在问题(例如语法错误或缺少必需参数)而无法处理客户端的请求。它表示服务器无法理解请求,或者由于客户端错误而无法执行请求。
另一方面,HTTP 状态代码 422(“无法处理的实体”)用于服务器能够理解客户端的请求,但由于请求的内容(例如数据或输入)语义不正确、语法无效或违反服务器设置的验证规则而无法处理的情况。它专门处理请求内容的问题,因此当请求实体存在问题但并非由于一般语法错误导致时,它是更合适的选择。
请阅读此处以了解更多信息。
451 因法律原因不可用👩⚖️

HTTP 状态代码 451“由于法律原因不可用”用于表示服务器已收到资源请求,但由于法律限制或法律审查而拒绝满足该请求。
此状态代码通常在政府或法律机构强制删除或阻止特定内容时使用,并且服务器必须遵守这些法律要求。
“451”这个名称源自雷·布拉德伯里的小说《华氏451度》,书中的书籍被政府禁烧。选择这个状态代码名称象征着内容“因法律原因无法访问”。
当服务器以 451 状态代码进行响应时,它还可能在响应中包含其他信息,例如法律限制的描述或相关法律或法规的引用。
451 状态码在 HTTP 标准中相对较新,反映了人们对互联网法律和审查相关问题的日益关注。该状态码通常用于因法律合规原因而限制访问某些在线内容的情况。
请阅读此处以了解更多信息。
结论
HTTP 状态码还有很多我们不太常用,但它们确实存在,用于特定的目的。希望本文对您有所帮助。
如果您在任何有趣的用例中使用了上述任何 HTTP 状态代码,请告诉我。
继续阅读!👋
鏂囩珷鏉ユ簮锛�https://dev.to/pragativerma18/http-status-codes-that-will-make-you-think-5mc