admin 管理员组

文章数量: 887021


2024年1月10日发(作者:乱世佳人完整版在线观看电影)

cors解决跨域原理

当今的Web应用程序,在实现资源访问的时候,出于安全考虑,浏览器默认存在安全跨域限制,其原因是因为浏览器执行JavaScript脚本时,如果脚本来自不同的域,会危及用户计算机上保存的数据。CORS(Cross-Origin Resource Sharing,跨域资源共享)就是一个基于HTTP头部的机制, 能够让服务器与客户端之间,实现安全授权访问跨域资源。下面,我们将从CORS的请求流程及解决方案等几个方面,详细介绍CORS的工作原理。

一、请求流程

1. 在请求头部中指明跨域类型。 当前,主流浏览器网页使用XMLHttpRequest对象的方式来发出Ajax请求,并在请求头部中使用“X-Requested-With”标识一个字符串。“X-Requested-With”的值一般是:"XMLHttpRequest",供网站服务器辨别请求是否是Ajax请求。

2. 浏览器发现收到的响应头部中包含了CORS允许的关键字,如Access-Control-Allow-Origin,Access-Control-Allow-Methods等。

3. 浏览器将AJAX请求的readyState状态设置为2(收到响应头部)。

4. 如果响应头部中既没有Access-Control-Allow-Origin也没有Access-Control-Allow-credentials标签,浏览器就停止AJAX请求,并抛出CORS安全错误。

5. 然后,如果响应头部中包含了Access-Control-Allow-Origin,表示该响应能够被指定的域所访问。

6. 如果响应头部中包含了Access-Control-Allow-Credentials标签,表示服务器允许带身份凭证的请求访问该资源,那么浏览器会继续通过AJAX请求的方式发起实际的请求。

7. 响应头部中还有其他关键字,如:Access-Control-Allow-Methods,Access-Control-Allow-Headers,Access-Control-Expose-Headers等,这些关键字规定了服务器允许浏览器使用哪些HTTP请求

方法、HTTP请求头部信息,以及是否暴露响应头部信息。

二、解决方案

对于跨域访问,目前有四种解决方案,下面进行一一介绍。

1. JSONP原理

JSONP是一种操作方式,通过动态修改网页来实现跨域访问的。例如,使用script标签可以进行一个跨域请求。

2. 代理

代理是服务器上一个程序,可以接收request请求,然后将请求发送到目标服务器并接收目标服务器的响应,最后返回给客户端。代理可以实现浏览器端的跨域访问,客户端通过向自己的服务器发送request,然后自己的服务器又向目标服务器发送request,然后返回目标服务器的响应。这样客户端和目标服务器之间就没有跨域的风险了。

3. WebSocket

WebSocket是HTML5的一种新特性,其原理是:在页面打开时,首先“升级”协议,完成约定后直接使用TCP协议。

4. CORS

CORS 是一种很新的跨域解决方案。CORS定义必须服务器正确配置Access-Control-Allow-Origin,浏览器才能够安全地进行跨域访问。服务器在响应头部如果设置了“Access-Control-Allow-Origin”的值为请求域名,则该域名可以访问服务器指定的资源。

总体来说,跨域的问题是前端开发中常遇到的问题,需要通过深入理解CORS的原理和常用解决方案,才能在实际开发中遇到问题时,能够找到更好的解决方案。


本文标签: 请求 跨域 服务器 浏览器 头部