专栏首页武军超python专栏web是如何实现跨域的

web是如何实现跨域的

跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com 页面去请求 www.google.com 的资源。跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域 浏览器有同源策略本身是禁止跨域访问的 为什么浏览器要限制跨域访问呢?原因就是安全问题:如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现cookie泄露的安全问题 为什么要跨域: 既然有安全问题,那为什么又要跨域呢? 有时公司内部有多个不同的子域,比如一个是location.company.com ,而应用是放在app.company.com , 这时想从 app.company.com去访问 location.company.com 的资源就属于跨域

怎么实现跨域: 由于浏览器一般不对script,img等进行跨域限制,所以我们有机会通过script的方式来实现跨域访问。 简单来说,就是你请求的文件,只要含有“src”,“href”这些属性,你就能在其他服务器上,请求你所需要的文件,然后在自己的服务器上运行,就实现了跨域(跨协议,跨域名,跨端口)。 凡是拥有scr这个属性的标签都可以跨域例如<script><img><iframe>,herf属性的有<a> 具体做法: 1. 基于script标签实现跨域,在头部写请求的资源地址: <script type="text/javascript" src="http://web.cn/js/message.js"></script> 返回的是json数据 2. 基于jQuery发送Ajax,在Ajax里面设置datatype为jsonp(服务器返回的数据格式),则可以进行跨域访问,不过Ajax中type必须是get,因为jsonp只支持get 3.还有ifram请求 基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com 这种特点,例如:http://a.study.cn/a.html 请求 http://b.study.cn/b.html 也就是两个页面必须属于一个基础域(例如都是xxx.com),使用同一协议和同一端口,这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数

4.利用 CORS (Cross-Origin Resource Sharing)跨域资源共享实现跨域, CORS 支持所有类型的 HTTP 请求;使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理;绝大多数现代浏览器都已经支持了CORS;

CORS:https://blog.csdn.net/Odyssues_lee/article/details/80836839

实现跨域的话服务端需要做什么: 服务端要检查访问的请求参数,如果没有callback,则可以按照之前的流程走;如果带着callback参数,则需要将返回的结果包装在callback里面。

1、jsonp跨域 JSONP(JSON with Padding:填充式JSON),应用JSON的一种新方法, JSON、JSONP的区别:  1、JSON返回的是一串数据、JSONP返回的是脚本代码(包含一个函数调用)  2、JSONP 只支持get请求、不支持post请求  (类似往页面添加一个script标签,通过src属性去触发对指定地址的请求,故只能是Get请求)

参考链接: https://blog.csdn.net/echizao1839/article/details/80815155 https://blog.csdn.net/tjcjava/article/details/76468225 https://blog.csdn.net/qq_15037231/article/details/80364647

https://www.jianshu.com/p/79daa0d45aac

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2018年8月16日多线程并发和队列

    静态文件的打包:静态文件包括图片,视频等静态的文件 MANIFEST.in include  如果要打包静态文件,定义MANIFEST.in配置文件

    武军超
  • SAN(存储区域网络),WWN, WWPN,WWNN区别

    存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通...

    武军超
  • 11月6日排序函数,匿名函数,回调函数,递归函数, zip函数

    ##### 排序sort, sorted的区别: list.sort(func=None, key=None, reverse=False(or Tru...

    武军超
  • Python flask框架端口失效解决方案

    大家可能有这样的体验,好比在程序里面我明明写了app.run(port=8001),结果程序还是在5000端口输出,我们右键点击py程序,直接运行。

    砸漏
  • Open RAN之RU、DU、CU: Why?What?When? How?

    功能拆分放到现在来说并不是什么新鲜事了,其概念最初在3GPP R14中就提及过,3GPP R15发布了定义,并引入了新的术语、接口和功能模块。但是在Open R...

    SDNLAB
  • go 模板详说

    模板是我们常用的手段用于动态生成页面,或者用于代码生成器的编写等。比如把数据库的表映射成go语言的struct,这些体力活,写个代码生成器是最合适不过的了. ...

    lpxxn
  • 在类中取得当前文件所在的相对路径与绝对路径

    /**  * <p>Title: 在类中取得当前文件所在的相对路径与绝对路径</p>  *  * <p>Description: 在类中取得当前文件所在的相对路...

    阿敏总司令
  • Hacking Tools搜罗大集合

    各种各样的黑客工具浩如天上繁星,这也让许多刚刚入门安全技术圈的童鞋感到眼花缭乱,本文整理了常用的安全技术工具,希望能够给你带来帮助。以下大部分工具可以在 Git...

    FB客服
  • Spring Boot+mybatis集成数据库访问

    在application.properties中告诉mybatis去哪里扫描mapper:

    HUC思梦
  • java nio: Files.isWritable判断文件夹可写(创建子文件夹或文件)

    java.nio.file.Files.isWritable方法用于测试一个文件是否可写。但是对于文件夹,这个办法并不能用来测试文件夹是否可以创建子文件夹或文件...

    用户1148648

扫码关注云+社区

领取腾讯云代金券