问题延申由来,csrf攻击
在浏览器中,同源策略规定了哪些资源可以相互访问。同源策略的核心是同源的概念,同源是指协议、域名和端口三者相同。
因此,端口不同时,不同域。
例如,以下两个 URL 是不同源的:
http://www.example.com/index.htmlhttp://www.example.com:8080/index.html
虽然这两个 URL 的协议和域名相同,但端口不同,因此属于不同域。
如何理解这句话?
可以将 协议、域名和端口理解为三个维度,同源意味着三个维度完全相同。
- 协议:指的是用于传输数据的约定,例如 HTTP、HTTPS 等。
- 域名:指的是网站的地址,例如
www.example.com。 - 端口:指的是用于连接特定服务的数字,例如 80、8080 等。
不同域意味着至少有一个维度不同。
例如,以下情况都属于不同域:
-
协议不同:
http://www.example.com/index.htmlhttps://www.example.com/index.html
-
域名不同:
http://www.example.com/index.htmlhttp://www.example.org/index.html
-
端口不同:
http://www.example.com/index.htmlhttp://www.example.com:8080/index.html
跨域请求
当浏览器发起跨域请求时,会受到同源策略的限制。例如,不能通过 JavaScript 代码直接访问另一个域的资源。
为了解决跨域问题,可以采用以下几种方法:
- 使用 CORS:CORS 是一种允许跨域请求的机制。
- 使用 JSONP:JSONP 是一种利用 JSON 格式数据进行跨域请求的技术。
- 使用代理:代理服务器可以将跨域请求转换为同域请求。