View a markdown version of this page

Cross-origin 资源共享支持和 Amazon EC2 - Amazon Elastic Compute Cloud

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Cross-origin 资源共享支持和 Amazon EC2

亚马逊 EC2 API 支持跨源资源共享 (CORS)。CORS 为加载在一个域中的客户端 Web 应用程序定义了一种与不同域中的资源进行交互的方式。有关更多信息,请访问Cross-Origin 资源共享 W3C 建议。借助对亚马逊 EC2 的 CORS 支持,您可以构建使用亚马逊 EC2 API 的丰富客户端 Web 应用程序。例如,假设您正在托管一个网站mywebsite.example.com,并且您想在网页 JavaScript 上使用来向 Amazon EC2 API 发出请求。通常,浏览器会 JavaScript 阻止这些请求,但是使用 CORS,您可以从中进行跨源 Amazon EC2 API 调用。mywebsite.example.com

CORS 已为亚马逊 EC2 API 启用,可供您使用。您无需执行任何其他配置步骤即可开始使用此功能。您调用 Amazon EC2 API 的方式没有变化;它们仍必须使用有效的 AWS 证书进行签名,以确保 AWS 可以对请求者进行身份验证。有关更多信息,请参阅 I AM 用户指南中的 AWS API 请求签名

在亚马逊 EC2 API 中实现 CORS 是标准化的。您的应用程序可以向 Amazon EC2 API 发送简单请求,或者,根据请求的内容,先发送预检请求,然后发送实际请求。Amazon EC2 允许来自任何来源的请求

有关 CORS 的更多信息及其工作原理示例,请访问 Mozilla 开发者网络上的以下文章:HTTP 访问控制 (CORS)。

简单请求

以下是定义简单或实际请求的标准:

  • 请求仅使用GETPOST HTTP 方法。如果使用该POST方法,则Content-Type只能是以下方法之一:application/x-www-form-urlencodedmultipart/form-data、或text/plain

  • 请求不设置自定义标头,例如X-Other-Header

亚马逊 EC2 允许来自任何来源的请求。GET任何尝试通过将Access-Control-Allow-Credentials值设置为true(其中XMLHttpRequest.withCredentials = true)来使用浏览器凭据的POST请求都将失败。

以下信息描述了向 Amazon EC2 发出的请求标头:

简单请求标头值
  • Origin: 指定想要访问资源的域(在本例中,资源是 Amazon EC2)。这是浏览器在跨域请求中插入的。

以下信息描述了 Amazon EC2 在发出简单或实际请求后返回(或不返回)的响应标头:

简单响应标头值
  • Access-Control-Allow-Origin: 指定可以访问资源的域(在本例中,资源为 Amazon EC2)。它总是以 * 值返回。因此,Amazon EC2 允许任何跨域来源,并且从不允许浏览器证书,例如 Cookie。

  • Access-Control-Allow-Credentials:表示浏览器凭据是否可用于发出实际请求。这件商品永远不会退货。因此,浏览器应将该值解释为Access-Control-Allow-Credentials: false

预检请求

如果您的请求内容符合以下标准,则会检查您的请求是否应发送实际请求。预检请求首先使用该OPTIONS方法向资源(在本例中为 Amazon EC2)发送 HTTP 请求。

以下是定义预检请求的标准:

  • 请求使用除GET或以外的 HTTP 方法POST。但是,如果使用该POST方法,Content-Type则不是以下方法之一:application/x-www-form-urlencodedmultipart/form-data、或text/plain

  • 请求设置自定义标头;例如,X-Other-Header

Amazon EC2 CORS 实现允许任何标头,并允许实际请求中的任何来源。

以下信息描述了向 Amazon EC2 发出的预检请求的请求标头:

预检请求标头值
  • Origin: 指定想要访问资源的域(在本例中,资源是 Amazon EC2)。这是浏览器在跨域请求中插入的。

  • Access-Control-Request-Method:在来自浏览器的实际请求中使用的 HTTP 方法。

  • Access-Control-Request-Headers:要在实际跨源请求中发送的自定义标头。

以下信息是关于 Amazon EC2 在预检请求后返回(或不返回)的响应标头:

预检响应标头值
  • Access-Control-Allow-Origin: 指定可以访问资源的域(在本例中,资源为 Amazon EC2)。它总是以 * 值返回。因此,Amazon EC2 允许任何跨域来源,并且从不允许浏览器证书,例如 Cookie。

  • Access-Control-Allow-Credentials:表示浏览器凭据是否可用于发出实际请求。亚马逊 EC2 永远不会返回。因此,浏览器应将该值解释为Access-Control-Allow-Credentials: false

  • Access-Control-Expose-Headers: 允许将标题暴露给浏览器。亚马逊 EC2 永远不会返回。因此,请求域无法读取来自 Amazon EC2 的返回标头。

  • Access-Control-Max-Age:指定预检请求结果可以缓存多长时间。该值设置为 1800 秒(30 分钟)。

  • Access-Control-Allow-Methods: 表示发出实际请求时允许使用哪些方法。允许使用以下方法:GETPOSTOPTIONSDELETE、和PUT。这还取决于您如何调用亚马逊 EC2 API;例如,使用查询 API 或使用 REST。

  • Access-Control-Allow-Headers: 表示可以在实际请求中使用哪些标头。Amazon EC2 接受预检请求中的所有标头。如果 HTTP 标头与实际请求无关,则会忽略它们。