App Engine 在收到您的应用程序的网络请求时,会调用与此网址相对应的处理程序脚本(如应用程序的 app.yaml 配置文件中所述)。App Engine 会使用 CGI 标准将请求数据传递到处理程序,并接收响应。
App Engine 在收到您的应用程序的网络请求时,会把该请求传送到网络服务器。该网络服务器会检查应用程序的 app.yaml 文件获取与请求的网址相匹配的网址映射,以确定哪个 Python 处理程序脚本会处理该请求。
App Engine 使用多个网络服务器运行您的应用程序,并自动调整它所使用的服务器数量以便可靠地处理请求。指定的请求可能会传送到任何服务器,而且可能不是处理先前来自同一用户的请求的服务器。
请求一旦被传送到一个服务器和相应的处理程序脚本,App Engine 就会调用此脚本。正如 CGI 标准中所述,服务器会把请求数据置于环境变量和标准输入流中。脚本会执行请求所需的操作,然后准备响应并将响应置于标准输出流上。
有关环境变量和输入流数据格式的详细信息,可以参考 CGI 文档。大多数应用程序会使用一个库来解析 CGI 请求以及返回 CGI 响应,例如,使用来自 Python 标准库的 cgi 模块 或知道 CGI 协议(例如 webapp)的网络框架。
以下示例处理程序脚本显示了用户浏览器上的消息。它会把标识消息类型和消息内容的 HTTP 标头打印到标准输出流中。
print "Content-Type: text/plain" print "" print "Hello, world!"
App Engine 会收集处理程序脚本写入标准输出流的所有数据,然后等待该脚本退出。脚本退出后,所有输出数据会发送至用户。App Engine 不支持在退出处理程序前向用户的浏览器发送数据。
如果客户端发送带有指明该客户端可接受压缩(通过 gzip)内容的请求的 HTTP 标头,App Engine 会自动压缩该响应数据并附加相应的响应标头。Accept-Encoding 和 User-Agent 请求标头用于决定该客户端是否可以可靠地接收压缩响应。自定义客户端可通过指定 Accept-Encoding 和 User-Agent 标头(带有 [gzip] 值)强行压缩内容。