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

GCP内部ILB返回405 Method Not Allowed问题求助

问题:Cloud Run + 内部ILB POST请求返回405错误

我有两个Cloud Run服务:一个是代理服务,负责将流量转发至托管Angular静态网站的Cloud Storage存储桶;另一个是API服务,提供数据接口。我已创建内部区域ILB,并配置了基于路径的路由规则来分发流量至两个不同后端。

用curl直接调用ILB的API URL可正常获取数据,但静态网站通过JavaScript发起POST请求至https://something.com/api/id时,返回405 - Method Not Allowed错误,请求详情如下:

Request URL:
https://something.com/api/id
Request Method:
POST
Status Code:
405
Remote Address:
....*:443
Referrer Policy:
strict-origin-when-cross-origin

对应的Terraform URL Map代码如下:

# URL map
resource "google_compute_region_url_map" "url_map_euw3" {
  name    = "${var.lb_prefix}-ilb-regional-url-map"
  project = frontend_project.project_id
  region  = "europe-west1"

  default_service = google_compute_region_backend_service.service_euw3["first-cloud-run"].id

  host_rule {
    hosts        = ["*"]
    path_matcher = "default-path-matcher"
  }

   path_matcher {
    name            = "default-path-matcher"
    default_service = google_compute_region_backend_service.service_euw3["first-cloud-run"].id
    path_rule {
      paths   = ["/api/id"]
      service = google_compute_region_backend_service.service_euw3["second-cloud-run"].id
      route_action {
        url_rewrite {
          path_prefix_rewrite = "/id"
        }
      } 
    }
    path_rule {
      paths   = ["/*"]
      service = google_compute_region_backend_service.service_euw3["first-cloud-run"].id
    }
  }

}

排查与解决思路

  1. 处理CORS预请求(OPTIONS)
    浏览器发起跨域POST请求前,会自动发送OPTIONS预请求。如果API服务未配置CORS规则允许OPTIONS方法,预请求会失败,最终表现为POST返回405。

    • 解决:在API服务的响应中添加CORS头:Access-Control-Allow-Origin: https://something.com、Access-Control-Allow-Methods: POST, OPTIONS、Access-Control-Allow-Headers: Content-Type等必要字段。
  2. 验证路径重写后的API端点兼容性
    URL Map将/api/id重写为/id,需确认API服务的/id端点是否支持POST方法。用curl直接测试重写后的路径:

    curl -X POST https://[ILB内部地址]/id
    

    如果该请求也返回405,说明API服务本身的/id端点不支持POST,需调整API的路由配置。

  3. 确认后端服务的HTTP方法限制
    检查指向API服务的google_compute_region_backend_service配置,确保没有限制POST或OPTIONS方法。默认情况下Cloud Run后端服务允许所有HTTP方法,但如果有自定义配置,需保证POST和OPTIONS未被排除。

  4. 检查浏览器请求的实际流向
    打开浏览器开发者工具的Network面板,确认POST请求的路径、方法是否正确,是否因为前端代码错误发送到了代理服务而非API服务。

内容的提问来源于stack exchange,提问作者Subhajit Pal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:20:16