返回
CORS 请求类型解析:从根本上理清『简单请求』与『预检请求』
前端
2023-09-12 15:52:31
在现代网络应用程序开发中,跨域资源共享 (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 协议至关重要。通过了解这两种请求类型,您可以更轻松地构建安全的跨域应用程序,并避免不必要的错误。希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。