JavaScript高级主题:解释一下同源策略(Same-Origin Policy)。

简介: JavaScript高级主题:解释一下同源策略(Same-Origin Policy)。

同源策略(Same-Origin Policy) 是一种安全性措施,被浏览器用于限制一个网页文档或脚本与来自另一个源(域、协议或端口)的资源进行交互的能力。这个策略有助于防止恶意网站利用用户的身份进行跨站请求伪造(CSRF)等攻击。

同源策略的规则包括:

  1. 协议相同(Protocol): 两个页面的协议必须相同,如都为 http 或都为 https

  2. 域相同(Domain): 两个页面的域名必须相同,包括子域名,如 example.comsub.example.com 不属于同源。

  3. 端口相同(Port): 如果指定了端口号,那么两个页面的端口号必须相同,否则将被认为不同源。

同源策略对以下操作进行了限制:

  • DOM 访问: 一个页面中的脚本试图访问另一个页面的 DOM 结构时会受到同源策略的限制。

  • AJAX 请求: 通过 JavaScript 发起的 XMLHttpRequest 或 Fetch 请求也受同源策略的制约。即使两个页面的域名相同,但如果协议或端口不同,同样会被当作不同源。

  • Cookie、LocalStorage 和 IndexDB: 这些存储机制也受到同源策略的限制。一个页面不能访问另一个页面的 Cookie、LocalStorage 或 IndexDB 数据,除非它们满足同源规则。

为了在跨域的情况下进行数据交互,可以使用以下方法:

  • JSONP(JSON with Padding): 通过动态创建 <script> 标签实现跨域请求,但仅支持 GET 请求且存在一些安全性问题。

  • CORS(Cross-Origin Resource Sharing): 是一种基于 HTTP 头的机制,允许服务器声明哪些源可以访问其资源,从而在服务器端进行跨域控制。

  • 代理: 在同一域下设置一个代理服务器,用于转发请求。前端请求发送到同一域下的代理服务器,再由代理服务器转发请求到目标服务器。

相关文章
|
11天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
19 3
|
1月前
|
存储 JavaScript 前端开发
解释 JavaScript 中的作用域和作用域链的概念。
【4月更文挑战第4天】JavaScript作用域定义了变量和函数的可见范围,静态决定于编码时。每个函数作为对象拥有`scope`属性,关联运行期上下文集合。执行上下文在函数执行时创建,定义执行环境,每次调用函数都会生成独特上下文。作用域链是按层级组织的作用域集合,自内向外查找变量。变量查找遵循从当前执行上下文到全局上下文的顺序,若找不到则抛出异常。
21 6
|
12天前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
22 2
|
11天前
|
缓存 JavaScript 前端开发
js开发:请解释什么是Webpack,以及它在项目中的作用。
Webpack是开源的JavaScript模块打包器,用于前端项目构建,整合并优化JavaScript、CSS、图片等资源。它实现模块打包、代码分割以提升加载速度,同时进行资源优化和缓存。Webpack的插件机制可扩展功能,支持热更新以加速开发流程。
16 2
|
12天前
|
JavaScript 前端开发
js开发:请解释this关键字在JavaScript中的用法。
【4月更文挑战第23天】JavaScript的this关键字根据执行环境指向不同对象:全局中指向全局对象(如window),普通函数中默认指向全局对象,作为方法调用时指向调用对象;构造函数中指向新实例,箭头函数继承所在上下文的this。可通过call、apply、bind方法显式改变this指向。
8 1
|
12天前
|
JavaScript 前端开发
js开发:请解释同步和异步编程的区别。
同步编程按顺序执行,易阻塞;异步编程不阻塞,提高效率。同步适合简单操作,异步适合并发场景。示例展示了JavaScript中同步和异步函数的使用。
17 0
|
20天前
|
存储 JavaScript 前端开发
JavaScript DOM 操作:解释一下 cookie、sessionStorage 和 localStorage 的区别。
Cookie是服务器发送至客户端的文本信息,会随每个请求发送回服务器,适合控制会话状态但可能暴露隐私。SessionStorage仅在当前会话中存储数据,关闭浏览器后清除,适合临时存储如登录状态。LocalStorage则持久保存数据,即使关闭浏览器也不会清除,适用于存储长期设置。三种方式各有侧重,应按需求选择。
16 0
|
20天前
|
JavaScript 前端开发 安全
JavaScript DOM 操作:解释一下浏览器的同源策略。
**同源策略**是浏览器安全基石,它阻止脚本跨不同协议、域名或端口访问资源,防止恶意行为。例如,HTTP页面无法直接用JS获取HTTPS页面内容。**CORS**允许跨域请求,但需服务器配合设置,通过`document.domain`属性可配置,但仍受限于服务器配置。
16 4
|
21天前
|
JavaScript 前端开发
JavaScript DOM 操作:解释一下事件冒泡(Event Bubbling)和事件捕获(Event Capturing)。
【4月更文挑战第14天】JavaScript中的事件处理包括冒泡和捕获两个阶段。事件冒泡是从根节点向目标元素逐级向上传播事件,允许在元素内部捕获外部事件。事件捕获则相反,从根节点向下到目标元素,使得外部能捕获内部事件。`addEventListener`方法用于添加事件监听器,通过`useCapture`参数切换冒泡或捕获阶段处理事件,默认为`false`(冒泡阶段)。兼容性考虑,推荐使用`addEventListener`。
20 0
|
22天前
|
JavaScript 前端开发
JavaScript高级主题:什么是 ES6 的解构赋值?
【4月更文挑战第13天】ES6的解构赋值语法简化了从数组和对象中提取值的过程,提高代码可读性。例如,可以从数组`[1, 2, 3]`中分别赋值给`a`, `b`, `c`,或者从对象`{x: 1, y: 2, z: 3}`中提取属性值给同名变量。
18 6