热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跨域,相識一下

跨域的明白跨域,望文生義,即為請求了差別域的資本。相識跨域這件事,我們先看看致使會存在跨域題目的泉源:瀏覽器的同源戰略瀏覽器的同源戰略又是什麼鬼?彷佛相識一點,然則又說不清楚。此次
跨域的明白

跨域,望文生義,即為請求了差別域的資本。
相識跨域這件事,我們先看看致使會存在跨域題目的泉源:瀏覽器的同源戰略
瀏覽器的同源戰略又是什麼鬼? 彷佛相識一點,然則又說不清楚。此次我們就來細緻探究一下。

聲明一下,本文是參考浩瀚其他有關跨域文章連繫本身手藝熟悉所做的紀錄,請與
瀏覽器同源政策及其躲避要領參考着看越發適宜。

同源戰略:(the same-origin policy)

MDN
維基百科:
In computing, the same-origin policy is an important concept in the web application security model. Under the policy, a web browser permits scripts contained in a first web page to access data in a second web page, but only if both web pages have the same origin. An origin is defined as a combination of URI scheme, host name, and port number. This policy prevents a malicious script on one page from obtaining access to sensitive data on another web page through that page’s Document Object Model.
簡樸翻譯一下:
在web運用平安模子中,同源戰略是一個主要的觀點。在該戰略下,僅倆個頁面有雷同的源, web瀏覽器才許可包括在第一個頁面中的劇本接見第二個web頁面的數據。源被定義為 URI協定,主機名,端口號的組合。該戰略阻撓了一個頁面的歹意劇本經由過程文檔對象模子(DOM)取得其他的web頁面的敏感數據.
那為何會有同源戰略呢,能夠參考一下,CSRF這篇文章談到CSRF這類狀況。
那哪些數據會被限定呢?
敏感數據平常指的是瀏覽器中的COOKIEs, SessionStorage, LocalStorage, IndexedDB數據, CacheStorage, ApplicationCache…;

同源戰略限定局限

阮一峰先生還對同源戰略關於非同源,限定的行動做了歸結:


假如非同源,共有三種行動受到限定。
(1) COOKIE、LocalStorage 和 IndexDB 沒法讀取。
(2) DOM 沒法取得。
(3) AJAX 請求不能發送。
雖然這些限定是必要的,然則偶然很不輕易,合理的用處也受到影響。下面,我將細緻引見,怎樣躲避上面三種限定。

以下對阮先生總結的要領舉行測試

COOKIEs

瀏覽器許可經由過程設置document.domain同享 COOKIE。
document.domain的寫操縱是有請求的。只能寫入基本域名和當前域名,其他域名是沒法寫入的,所以domain這類體式格局只能在親子域名之間同享COOKIEs
// 因為還沒有相干資本(三級域名資本,域名資本),沒有做考證

iframe

頁面1 localhost:8080的頁面,包括一個頁面2 (iframe = http://localhost:8081);
頁面2中接見window.parent.document報跨源毛病
在頁面2中window.parent能夠接見,然則在iframe中接見獵取到的window.parent對象中屬性缺少了有關DOM的部份,而直接在頁面1中檢察window對象,能夠看到document屬性對象,而運用誇源window.parent沒法獵取document屬性對象

  • 片斷辨認符(fragment identifier)
  • window.name
  • 跨文檔通訊API(Cross-document messaging)

片斷辨認符 fragment identifier

所以這類體式格局,不管是不是誇源,父窗口能夠經由過程變動子窗口的iframe的src中的hash值來通報數據給子窗口;
然則 在存在跨源的狀況下,子窗口獵取parent.location.href(可寫不可讀)讀操縱會報跨源毛病,所以子窗口課件寫入url的體式格局通報數據給父窗口。
片斷辨認符體式格局能夠父傳子,子傳父

window.name

document.getElementById(‘iframe’).contentWindow.name
接見失足,所以沒法跨域

window.postMessage

頁面1 挪用iframe的iframe.contentWindow.postMessage(data,”http://localhost:8081″)
頁面2 挪用window的 window.parent.postMessage(data,’http://localhost:8080′)

AJAX (最常見到的狀況)


同源政策規定,AJAX請求只能發給同源的網址,不然就報錯。
除了架設效勞器代辦(瀏覽器請求同源效勞器,再由後者請求外部效勞),有三種要領躲避這個限定。
JSONP
WebSocket
CORS

JSONP

// 客戶端(瀏覽器頁面)
function addScriptTag(src) {
var script = document.createElement('script');
script.setAttribute("type","text/Javascript");
script.src = src;
document.body.appendChild(script);
}
window.Onload= function () {
addScriptTag('http://example.com/ip?callback=foo');//須要指定回調函數名
}
function foo(data) {
console.log('Your public IP address is: ' + data.ip);
};
//效勞端
foo({
"ip": "8.8.8.8"
});

CORS

CORS是跨源資本分享(Cross-Origin Resource Sharing)的縮寫。它是W3C規範,是跨源AJAX請求的基礎解決要領。比擬JSONP只能發GET請求,CORS許可任何範例的請求。
請參考 阮先生的跨域資本同享 CORS 詳解


推荐阅读
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
author-avatar
米斯特RAO
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有