跨域和使用SpringSecurity实现跨域资源共享(CORS)

跨域:跨域是一种浏览器同源安全策略,即浏览器单方面限制脚本的跨域访问。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。实际上,不仅不同站点间的访问存在跨域问题,同站点间的访问可能也会遇到跨域问题,只要请 求的URL与所在页面的URL首部不同即产生跨域。

跨域又分为了协议跨域、主机跨域、端口跨域。

  • 协议跨域:http://www.baidu.com和https://www.baidu.com 只是协议不同而已
  • 主机跨域:https://mail.163.com/ 和 https://music.163.com/
  • 端口跨域:http://www.adomain.com:80 和http://www.adomain.com:8080

CORS(Cross-Origin Resource Sharing)的规范中有一组新增的HTTP首部字段,允许服务器声明其 提供的资源允许哪些站点跨域使用。通常情况下,跨域请求即便在不被支持的情况下,服务器也会接 收并进行处理,在CORS的规范中则避免了这个问题。浏览器首先会发起一个请求方法为OPTIONS 的 预检请求,用于确认服务器是否允许跨域,只有在得到许可后才会发出实际请求。此外,预检请求还 允许服务器通知浏览器跨域携带身份凭证

跨域和使用SpringSecurity实现跨域资源共享(CORS)_第1张图片
image.png

CORS新增的HTTP首部字段由服务器控制,下面是新增的HTTP首部字段:

  • Access-Control-Allow-Origin:允许的值为 站点列表或者*号。* 代表允许所有站点.
  • Access-Control-Allow-Methods字段仅在预检请求的响应中指定有效,用于表明服务器允许跨域的 HTTP方法,多个方法之间用逗号隔开。
  • Access-Control-Allow-Headers 字段仅在预检请求的响应中指定有效,用于表明服务器允许携带的 首部字段。多个首部字段之间用逗号隔开。
  • Access-Control-Max-Age 字段用于指明本次预检请求的有效期,单位为秒。在有效期内,预检请求不需要再次发起。
  • 当Access-Control-Allow-Credentials字段取值为true时,浏览器会在接下来的真实请求中携带用户凭
    证信息(cookie等)
    总体来说,CORS 是一种更安全的官方跨域解决方案,它依赖于浏览器和后端,即当需要用CORS 来解决跨域问题时,只需要后端做出支持即可。前端在使用这些域时,基本等同于访问同源站点资源。
    更多CORS详解见http://www.ruanyifeng.com/blog/2016/04/cors.html

你可能感兴趣的:(跨域和使用SpringSecurity实现跨域资源共享(CORS))