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

GAE执行GET请求出现两次调用问题,如何避免307重定向并默认启用HTTPS

问题根因

Google App Engine(GAE)标准环境的secure: always规则,对GET/HEAD类请求会按你配置的redirect_http_response_code: 301返回301永久重定向,但对携带请求体的非GET/HEAD请求,为了避免丢失请求数据,会默认返回307临时重定向,引导客户端用相同的请求方法和参数重定向到HTTPS地址,就会出现两次请求的现象。

解决方案

要完全避免307重定向同时强制HTTPS,按以下两步操作即可:

  • 确保所有客户端请求直接使用HTTPS协议发起,不要在前端、接口调用代码中使用HTTP地址调用接口,从根源上避免触发跳转逻辑,这是最直接的解决方法。
  • 在服务端配置HSTS响应头,告诉浏览器后续访问该域名时自动将所有HTTP请求升级为HTTPS,无需再向服务器发送HTTP请求触发跳转。修改后的Express代码如下:
const express = require("express");
var app = new express();
app.use(express.json());

// 新增HSTS配置,建议仅在GAE生产环境生效即可
app.use((req, res, next) => {
  if(process.env.NODE_ENV === 'production') {
    // max-age单位为秒,31536000对应1年有效期
    res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
  }
  next();
});

app.get("/", (req, res) => {
  setTimeout(() => {
    res.json({ finalResponse: 1 });
  }, 5000);
});

const PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}...`);
});

你原本的app.yaml配置不需要修改,secure: always已经可以保证所有HTTP请求都会被强制跳转到HTTPS,配合以上两步就可以完全避免307重定向的两次请求问题。
注意:HSTS配置需要用户至少成功访问过一次HTTPS地址才会生效,首次访问如果是HTTP还是会触发一次跳转,之后就会自动升级为HTTPS

内容的提问来源于stack exchange,提问作者Manoj Sethi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:45:03