Skip to Content
操作指南开放API跨域访问

跨域共享

什么是跨域共享

跨域资源共享(CORS)是一种机制,它使用额外的HTTP头来告诉浏览器,让运行在一个域名(domain)上的Web应用被准许访问来自不同域名的服务器 上的指定资源,当一个资源从与该资源本身所在的服务器不同的域,协议或端口请求一个资源时,资源会发起一个跨域HTTP请求。 浏览器处于安全考虑,会限制从脚本内发起的跨域HTTP请求。例如XMLHttpRequest和Fetch。 API遵循同源策略,这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确的CORS响应头。

简单请求与非简单请求

对于跨域HTTP请求,浏览器会根据发送API的结构内,来判断请求是否是一个简单跨域请求。一个非简单跨域请求会在请求前发送一个Method为OPTIONS 的请求进行预检(pre-flight)。包含以下条件的请求可视为简单请求:

  • 使用下列方法之一:

    • GET
    • HEAD
    • POST
  • 只能包含以下HTTP头

    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type (需要注意额外的限制)
    • DPR
    • Downlink
    • Save-Data
    • Viewport-Width
    • Width
  • Content-Type 的值仅限于下列三者之一:

    • text/plain
    • multipart/form-data
    • application/x-www-form-urlencoded
  • 请求中的任意XMLHttpRequestUpload 对象均没有注册任何事件监听器;XMLHttpRequestUpload 对象可以使用 XMLHttpRequest.upload 属性访问。

  • 请求中没有使用 ReadableStream 对象。

UAPIGateway对于CORS的支持

对于已经绑定了CORS跨域策略的API,UAPIGateway会根据后端的响应内容来决定是否加上CORS响应头。如后端无任何CORS响应头,UAPIGateway会加上以下响应头

Access-Control-Allow-Origin : $http_origin Access-Control-Allow-Header : X-Gw-Signature-Method,X-Gw-Signature-Headers,X-Gw-Signature-Headers,X-Gw-Timestamp,X-Gw-Timestamp,X-Gw-SignedString,X-Gw-Stage,Authorization,Content-Type,Accept,Accept-Ranges,Cache-Control,Range Access-Control-Allow-Method : POST,GET,DELETE,OPTIONS,HEAD,PUT Access-Control-Expose-Header : X-Gw-Signature-Method,X-Gw-Signature-Headers,X-Gw-Signature-Headers,X-Gw-Timestamp,X-Gw-Timestamp,X-Gw-SignedString,X-Gw-Stage,Authorization,Content-Type,Accept,Accept-Ranges,Cache-Control,Range Access-Control-Allow-CREDENTIALS: true

对于返回了CORS的Header中的任一响应头的请求,我们视其为用户想要自行进行CORS响应头的处理,UAPIGateway不对CORS响应头做任何处理。