JavaScript中的跨域问题

接下来要讲的是 JavaScript中的跨域 这个奇葩的问题,很多人在面试的时候也是被闻到自闭的问题。我会从下面三个方面去讲

1.什么是跨域?

跨域:跨域是指从一个域名的网页去请求另一个域名的资源。比如:从 www.baidu.com 这个域名去访问 www.taobao.com这个域名下数据,正常请求的情况下是失败的,失败的原因就是就 跨域请求了,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域

2.什么是同源策略?

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,所谓同源是指,域名,协议,端口相同

如果非同源(域名,协议,端口只要有其中一个不相同就是非同源),那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

  • 非同源受到的限制
    • cookie不能读取 (如我在自己的站点无法读取博客园用户的cookie)
    • dom无法获得
    • ajax请求不能发送

3.为什么要跨域请求数据

既然有安全问题,那为什么又要跨域呢? 有时公司内部有多个不同的子域,比如一个是A域 ,而应用是放在B域 , 这时想从 B域去访问 A域的资源就属于跨域。

4.解决跨域的方法

(1)跨域资源共享(CORS)

(2)通过jsonp跨域

(3)nginx代理跨域

(4)nodejs中间件代理跨域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
跨域是指在浏览器,当一个网页的脚本试图访问不同源(域、协议或端口)的资源时,就会发生跨域问题。这是由于浏览器的同源策略所限制的安全机制。 同源策略要求网页只能与同一域名、协议和端口的资源进行交互,而不能直接访问其他域名下的资源。跨域问题常见于以下场景: 1. Ajax请求:当使用XMLHttpRequest或Fetch API发送Ajax请求时,浏览器会检查请求的目标是否与当前页面具有相同的源。如果不同源,则会触发跨域问题。 2. 脚本访问:当一个网页的脚本尝试访问不同源的资源(如通过<script>标签引入的外部脚本),也会触发跨域问题。 为了解决跨域问题,可以采取以下方法: 1. JSONP(JSON with Padding):通过动态创建<script>标签,将需要获取的数据作为回调函数的参数传递给服务器,服务器将数据包装在回调函数返回给客户端。由于<script>标签没有同源限制,因此可以实现跨域请求。 2. CORS(Cross-Origin Resource Sharing):在服务器端设置响应头,允许指定的域名访问资源。通过在响应头添加"Access-Control-Allow-Origin"字段,可以指定允许访问的域名。浏览器在收到响应时会检查该字段,如果允许访问,则将响应返回给客户端。 3. 代理服务器:在同源策略下,可以通过在服务器端设置代理,将客户端的请求转发到目标服务器上,并将响应返回给客户端。这样客户端就可以绕过跨域限制。 4. WebSocket:WebSocket协议不受同源策略的限制,可以在不同源之间建立持久化的双向通信连接,实现跨域通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值