API 管理跨域策略

本主题提供以下 API 管理策略的参考。 有关添加和配置策略的信息,请参阅 API 管理中的策略

跨域策略

  • 允许跨域调用 - 使 API 能够通过 Adobe Flash 和基于 Microsoft Silverlight 浏览器的客户端进行访问。

  • CORS - 向操作或 API 添加跨源资源共享 (CORS) 支持,允许从基于浏览器的客户端进行跨域调用。

  • JSONP - 向操作或 API 添加填充型 JSON (JSONP) 支持,以便从基于 JavaScript 浏览器的客户端执行跨域调用。

允许跨域调用

使用 cross-domain 策略使 API 能够通过 Adobe Flash 和基于 Microsoft Silverlight 浏览器的客户端进行访问。

策略语句

<cross-domain>  
   <!-Policy configuration is in the Adobe cross-domain policy file format,   
      see http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html-->  
</cross-domain>  

示例

<cross-domain>  
    <cross-domain-policy>  
        <allow-http-request-headers-from domain='*' headers='*' />  
    </cross-domain-policy>  
</cross-domain>  

元素

名称 说明 必选
cross-domain 根元素。 子元素必须符合 Adobe 跨域策略文件规范

使用情况

此策略可在以下策略范围中使用。

  • 策略节:入站

  • 策略范围:全局

CORS

cors 策略向操作或 API 添加跨源资源共享 (CORS) 支持,以便从基于浏览器的客户端执行跨域调用。

CORS 允许浏览器与服务器交互,并确定是否允许特定的跨源请求(即,通过某个网页上的 JavaScript 对其他域执行的 XMLHttpRequests 调用)。 与只允许同源请求相比,它的灵活性更高,而且比允许所有跨源请求更安全。

策略语句

<cors allow-credentials="false|true">  
    <allowed-origins>  
        <origin>origin uri</origin>  
    </allowed-origins>  
    <allowed-methods preflight-result-max-age="number of seconds">  
        <method>http verb</method>  
    </allowed-methods>  
    <allowed-headers>  
        <header>header name</header>  
    </allowed-headers>  
    <expose-headers>  
        <header>header name</header>  
    </expose-headers>  
</cors>  

示例

此示例演示如何支持预检请求,例如那些使用自定义标头或 GET 和 POST 之外的方法的预检请求。 若要支持自定义标头和其他 HTTP 谓词,请使用 allowed-methodsallowed-headers 部分,如以下示例所示。

<cors allow-credentials="true">  
    <allowed-origins>  
        <!-- Localhost useful for development -->  
        <origin>http://localhost:8080/</origin>  
        <origin>http://example.com/</origin>  
    </allowed-origins>  
    <allowed-methods preflight-result-max-age="300">  
        <method>GET</method>  
        <method>POST</method>  
        <method>PATCH</method>  
        <method>DELETE</method>  
    </allowed-methods>  
    <allowed-headers>  
        <!-- Examples below show Azure Mobile Services headers -->  
        <header>x-zumo-installation-id</header>  
        <header>x-zumo-application</header>  
        <header>x-zumo-version</header>  
        <header>x-zumo-auth</header>  
        <header>content-type</header>  
        <header>accept</header>  
    </allowed-headers>  
    <expose-headers>  
        <!-- Examples below show Azure Mobile Services headers -->  
        <header>x-zumo-installation-id</header>  
        <header>x-zumo-application</header>  
    </expose-headers>  
</cors>  

元素

名称 说明 必选 默认
cors 根元素。 不适用
allowed-origins 包含的 origin 元素说明了跨域请求的允许来源。 allowed-origins 可以包含单个 origin 元素,该元素指定 * 以允许任何源,也可以包含一个或多个内含 URI 的 origin 元素。 不适用
origin 值可以是 * 以允许所有源,也可以是指定单个源的 URI。 URI 必须包括方案、主机和端口。 如果 URI 中省略了端口,则端口 80 用于 HTTP,端口 443 用于 HTTPS。
allowed-methods 如果允许 GET 或 POST 之外的方法,则此元素是必需的。 包含 method 元素,用于指定支持的 HTTP 谓词。 如果此部分不存在,则支持 GET 和 POST。
方法 指定 HTTP 谓词。 如果 allowed-methods 部分存在,则至少一个 method 元素是必需的。 不适用
allowed-headers 此元素包含 header 元素,用于指定可以包括在请求中的标头的名称。 不适用
expose-headers 此元素包含 header 元素,用于指定可以通过客户端访问的标头的名称。 不适用
标头的值开始缓存响应 指定标头名称。 如果此部分存在,则 allowed-headersexpose-headers 中至少有一个 header 元素是必需的。 不适用

属性

名称 说明 必选 默认
allow-credentials 预检响应中的 Access-Control-Allow-Credentials 标头将设置为此属性的值,并且会影响客户端在跨域请求中提交凭据的功能。 false
preflight-result-max-age 预检响应中的 Access-Control-Max-Age 标头将设置为此属性的值,并且会影响用户代理缓存预检响应的功能。 0

使用情况

此策略可在以下策略范围中使用。

  • 策略节:入站

  • 策略范围:API、操作

JSONP

jsonp 策略向操作或 API 添加填充型 JSON (JSONP) 支持,以便从基于 JavaScript 浏览器的客户端执行跨域调用。 JSONP 是 JavaScript 程序中使用的方法,用于从不同域中的服务器请求数据。 JSONP 规避了大多数 Web 浏览器强制实施的只能在同一域中访问网页的限制。

策略语句

<jsonp callback-parameter-name="callback function name" />  

示例

<jsonp callback-parameter-name="cb" />  

如果调用此方法时没有设置回调参数 ?cb=XXX,此方法将返回无格式 JSON(不带函数调用包装)。

如果添加回调参数 ?cb=XXX,它将返回 JSONP 结果,并使用原始 JSON 结果包装回调函数,例如 XYZ('<json result goes here>');

元素

名称 说明 必选
jsonp 根元素。

属性

名称 说明 必选 默认
callback-parameter-name 以函数所在的完全限定域名为前缀的跨域 JavaScript 函数调用。 不适用

使用情况

此策略可在以下策略范围中使用。

  • 策略节:出站

  • 策略范围:全局、产品、API、操作

后续步骤

有关如何使用策略的详细信息,请参阅 API 管理中的策略