函数计算中,有一个函数绑定了自定义域名,我的一个网站用 fetch 发起一个 post 请求到这个自定义域名,body 是 json string,结果浏览器先发起了 OPTIONS 请求,但 options请求失败,另外这这个函数是从2.0改成3.0的,自定义域名没改,并且在2.0是函数可以正常被post请求,这是为什么呢?
这个问题可能是由于 Serverless Framework v3.0 对跨域请求的处理方式发生了变化。在 v3.0 中,浏览器会首先发送一个预检请求(OPTIONS),以检查服务器是否允许跨域请求。如果预检请求失败,浏览器将不会发送实际的请求。
要解决这个问题,您可以尝试以下方法:
确保您的自定义域名已正确配置为支持跨域请求。您可以在 CloudFront 控制台中检查和修改这些设置。
如果您使用的是其他云服务提供商的 API Gateway 或 Lambda@Edge 功能,请确保它们也支持跨域请求。
在您的函数代码中,添加适当的 CORS 响应头,以允许来自浏览器的预检请求。例如,您可以在函数的响应对象中添加以下内容:
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type');
这将允许来自任何来源的请求,并允许 POST、GET 和 OPTIONS 方法。请注意,这只是一个示例,您可能需要根据您的需求调整这些设置。
https://help.aliyun.com/document_detail/2513634.html?spm=a2c4g.2513616.0.i6#section-s91-v5a-lqw
这个自定义域名在电脑本地用代码去 post 可以正常返回,但是通过我的网页去post就会发起预检请求,如果把自定义域名改为函数的http触发器自动生成的域名,则正常。此回答来自钉群阿里函数计算官网客户。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。