1、什么是域
<!-- 什么是域 taobao.com --> <!-- https://www.taobao.com:80 由协议,子域名,主域名,端口号组成,这四个组成部分,只要有一个不一样,就叫做不同的域 -->
<script> /* 同源:同一个域 */ /* 由于同源策略的限制,不允许从一个域访问另外一个域 */ /* 什么是同源策略:就是JS只允许从同一个域之间相互访问 */ </script>
2、跨域
2-1.服务器端实现跨域
ctx.set("Access-Control-Allow-Origin","*")
2-2.客户端跨域
服务器端代码
const koa = require("koa");const app = new koa();const router = require("koa-router")();router.get("/jsonp",async ctx=>{ let callbackName = ctx.query.callback || 'callback' // 返回jsonp var obj ={ name:"cheng", age:18 } ctx.body = callbackName + `(${JSON.stringify(obj)})`})app.use(router.routes()).use(router.allowedMethods());app.listen(7000)
(1)jsonp
Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
//在Ajax请求中dataType改为jsonp就可以了 $.ajax({ url:"http://localhost:8080/", dataType:"jsonp", success:res=>{ console.log(res) } })
(2)script
script不受同源策略的限制
var script = document.createElement("script");script.src = "http://localhost:8080/?&callback=handleResponse";document.body.prepend(script);function handleResponse(res){ console.log(res)}