请求的处理方式

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域指定的代码。在 App Engine 网址中包含 REGION_ID.r 对于现有应用是可选的,这将很快成为对所有新应用的要求。

为了确保顺利过渡,我们正在逐步更新 App Engine 以使用区域 ID。如果我们尚未更新您的 Google Cloud 项目,则您不会看到应用的区域 ID。由于该 ID 对于现有应用是可选的,因此您在现有应用可以使用区域 ID 后无需更新网址或进行其他更改。

详细了解区域 ID

本文档介绍 App Engine 应用如何接收请求和发送响应。如需了解详情,请参阅请求标头参考

如果您的应用使用服务,您可以将请求发送到特定服务或此服务的特定版本。如需详细了解服务可寻址性,请参阅请求的路由方式

处理请求

应用负责启动 Web 服务器和处理请求。您可以使用支持您的开发语言的任何 Web 框架。

应用服务器的配置决定了并发请求的处理方式。Eclipse Jetty 9 运行时已经针对并发进行了配置,但如果您使用的是 Java 8 运行时,则由您的应用或框架配置并发。

当 App Engine 收到针对应用的网络请求时,它会调用与网址相对应的 servlet,如应用的部署描述符WEB-INF/ 目录中的 web.xml 文件)所述。App Engine 使用 Java Servlet API 3.1 版将请求数据提供给 servlet,并接受响应数据。

以下示例 servlet 类在用户浏览器上显示简单消息。

import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");
    }
}

配额和限制

App Engine 会随着流量的增加自动为您的应用分配资源。但是,这一过程会受到下列限制:

  • App Engine 会为低延时应用(应用响应请求的时间少于 1 秒)预留自动扩缩容量。高延时应用(例如,处理大量请求时,每个请求的响应时间都超过 1 秒)和高吞吐量应用需要白银级、黄金级或白金级支持。选用这类支持级别的客户可以联系其支持代表,申请提高吞吐量限额。

  • 严重受 CPU 限制的应用还可能发生额外的延时,以便与同一服务器上的其他应用有效地共享资源。静态文件请求不受这些延迟限制的影响。

发送到应用的所有传入请求都会计入请求限额。为响应请求而发送的数据会计入传出带宽(计费)限额。

HTTP 和 HTTPS(安全)请求均计入请求传入带宽(计费)传出带宽(计费)限额。Cloud Console 的“配额详情”页面还会分别列出安全请求次数安全传入带宽安全传出带宽的值,以供参考。仅 HTTPS 请求计入这些值。如需了解详情,请参阅配额页面。

以下限制仅适用于请求处理程序的使用:

请求限制

  • 允许最大约 15KB 的请求标头。
  • 请求的总大小上限为约 32MB。
  • 转发到应用服务器时,所有 HTTP/2 请求都将转换为 HTTP/1.1 请求。
  • SSL 连接在负载平衡器处终止。来自负载平衡器的流量通过加密渠道发送到实例,然后通过 HTTP 转发到应用服务器。您可以通过 X-Forwarded-Proto 标头了解原始请求是 HTTP 还是 HTTPS。

响应限制

  • 响应由 64k 存储块缓冲。
  • 响应大小无限制。
  • 响应时间限制为一小时。

不支持的 HTTP 请求

App Engine 柔性环境不支持以下功能:

  • 发送至后端服务的 HTTP/2 流量。
  • 直接访问实例的 HTTP 请求。

请求标头

传入 HTTP 请求包含客户端发送的 HTTP 标头。为保证安全,部分标头在到达应用前由中间代理进行清理或修改。

如需了解详情,请参阅请求标头参考

请求响应

App Engine 会使用请求对象和响应对象调用 servlet,然后等待 servlet 填充响应对象并返回。 当 servlet 返回时,响应对象上的数据将发送给用户。

您生成的响应会受到一些限制,而且响应在返回客户端之前可以修改。

停用缓冲

默认情况下,来自 App Engine 的所有响应都使用 64k 存储块进行缓冲。在某些情况下,停用缓冲并将字节直接流式传输到客户端可能是合理的做法。当使用挂起 GET 或服务器发送的事件 (SSE) 时,通常会希望停用缓冲。如需停用缓冲,您可以将 X-Accel-Buffering 响应标头设置为 no

X-Accel-Buffering: no

强制 HTTPS 连接

出于安全考虑,所有应用都应建议客户端使用 https 连接。对于给定页面或整个网域,您可以使用 Strict-Transport-Security 标头指示浏览器首选 https 而不是 http,例如:

Strict-Transport-Security: max-age=31536000; includeSubDomains