# 什么是跨域

跨域（Cross-Origin）是指浏览器出于安全考虑，限制从一个源（Origin）加载的资源与另一个源的资源进行交互。源由协议（Scheme）、域名（Host）和端口（Port）组成。如果两个资源的协议、域名或端口不同，就属于跨域。

### 跨域限制的原因
浏览器的同源策略（Same-Origin Policy）旨在防止恶意网站窃取用户数据或发起攻击。例如，阻止一个网页读取另一个域名下的用户信息。

### 跨域示例
- **同源**：`http://example.com/page1` 和 `http://example.com/page2`（协议、域名、端口相同）
- **跨域**：`http://example.com` 和 `https://example.com`（协议不同）
- **跨域**：`http://example.com` 和 `http://api.example.com`（域名不同）
- **跨域**：`http://example.com` 和 `http://example.com:8080`（端口不同）

### 常见的跨域解决方案
1. **CORS（跨域资源共享）**：
   - 服务器设置响应头（如 `Access-Control-Allow-Origin`）允许特定或所有域访问资源。

2. **JSONP（JSON with Padding）**：
   - 通过 `<script>` 标签加载跨域数据，但只支持 GET 请求。

3. **代理服务器**：
   - 在同域服务器上设置代理，转发跨域请求。

4. **WebSocket**：
   - WebSocket 不受同源策略限制，适用于实时通信。

5. **postMessage**：
   - 用于不同窗口或 iframe 之间的跨域通信。
