1、什么是域

  1. <!--
  2. 什么是域
  3. taobao.com
  4. -->
  5. <!--
  6. https://www.taobao.com:80
  7. 由协议,子域名,主域名,端口号组成,这四个组成部分,只要有一个不一样,就叫做不同的域
  8. -->
  1. <script>
  2. /* 同源:同一个域 */
  3. /* 由于同源策略的限制,不允许从一个域访问另外一个域 */
  4. /* 什么是同源策略:就是JS只允许从同一个域之间相互访问 */
  5. </script>

2、跨域

2-1.服务器端实现跨域

  1. ctx.set("Access-Control-Allow-Origin","*")

2-2.客户端跨域

服务器端代码

  1. const koa = require("koa");
  2. const app = new koa();
  3. const router = require("koa-router")();
  4. router.get("/jsonp",async ctx=>{
  5. let callbackName = ctx.query.callback || 'callback'
  6. // 返回jsonp
  7. var obj ={
  8. name:"cheng",
  9. age:18
  10. }
  11. ctx.body = callbackName + `(${JSON.stringify(obj)})`
  12. })
  13. app.use(router.routes()).use(router.allowedMethods());
  14. app.listen(7000)

(1)jsonp

  1. Jsonp(JSON with Padding) json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,
  2. 即跨域读取数据。
  1. //在Ajax请求中dataType改为jsonp就可以了
  2. $.ajax({
  3. url:"http://localhost:8080/",
  4. dataType:"jsonp",
  5. success:res=>{
  6. console.log(res)
  7. }
  8. })

(2)script

  1. script不受同源策略的限制
  1. var script = document.createElement("script");
  2. script.src = "http://localhost:8080/?&callback=handleResponse";
  3. document.body.prepend(script);
  4. function handleResponse(res){
  5. console.log(res)
  6. }