如何理解“端口不同时不同域”这句话

105 阅读1分钟

问题延申由来,csrf攻击

在浏览器中,同源策略规定了哪些资源可以相互访问。同源策略的核心是同源的概念,同源是指协议域名端口三者相同。

因此,端口不同时,不同域

例如,以下两个 URL 是不同源的:

  • http://www.example.com/index.html
  • http://www.example.com:8080/index.html

虽然这两个 URL 的协议和域名相同,但端口不同,因此属于不同域。

如何理解这句话?

可以将 协议域名端口理解为三个维度,同源意味着三个维度完全相同。

  • 协议:指的是用于传输数据的约定,例如 HTTP、HTTPS 等。
  • 域名:指的是网站的地址,例如 www.example.com
  • 端口:指的是用于连接特定服务的数字,例如 80、8080 等。

不同域意味着至少有一个维度不同

例如,以下情况都属于不同域:

  • 协议不同:

    • http://www.example.com/index.html
    • https://www.example.com/index.html
  • 域名不同:

    • http://www.example.com/index.html
    • http://www.example.org/index.html
  • 端口不同:

    • http://www.example.com/index.html
    • http://www.example.com:8080/index.html

跨域请求

当浏览器发起跨域请求时,会受到同源策略的限制。例如,不能通过 JavaScript 代码直接访问另一个域的资源。

为了解决跨域问题,可以采用以下几种方法:

  • 使用 CORS:CORS 是一种允许跨域请求的机制。
  • 使用 JSONP:JSONP 是一种利用 JSON 格式数据进行跨域请求的技术。
  • 使用代理:代理服务器可以将跨域请求转换为同域请求。