从前端网站调用Google Cloud Function出现CORS错误求助
问题根因与修复方案
你遇到的CORS报错由代码中3处明显错误导致:
- 预检OPTIONS请求的处理逻辑错误:你使用
print输出响应参数,不会实际将响应返回给前端,且处理完OPTIONS请求后没有中断执行,会继续走后续主逻辑 - 向Zoho接口发起请求时附加的CORS头属于无效配置:CORS响应头是返回给浏览器做跨域校验用的,你发给第三方API的请求不需要加这类参数
- 最终返回给前端的响应未携带CORS头:你修改了Zoho返回的
post_response的头,但是最终只返回了状态码,没有将包含CORS配置的头传递给前端,浏览器自然检测不到Access-Control-Allow-Origin头
修复后的完整代码
import requests import json import flask def myFunction(request): # 处理预检请求 if request.method == 'OPTIONS': headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'OPTIONS,POST,GET', 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Max-Age': '3600' } # 直接返回预检响应,终止后续逻辑 return ('', 204, headers) # 主请求逻辑:获取Zoho令牌 token_resp = requests.post(url="https://accounts.zoho.com/oauth/v2/...") access_token = token_resp.json()['access_token'] # 调用Zoho CRM接口新增线索 url = 'https://www.zohoapis.com/crm/v2/Leads' req_headers = { 'Authorization': f'Zoho-oauthtoken {access_token}', 'Content-Type': 'application/json' } json_data = request.get_json(silent=True) post_resp = requests.post(url, headers=req_headers, json=json_data) # 构造返回给前端的响应头,添加CORS配置 resp_headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'OPTIONS,GET,POST' } # 完整返回响应内容、状态码、响应头 return (post_resp.text, post_resp.status_code, resp_headers)
额外优化说明
- 原代码中对请求参数做的字符串转码、再编码操作属于冗余逻辑,
requests.post的json参数可以直接传入Python字典,自动完成序列化 - 若你需要限制跨域来源,可将
Access-Control-Allow-Origin的值从*改为你的前端地址http://localhost:3000,安全性更高
内容的提问来源于stack exchange,提问作者Mous17
相关产品推荐
相关产品推荐

