同源:协议、域名、端口号 必须完全相同。
 违背同源策略就是跨域。
 例如:
 协议:http或者是https
 域名:www.xxx.com
 端口号:80,8000等。
 同源:同一个来源。
同源:可以直接简写服务器页面的地址。
先创建一个服务器。
// 创建并启动服务器---------------------------------------
const express = require('express');
const app = express();
app.listen(80, function () {
    console.log('服务器已启动,地址:127.0.0.1');
});
// 127.0.0.1/home
app.get('/home', function (req, res) {
    // 响应一个页面
    res.sendFile(__dirname + '/23--同源.html');
});
app.get('/data', function (req, res) {
    // 响应一个页面
    res.send('我是服务器的数据');
});
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.staticfile.org/axios/1.3.5/axios.min.js"></script>
</head>
<body>
    <h1>我是同源页面</h1>
    <button>点击获取服务器数据</button>
    <script>
        document.querySelector("button").addEventListener("click", () => {
            axios({
                type: 'get',
                // 因为是这个页面和服务器所处的端口是同源的,故可简写地址
                url: '/data'
            }).then(function (res) {
                console.log(res.data);
            });
        });
    </script>
</body>
</html>

如何解决跨域?
1、jsonp,只支持get操作
JSONP 怎么工作的?
 在网页有一些标签天生具有跨域能力,比如: img link iframe script.
 JSONP 就是利用 script 标签的跨域能力来发送请求的。
2、设置CORS响应头实现跨域
CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS 是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持get 和 post 请求。跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。
CORS 怎么工作的?
 CORS 是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应。
首先是创建并启动服务器
const express = require('express');
const app = express();
app.listen(80, () => {
    console.log('express server running at http://127.0.0.1:80');
});
app.get('/cors-server', (req, res) => {
    res.send('hello cors!');
});
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>发送请求</button>
    <div></div>
    <script>
        const btn = document.querySelector('button');
        btn.addEventListener('click', () => {
            // 1.创建对象
            const xhr = new XMLHttpRequest();
            // 2.初始化设置
            xhr.open('GET', 'http://127.0.0.1:80/cors-server');
            // 3.发送
            xhr.send();
            // 4.绑定事件
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status >= 200 && xhr.status <= 300) {
                        console.log(xhr.response);
                        document.querySelector('div').innerHTML = xhr.response;
                    }
                }
            }
        });
    </script>
</body>
</html>

 
 错误提示是所请求的资源上没有cess-Control-Allow-Origin' 这个标头。
 那在服务器端加上这个标头就可以了。
app.get('/cors-server', (req, res) => {
    // * 表示所有的网站都可以访问
    res.setHeader('Access-Control-Allow-Origin', '*');
    // 表示:只有这个http:127.0.0.1:500/cors-server可以访问。 这个会覆盖上面的
    // res.setHeader('Access-Control-Allow-Origin', 'http:127.0.0.1:500');
    res.send('hello cors!');
});




















