View a markdown version of this page

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

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

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

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

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

在 Amazon 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

Amazon EC2 允许来自任何来源的请求。任何尝试通过将Access-Control-Allow-Credentials值设置为true(whereXMLHttpRequest.withCredentials = true)来使用浏览器凭据的GETPOST请求都将失败。

以下信息描述了 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:表示浏览器凭据是否可用于发出实际请求。Amazon EC2 从来没有退回过这件商品。因此,浏览器应将该值解释为Access-Control-Allow-Credentials: false

  • Access-Control-Expose-Headers:允许向浏览器公开标题。Amazon EC2 从来没有退回过这件商品。因此,请求的域无法读取来自 Amazon EC2 的返回标头。

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

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

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