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,就可以实现父页面调用子页面的函数

实现跨域的话服务端需要做什么:
服务端要检查访问的请求参数,如果没有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

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/84439721