首页 > 试题广场 >

以下哪一种方案可以实现跨域XMLHttpRequest请求?

[单选题]
以下哪一种方案可以实现跨域XMLHttpRequest请求?( )

  • CSP
  • CORS
  • AJAX
  • OAuth
A. CSP(Content Security Policy) 内容安全策略,用于浏览器层面上检测和一定程度防范如 XSS 、注入等攻击。
B. CORS(Cross-Origin Resource Sharing) 跨域资源共享,允许跨域的访问控制与数据传输。
C. AJAX(Asynchronous JavaScript + XML) 异步 JS 和 XML,最早用于无刷新页面更新数据,算是一种工作机制,该跨域请求的时候还是要做相应的跨域处理。
D. OAuth,一种开放的安全授权协议,八竿子打不着。
发表于 2017-09-13 05:14:46 回复(0)
答案:B
解析
B、CORS
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信
(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

对于简单请求,浏览器直接发出CORS请求。具体来说,就是在头信息之中,增加一个Origin字段。
下面是一个例子,浏览器发现这次跨源AJAX请求是简单请求,就自动在头信息之中,添加一个Origin字段。

GET /cors HTTP/1.1
Origin: http://api.bob.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

上面的头信息中,Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。
如果Origin指定的源,不在许可范围内,服务器会返回一个正常的HTTP回应。浏览器发现,这个回应的头信息没有包含Access-Control-Allow-Origin字段(详见下文),就知道出错了,从而抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。注意,这种错误无法通过状态码识别,因为HTTP回应的状态码有可能是200。
如果Origin指定的域名在许可范围内,服务器返回的响应,会多出几个头信息字段。

Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8
详细内容见:阮一峰老师的博客:http://www.ruanyifeng.com/blog/2016/04/cors.html

对于A、CSP
为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。

对于D、OAuth
OAuth是一个关于授权(authorization)的开放网络标准
详细内容见阮一峰老师的博客:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

发表于 2017-01-23 14:34:47 回复(0)