跨域请求基础知识

浏览器的同源策略

浏览器的源指的是 协议://域名:端口 这样的URL组合。我们首先要明确几点

  • www.foo.com 和 foo.com 是不同域

  • www.foo.com 和 www.foo.com/b/1 是同域的,因为浏览器的源中不包含路径

  • https 和 http 的协议不同,是不同域
    当以上三个元素中的一个与网页的document.domain不相同时,浏览器会认为你的请求是跨越请求。

cookie机制

经常容易与同源策略搞混的是cookie的发送机制。

  • cookie 可以通过设置domain 为 domain=".foo.com" , 这样设置如果用户访问的www.foo.com 或是user.foo.com 那么这个cookie都会被发送

  • cookie 可以通过这事path 为 path="/auto/" ,这样设置如果用户访问的是www.foo.com/user时将不会发送这个cookie

修改当前域

  • 可以通过设置document.domain 为当前域的一个后缀来修改当前域,例如 可以将域名为 www.foo.com 的document.domain 设置为 foo.com : document.domain="foo.com"来绕过一些跨域问题。

浏览器 -- 浏览器的跨域访问

可以通过window.postMessage()来解决浏览器中不同页面不同域名的通信问题

浏览器 -- 服务器的跨域访问

浏览器跨域访问不同域的服务器的解决方案一般有三种

  • jsonp,利用JavaScript加载没有同域策略的机制。一般返回的数据格式是:callback(json);

  • Iframe间通信,在当前页面下append一个Iframe。例如

$(document.body).append('<IFRAME id="authIframe" style="display:none">');
$('iframe#authIframe').attr('src', CONST_CONTENT_ROOT_URL+'/index.jsp');
$('iframe#authIframe').load(function(){});
  • 服务器返回带有HTTP access control 的头来实现跨域访问。

HTTP access control (CORS)

使用Access-Control的跨域请求有两种,简单的跨域请求和带有先导请求(options)的跨域请求

简单的跨域请求

简单的跨域请求和带有先导请求的跨域请求最大的区别是他不会先发送一个先导请求。
        浏览器对简单的跨域请求的定义是

  • 请求方法是get,post,head中的一种

  • content-Type必须为application/x-www-form-urlencoded, multipart/form-data, 或text/plain中的一种

  • 没有自定义请求头

带有先导请求(options)的跨域请求

带有先导请求(options)的跨域请求,浏览器会自动先发送一个options方法的请求到服务器端,并查看相应头里是否有Access-Control头部。值得注意的是options方法的请求并不会携带cookie,也就是如果如果你的请求必须要登陆验证的话那么你就必须构造一个简单请求。

下面是一些常用的Access-Control头部
请求头

  • Access-Control-Request-Method : 先导请求中的请求头,告诉服务器真实请求的http方法

  • Access-Control-Request-Headers :先导请求中的请求头,告诉服务器真实请求的http请求头
    相应头

  • Access-Control-Allow-Origin :服务器允许跨域请求的origin

  • Access-Control-Expose-Headers : 允许JavaScript读取的头部

  • Access-Control-Allow-Credentials :是否允许携带cookie

  • Access-Control-Allow-Methods :允许的请求方法

  • Access-Control-Allow-Headers :允许的请求头部

https://developer.mozilla.org/zh-TW/docs/HTTP/Access_control_CORS#Access-Control-Allow-Origin

由于水平有限,出错难免,如有出错,还望指正,谢谢!

