函数计算 http 触发器 怎么支持 OPTIONS 方法呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云函数计算中,HTTP触发器支持 OPTIONS
方法的处理,主要用于跨域资源共享(CORS)的预检请求。以下是具体实现方式和步骤:
在创建 HTTP 触发器时,需要明确指定允许的 HTTP 方法。为了支持 OPTIONS
方法,请确保在触发器配置中包含该方法。
OPTIONS
方法。GET
、POST
等)也根据需求一并选择。当客户端发起非简单请求(如带有自定义头部或非标准方法的请求)时,浏览器会先发送一个 OPTIONS
预检请求。您需要在函数代码中显式处理 OPTIONS
请求,并返回适当的 CORS 响应头。
exports.handler = (event, context, callback) => {
const method = JSON.parse(event).requestContext.http.method;
if (method === 'OPTIONS') {
// 处理预检请求
const response = {
statusCode: 204, // 预检请求通常返回 204 No Content
headers: {
'Access-Control-Allow-Origin': '*', // 允许的源,可以替换为具体的域名
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', // 允许的 HTTP 方法
'Access-Control-Allow-Headers': 'Content-Type, Authorization', // 允许的自定义头部
'Access-Control-Max-Age': '3600' // 预检请求结果缓存时间(秒)
},
body: ''
};
callback(null, response);
} else {
// 处理其他请求
callback(null, {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*' // 确保响应头包含 CORS 相关字段
},
body: 'Hello World'
});
}
};
Access-Control-Allow-Origin
:指定允许访问的源,可以是 *
(允许所有源)或具体的域名。Access-Control-Allow-Methods
:列出允许的 HTTP 方法。Access-Control-Allow-Headers
:列出允许的自定义请求头。Access-Control-Max-Age
:设置预检请求结果的缓存时间,减少重复的预检请求。完成代码部署后,可以通过以下方式测试 OPTIONS
方法是否正常工作:
curl -X OPTIONS <http-trigger-url> \
-H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type"
204 No Content
Access-Control-Allow-Origin
Access-Control-Allow-Methods
Access-Control-Allow-Headers
Access-Control-Max-Age
通过以上步骤,您可以成功配置并处理 OPTIONS
方法,满足跨域请求的需求。