要了解跨域,首先要了解什么是同源策略

        同源策略:

        同源策略是浏览器的一种安全策略:指两个网址的协议、ip、端口号port 三者一致,即代表同源,也就是属于同一服务器。

比如:

(1)http://www.baidu.com/index.html

http://www.baidu.com/news

以上两个网址属于同源,因为pathname不会参与同源的判断

(2)http://www.baidu.com/index.html

https://www.baidu.com/index.html

以上两个网址不同源,因为它们的协议不一样 ,一个是http协议,一个是https协议

(3)http://www.baidu.com/index.html

http://www.baidu.cn/index.html

以上两个网址不同源,因为它们的域名不一样

(4)http://www.baidu.com/index.html  (假设域名DNS解析为:192.168.1.111:8081)

http://192.168.1.111:8081/index.html

这两者的网址是同源

         概念:

所谓跨域就是浏览器为了用户信息安全,当网页中有一个网络请求技术(AJAX),在进行网络请求时,请求的网址和当前页面的网址不属于同一台服务器,那么就会被拒绝接收服务器发送的数据信息。

router.js代码:

var fs=require("fs")
var url=require("url")
var querysting=require("querystring")
var mime=require("mime")
let urls={}
var http=require("http")let router=function(req,res){//这个函数每次用户访问时运行let pathname=url.parse(req.url).pathnamefs.readFile(router.basepath+pathname,(err,data)=>{if(!err){res.setHeader("content-Type",mime.getType(pathname))res.end(data)}else{if(!urls[pathname]){res.end("404 not found-mymvc")}else{urls[pathname](req,res)}}})
}
router.static=function(path){this.basepath=path
}router.get=function(url,cb){urls[url]=cb
}
router.basepath=__dirname+"/public"
http.createServer(router).listen(8081)
module.exports=router;

controller.js代码:

module.exports={homegoods(req,res){var obj={data:[{title:"米饭",price:2,des:"好吃"},{title:"鱼香肉丝",price:20,des:"好吃"},{title:"水煮肉片",price:25,des:"好吃"}]}var str=JSON.stringify(obj)res.setHeader("content-Type","text/json;charset=utf8")res.end(str)},car(req,res){var obj={data:[{title:"小面",price:18,des:"好吃",count:1},{title:"牛排",price:182,des:"好吃",count:1},{title:"宫保鸡丁",price:25,des:"好吃",count:2}]}var str=JSON.stringify(obj)res.setHeader("content-Type","text/json;charset=utf8")res.end(str)}
}

index.js文件:

const controller = require("./controller.js")
var router = require("./router.js")router.get("/homegoods",controller.homegoods)
router.get("/car",controller.car)

public文件夹中的index.html文件:

<h1>taobao --- home</h1><button id="btn">点击使用ajax请求数据</button><script>var btn = document.querySelector("#btn")btn.addEventListener("click",function() {var xhr = new XMLHttpRequest || new ActiveXObject("Microsoft.XMLHTTP")xhr.open("GET","http://192.168.0.114:8081/car",true)xhr.send()xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {console.log(xhr.responseText);}}})</script>

如果直接在public文件夹中的index.html页面,点击按钮,是可以通过ajax技术获取数据的,因为它们是同源的

