返回

CORS 请求类型解析:从根本上理清『简单请求』与『预检请求』

前端

在现代网络应用程序开发中,跨域资源共享 (CORS) 已成为一种广泛采用的解决方案,它允许不同来源的应用程序相互通信。然而,CORS 协议中还包含了一个相对复杂的概念 - 请求类型之分,即『简单请求』和『预检请求』。这两种请求类型之间的差异往往让许多开发人员感到困惑。为了帮助您深入理解 CORS 请求类型,本文将详细探讨『简单请求』和『预检请求』之间的关键区别。

什么是『简单请求』?

『简单请求』在 CORS 中是指不携带额外信息的标准 HTTP 请求,它遵循以下限制:

  • 请求方法: 只能是 GET、HEAD 或 POST 方法。
  • 请求头: 只能包含以下标准头字段:
    • Accept
    • Accept-Language
    • Content-Type
    • Content-Language
  • 请求体: 不能包含二进制数据,只能是纯文本。

『简单请求』的优点是它们可以被浏览器直接发送,无需进行预检。这意味着『简单请求』的响应速度更快,并且不需要服务器端的额外处理。

什么是『预检请求』?

『预检请求』是一种特殊的 CORS 请求,它用于在发送实际请求之前,向服务器端查询是否允许该请求。『预检请求』使用 OPTIONS 方法,并包含以下额外的头字段:

  • Origin: 表示请求的来源。
  • Access-Control-Request-Method: 表示实际请求的方法(GET、POST、PUT、DELETE 等)。
  • Access-Control-Request-Headers: 表示实际请求中要发送的自定义头字段。

『预检请求』的目的是让服务器端有机会检查请求的安全性,并决定是否允许该请求。如果服务器端允许该请求,它将返回一个包含适当 CORS 头字段的响应。如果服务器端不允许该请求,它将返回一个 403 Forbidden 响应。

『简单请求』与『预检请求』的区别

以下表格总结了『简单请求』与『预检请求』之间的关键区别:

特征 『简单请求』 『预检请求』
请求方法 GET、HEAD、POST OPTIONS
请求头 只能包含标准头字段 可以包含自定义头字段
请求体 不能包含二进制数据 可以包含二进制数据
是否需要预检 不需要 需要

结语

理解『简单请求』和『预检请求』之间的差异对于正确使用 CORS 协议至关重要。通过了解这两种请求类型,您可以更轻松地构建安全的跨域应用程序,并避免不必要的错误。希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。