本页介绍 App Engine 应用如何使用网址提取服务发出 HTTP 和 HTTPS 请求并接收响应。如需通过查看代码示例来了解如何从 App Engine 应用发出 HTTP 和 HTTPS 请求,请参阅发出 HTTP(S) 请求。
如需查看 urlfetch
软件包的内容,请参阅 urlfetch
软件包参考文档。
请求
App Engine 使用 URL Fetch 服务来发出出站请求。在 Go 中,urlfetch
软件包提供了 urlfetch.Transport
,这是 http.RoundTripper 接口的一种实现,可使用 App Engine 的基础架构发出请求。请求协议
应用可以使用 HTTP 或 HTTPS 提取网址。通过查看目标网址中的协议,可以推断具体应使用哪种协议。
需要提取的网址可以使用以下范围内的任意端口号:
80
-90
440
-450
1024
-65535
如果网址中未提及端口,则使用协议默认的端口。HTTP 请求使用端口 80
,而 HTTPS 请求使用端口 443
。
请求方法
如果通过网址提取服务发出请求,则可以使用以下任意一种 HTTP 方法:
GET
POST
PUT
HEAD
DELETE
PATCH
请求可以包含 HTTP 标头,对于 POST
、PUT
和 PATCH
请求,还可以包含负载。
请求代理
请注意,URL Fetch 服务使用符合 HTTP/1.1 规范的代理来提取结果。
为了防止应用造成请求无限递归的情况,不允许请求处理程序提取自己的网址。由于使用其他方法也可能导致无限递归,因此,请谨慎决定是否允许您的应用为用户提供的网址提取请求。
请求标头
您的应用可以为传出请求设置 HTTP 标头。
发送 HTTP POST
请求时,如果用户未明确设置 Content-Type
标头,系统会将标头设置为 x-www-form-urlencoded
。这是 Web 表单使用的内容类型。
出于安全考虑,应用无法修改以下标头:
Content-Length
Host
Vary
Via
X-Appengine-Inbound-Appid
X-Forwarded-For
X-ProxyUser-IP
App Engine 会根据具体情况将这些标头设置为准确的值。例如,App Engine 通过请求数据计算 Content-Length
标头,并在发送之前将其添加到请求中。
下列标头会标明发出请求的应用的 ID:
User-Agent
。此标头可以修改,但 App Engine 将附加一个标识符字符串,以使服务器能够识别 App Engine 请求。附加的字符串格式为"AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)"
,其中APPID
是应用的标识符。X-Appengine-Inbound-Appid
。此标头无法修改;如果通过网址提取服务发送请求,系统会自动添加此标头。
请求超时
您可以为请求设置截止时限或超时。默认情况下,请求的超时设置为 60 秒。HTTP(S) 请求的截止时限是 60 秒,任务队列和 Cron 作业请求的截止时限同样也是 60 秒。
安全连接和 HTTPS
通过使用 HTTPS 连接到安全服务器,您的应用可以安全地提取网址。请求和响应数据以加密形式通过网络进行传输。
在 Go API 中,网址提取代理在默认情况下会验证其正在联系的主机。借助此处理方式,API 使用 HTTPS 时可以检测 App Engine 与远程主机之间的中间人攻击。
响应
如果您使用的是 URL Fetch API,那么请注意,URL Fetch 服务将返回所有响应数据,包括响应、代码、标头和正文。
默认情况下,如果网址提取服务收到包含重定向代码的响应,该服务将进行重定向。服务最多遵循五个重定向响应,然后返回最终资源。
在开发服务器上使用 URL Fetch
当您的应用在计算机的 App Engine 开发服务器上运行时,对 URL Fetch 服务的调用将在本地处理。开发服务器使用您的计算机用于访问互联网的任何网络配置,直接从您的计算机连接到远程主机以提取网址。
在测试提取网址的应用功能时,请确保您的计算机可以访问远程主机。
URL Fetch 的配额和限制
如需了解网址提取服务配额,请参阅配额。如需查看应用的当前配额使用情况,请前往 Google Cloud Console 中的“配额详情”页面。
此外,使用 URL Fetch 服务时存在以下限制:
限制 | 数量 |
---|---|
请求大小 | 10 MB |
请求标头大小 | 16 KB(请注意,这将限制可在标头中指定的网址的最大长度) |
响应大小 | 32 MB |
截止时限(请求处理程序) | 60 秒 |
截止时限(任务队列和 Cron 作业处理程序) | 60 秒 |
后续步骤
运行代码示例,并参阅发出 HTTP(S) 请求,获取有关如何从应用发出请求的指导。