本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Cross-origin 资源共享支持和 Amazon EC2
Amazon EC2 API 支持跨源资源共享 (CORS)。CORS 为加载到一个域中的客户端 Web 应用程序定义了一种与不同域中的资源进行交互的方式。有关更多信息,请访问Cross-Origin 资源共享 W3C 建议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)
简单请求
以下是定义简单请求或实际请求的标准:
-
请求仅使用
GET或POSTHTTP 方法。如果使用该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)来使用浏览器凭据的GET或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:表示浏览器凭据是否可用于发出实际请求。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:表示在发出实际请求时允许使用哪些方法。允许使用以下方法:GET、POSTOPTIONS、DELETE、和PUT。这还取决于您如何调用 Amazon EC2 API;例如,使用查询 API 或使用 REST。 -
Access-Control-Allow-Headers:表示可以在实际请求中使用哪些标头。Amazon EC2 接受预检请求中的任何标头。如果 HTTP 标头与实际请求无关,则会将其忽略。