而如果再新建一个test文件夹,其中index.html文件也再去请求相同的数据,那么就会报跨域错误,而无法请求到数据

    <h1>taobao --- car</h1><button id="btn">点击请求ajax数据</button><script>var btn = document.querySelector("#btn")btn.addEventListener("click",function() {var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP")xhr.open("GET","http://192.168.0.114:8081/car",true)xhr.send()xhr.onreadystatechange = function() {if (xhr.readyState == 2 && xhr.status == 200) {console.log(xhr.responseText);}}})</script>

注意:跨域请求时 ,前端是请求了跨域的后端,只是返回的数据被浏览器拒收了,并不是跨域了就不发网络请求。

网络请求——跨域 的概念相关推荐

  1. 记录uni-app网络请求跨域、安卓打包后网络请求报错

    跨域 测试方法如下:网络请求接口地址玩安卓的开放API:https://wanandroid.com/article/listproject/0/json 注意url是完整地址,并且manifest. ...

  2. Tomcat中的字体请求跨域问题解决

    Tomcat中的字体请求跨域问题解决 原作者地址: https://blog.csdn.net/u011974399/article/details/79990505 修改tomcat的web.xml ...

  3. 关于vue-cli3中配置请求跨域的问题

    关于vue-cli3中配置请求跨域的问题 根据Vue CLI3官方文档, 需要在vue.config.js文件中配置devServer.proxy选项来解决跨域问题. 1.关于vue.config.j ...

  4. SpringMVC中的异步请求-跨域访问

    发送异步请求: <%@page pageEncoding="UTF-8" language="java" contentType="text/h ...

  5. 关于ajax post请求跨域问题的解决心得

    关于ajax post请求跨域问题的解决心得 参考文章: (1)关于ajax post请求跨域问题的解决心得 (2)https://www.cnblogs.com/guaishushulz/p/670 ...

  6. React项目中请求跨域解决方法

    React项目中请求跨域解决方法 今天经理给我了一个React项目地址,让我拉下来并跑起来,拉下来运行起来后,发现所有的请求都失败了,并且都是由于跨域问题导致的.花了点时间,解决了这个问题,在这里记录 ...

  7. 解决POST请求跨域问题

    解决POST请求跨域问题 今天在做项目的时候.出现了POST请求跨域失败,而GET请求跨域成功的很奇怪的情况,自己为此研究了好久,特此做个记录. 场景:前端发起POST请求后端接口时,报错,错误如下: ...

  8. WebApp开发:ajax请求跨域问题的解决

    WebApp开发:ajax请求跨域问题的解决 参考文章: (1)WebApp开发:ajax请求跨域问题的解决 (2)https://www.cnblogs.com/code-style/p/42094 ...

  9. 解决ajax请求跨域,解决ajax请求跨域

    跨域大部分需要通过后台解决,引起跨域的原因: 3个问题同时满足 才可能产生跨域问题,即跨域(协议,主机名,端口号中有一个不同就产生跨域) 下面是解决方法 方法一 // ajax请求跨域 /* *解决a ...

最新文章

  1. js const 和 var 的区别
  2. Julia程序设计2 数值类型
  3. OPC的数据访问方法分别有同步访问、异步访问和订阅式
  4. 实时通信:使用Spring Boot实现Websocket
  5. 前端学习(1963)vue之电商管理系统电商系统之控制级联选择框的选择范围
  6. echars显示折点数据_数据可视化的基础语法
  7. 混凝土墙开洞_新乐专业混凝土切割报价适中
  8. 内部排序的方法实验报告_python 十大经典排序算法
  9. EIGRP and the OSPF redistribute
  10. 单位阶跃信号是周期信号吗_vivoS7e是5G手机吗-支持5G吗-5G信号怎么样
  11. linux 安装sysstat使用iostat、mpstat、sar、sa(转载)
  12. 图论及其应用 2018年期末考试 答案总结
  13. 【微信小程序】数据绑定
  14. ThinkPad T440屏幕关闭之后硬盘狂响的解决方案
  15. 如何看懂这些该死的图形学公式
  16. 面试姊妹篇4:常见的Java多线程面试题
  17. 如何成为某一领域的高手
  18. 人工智能训练师数加加标注培训系统正式上线
  19. 3dmax一键展uv_3dmax插件下载 3DSMAX展UV贴图插件 Unwrap Pro V1.02 For 2008 – 2018
  20. java new Filereader_Java FileReader类 - Java 教程 - 自强学堂

热门文章

  1. 工信部关白玉处长详解“核高基”
  2. python中的ideavim有什么作用_【进击的Vimmer】为什么选择vim
  3. Android平台证件识别系统
  4. 《算法竞赛进阶》学习笔记
  5. 概要设计和详细设计区别_小程序设计和APP设计的区别
  6. signature=07da782715954d48aa05e9d49faf92a9,ndls-20201029
  7. 银河5 号超级计算机,全球超级计算机500强最新排行 天河一号第五
  8. 实现用户对电影评分,包括不超过10部电影和5个用户,每部电影包括电影编号、名称和得分(1-5),用户评分完成后,输出各电影的得分以及最受欢迎电影。
  9. PCIe LTSSM 之 Detect 状态
  10. 慧驱动正弦高频注入FOC学习笔记