You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从前端网站调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:30:04