浏览器同源策略以及跨域请求时可能遇到的问题相关推荐

  1. 服务器安全:浏览器同源策略与跨域请求、XSS攻击原理及防御策略、如何防御CSRF攻击

    主要包括 浏览器同源策略与跨域请求 XSS攻击原理及防御策略 如何使用SpringSecurity防御CSRF攻击 CC/DDOS攻击与流量攻击 什么是SSL TLS HTTPS? 一.浏览器的同源策 ...

  2. ajax背景、ajax对象、ajax状态、ajax与http、ajax请求数据接口、同步与异步、ajax请求XML数据、封装ajax函数、artTemplate简介、同源策略和跨域请求、JSONP

    AJAX简介: ajax背景: 1.AJAX(Asynchronous JavaScript And Xml)异步的 JavaScript 和 XML:ajax是浏览器提供的一套API,最早出现在谷歌 ...

  3. 浏览器同源策略及跨域的解决方法

    浏览器同源策略及跨域的解决方法 参考文章: (1)浏览器同源策略及跨域的解决方法 (2)https://www.cnblogs.com/laixiangran/p/9064769.html 备忘一下.

  4. 浏览器同源策略,跨域(跨源)

    参考 https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy http://www.ruanyifeng.co ...

  5. 同源策略和跨域请求解决方案

    一.一个源的定义 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源. 举个例子: 下表给出了相对http://a.xyz.com/dir/page.html同源检测的示例: ...

  6. 浏览器的同源策略和跨域请求_学习版

    目录 同源策略 : 跨域请求 : 跨域请求的常见解决方案 : 1. jsonp 2. cors(跨域资源共享) 3. proxy(代理) 同源策略 : 什么是同源策略 ? + 同源策略是  浏览器  ...

  7. gorilla websocket无法跨域_聊聊浏览器同源策略与跨域方案详解

    开发出高性能的 Web 应用固然重要,但安全问题也不容小觑.本文我们继续以 HTTP 为线索,展开来讲一讲浏览器安全相关的同源策略. 浏览器的同源策略(Same Origin Policy) 源(Or ...

  8. 浏览器的同源策略及跨域解决方案

    同源策略 一个源的定义 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源. 举个例子: 下表给出了相对http://a.xyz.com/dir/page.html同源检测的示 ...

  9. 浏览器,渲染,页面优化,存储,缓存,同源策略,跨域问题

    一.浏览器渲染 1.浏览器渲染原理 原文链接:https://blog.csdn.net/qq_45952585/article/details/124069123前端项目性能优化方案有哪些_前端性能 ...

最新文章

  1. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)
  2. quick cocos2d-x 使用CCTableView 例子
  3. java map 排序_java集合框架面试题大集合
  4. 网络招聘“草莽时代”该结束了
  5. java hashtable 数据结构_数据结构--哈希表(Java)
  6. GCC strict aliasing – 嫉妒就是承认自己不如别人
  7. 高仿真的类-ApplicationContext
  8. js字符串方法、数组方法整理
  9. 汽车距离报警系统c语言编程,基于单片机的超声波汽车报警系统的设计
  10. 在 Libra 刷屏的背后,你必须知道 TA!
  11. Reflector.FileDisassembler的一个bug
  12. pandas的重复值的处理
  13. java eclipse计算器_eclipse编写计算器
  14. RK3588 CPU GPU DDR NPU定频和性能模式设置
  15. 2020中国高校薪资排行榜出炉!
  16. Java实现各种节日维护 农历,阳历,二十四节气 自定义节日,根据当前日期获取节日
  17. 数据结构之ElemType
  18. QGis 使用高德 画KML
  19. iOS淘宝授权登录及跳转淘宝页面
  20. (转)iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

热门文章

  1. 印度首次挑战登月告败,一步之遥≈多大差距?
  2. 国家计划统筹布局哪些人工智能创新平台?
  3. 中心化,去中心化?关乎互联网未来命运的重要选
  4. 芯片植入:“增强人类”的生物黑科技
  5. 汽车行业最大创新仍未到来,四大力量将重塑未来汽车新纪元
  6. 计算机产业深度报告:云计算与人工智能开启新一轮技术变革周期
  7. 模拟芯片的最大“杀手”,竟然是它?!
  8. 梦见男朋友和别的女生逛街,第一反应亮了... | 每日趣闻
  9. 如果重新一次高考,你还会选择软件专业当程序员吗? | 每日趣闻
  10. 使用scrapy抓取股票代码