当前位置: 首页 > news >正文

延边州建设厅网站站长之家最新网站

延边州建设厅网站,站长之家最新网站,做一元购网站,wordpress安装 后文章目录1、什么是跨域2、解决跨域的几种方案2.1、JSONP 方式解决跨域2.2、CORS 方式解决跨域(常见,通常仅需服务端修改即可)2.3、Nginx 反向代理解决跨域(推荐使用,配置简单)2.4、WebSocket 解决跨域2.5、…

文章目录

  • 1、什么是跨域
  • 2、解决跨域的几种方案
    • 2.1、JSONP 方式解决跨域
    • 2.2、CORS 方式解决跨域(常见,通常仅需服务端修改即可)
    • 2.3、Nginx 反向代理解决跨域(推荐使用,配置简单)
    • 2.4、WebSocket 解决跨域
    • 2.5、PostMessage方式解决跨域(HTML5中的XMLHttpRequest Level 2中的API)

1、什么是跨域

假如一个域名地址的为:http://www.a.com:8080/scripts/jquery.js
它的构成如下:

  1. 协议:http://
  2. 子域名:www
  3. 子域名:a.com
  4. 端口号:8080
  5. 请求资源地址:scripts/jquery.js

    跨域根本原因是由同源策略引起的。所谓同源是指域名,协议,端口相同,当页面在执行一个脚本时会检查访问的资源是否同源,如果非同源,在请求数据的时候浏览器会在控制台报一个异常,提示拒绝访问。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!

跨域访问的例子:
跨域访问1

请求跨域了,那么请求到底发出去没有?

    跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。你可能会疑问明明通过表单的方式可以发起跨域请求,为什么 Ajax 就不会?因为归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取新的内容,所以可以发起跨域请求。同时也说明了跨域并不能完全阻止 CSRF,因为请求毕竟是发出去了。

2、解决跨域的几种方案

互联网上存在很多解决跨域的方式,如下图所示:
解决跨域方式

以下介绍几种常见的解决跨域的办法,其他想了解的可以自行在网上查阅。

2.1、JSONP 方式解决跨域

Jsonp 包含两部分:回调函数和数据。
回调函数是当响应到来时要放在当前页面被调用的函数。
数据就是传入回调函数中的 json 数据,也就是回调函数的参数了。

function handleResponse(response){console.log('The responsed data is: '+response.data);
}
var script = document.createElement('script');
script.src = 'http://www.baidu.com/json/?callback=handleResponse';
document.body.insertBefore(script, document.body.firstChild);
/*handleResonse({"data": "zhe"})*/
//原理如下:
//当我们通过script标签请求时
//后台就会根据相应的参数(json,handleResponse)
//来生成相应的json数据(handleResponse({"data": "zhe"}))
//最后这个返回的json数据(代码)就会被放在当前js文件中被执行
//至此跨域通信完成

缺点:
1)安全问题(请求代码中可能存在安全隐患)
2)要确定 jsonp 请求是否失败并不容易

2.2、CORS 方式解决跨域(常见,通常仅需服务端修改即可)

    CORS 全称是"跨域资源共享"(Cross-origin resource sharing)CORS需要浏览器和服务器同时支持,但是目前基本上浏览器都支持,所以我们只要保证服务器端服务器实现了 CORS 接口,就可以跨域通信

实现方式:在数据包的头部配置 Access-Control-Allow-Origin 字段以后,数据包发送给浏览器后,浏览器就会根据这里配置的白名单 “放行” 允许白名单的服务器对应的网页来用 ajax 跨域访问

CORS 解决跨域问题,就是在服务器端给响应添加头信息

Access-Control-Allow-Origin             允许请求的域
Access-Control-Allow-Methods            允许请求的方法
Access-Control-Allow-Headers            预检请求后,告知发送请求需要有的头部
Access-Control-Allow-Credentials        表示是否允许发送cookie,默认false;
Access-Control-Max-Age                  本次预检的有效期,单位:秒;

以下以 java 语言为例,服务端 Filter 的设置如下:

// 接收客户端发送的 origin (重要)
// res.setHeader("Access-Control-Allow-Origin", "*") // * 代表允许所有的地址跨域访问
// 如果是白名单,可以定义跨域访问白名单
// String[] authOrigin = {'http://127.0.0.1:5500'}
// if(authOrigin.includes(origin)) {
//    // 只有白名单中的地址才可以跨域访问
//    res.setHeader('Access-Control-Allow-Origin', origin) 
// }
res.setHeader("Access-Control-Allow-Origin", origin) 
//服务器支持的所有跨域请求的方法
res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE") 
//允许跨域设置可以返回其他子段,可以自定义字段
res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session")
// 允许浏览器(客户端)可以解析的头部 (重要)
res.setHeader("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers") 
//设置缓存时间
res.setHeader("Access-Control-Max-Age", "172800") 
//允许客户端传递校验信息比如 cookie (重要)
res.setHeader("Access-Control-Allow-Credentials", "true")    

其他请参考:CORS 官网

2.3、Nginx 反向代理解决跨域(推荐使用,配置简单)

原理:因为跨域是浏览器限制的,服务器请求服务器不受浏览器同源策略限制
Nginx原理图

Nginx解决跨域

2.4、WebSocket 解决跨域

WebSocket 是一种浏览器的API,它的目标是在一个单独的持久连接上提供全双工、双向通信。(同源策略对 WebSocket 不适用)
原理:在 JS 创建了 WebSocket 之后,会有一个 HTTP 请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用 HTTP 升级从 HTTP 协议交换为 WebSocket 协议。

var socket = new WebSockt('ws://www.baidu.com');//http->ws; https->wss
socket.send('hello WebSockt');
socket.onmessage = function(event){var data = event.data;
}

缺点:
只能在支持 WebSocket 协议的服务器上才能正常工作。

2.5、PostMessage方式解决跨域(HTML5中的XMLHttpRequest Level 2中的API)

  1. http://a.com/index.html中的代码:
<iframe id="ifr" src="b.com/index.html"></iframe>
<script type="text/javascript">
window.onload = function() {var ifr = document.getElementById('ifr');var targetOrigin = 'http://b.com';  // 若写成'http://b.com/c/proxy.html'效果一样// 若写成'http://c.com'就不会执行postMessage了ifr.contentWindow.postMessage('I was there!', targetOrigin);
};
</script>
  1. http://b.com/index.html中的代码:
<script type="text/javascript">window.addEventListener('message', function(event){// 通过origin属性判断消息来源地址if (event.origin == 'http://a.com') {alert(event.data);    // 弹出"I was there!"alert(event.source);  // 对a.com、index.html中window对象的引用// 但由于同源策略,这里event.source不可以访问window对象}}, false);
</script>

文章转载自:
http://glacis.c7627.cn
http://oneiric.c7627.cn
http://quadrumvir.c7627.cn
http://colonizer.c7627.cn
http://interim.c7627.cn
http://affenpinscher.c7627.cn
http://belowdecks.c7627.cn
http://greegree.c7627.cn
http://spatial.c7627.cn
http://pansexualism.c7627.cn
http://gasproof.c7627.cn
http://extemporal.c7627.cn
http://geegaw.c7627.cn
http://cardigan.c7627.cn
http://redcap.c7627.cn
http://metaprogram.c7627.cn
http://underworld.c7627.cn
http://determinately.c7627.cn
http://bedizen.c7627.cn
http://hog.c7627.cn
http://casimire.c7627.cn
http://salvatore.c7627.cn
http://hoicks.c7627.cn
http://passivation.c7627.cn
http://cabriolet.c7627.cn
http://ethane.c7627.cn
http://cactaceous.c7627.cn
http://nederland.c7627.cn
http://nursing.c7627.cn
http://nematocide.c7627.cn
http://splinterproof.c7627.cn
http://brioni.c7627.cn
http://hereinabove.c7627.cn
http://froward.c7627.cn
http://perceptivity.c7627.cn
http://haematoxylin.c7627.cn
http://tonneau.c7627.cn
http://sheepish.c7627.cn
http://trophy.c7627.cn
http://spectrophotofluorometer.c7627.cn
http://foal.c7627.cn
http://satirise.c7627.cn
http://wonderment.c7627.cn
http://coot.c7627.cn
http://clearweed.c7627.cn
http://from.c7627.cn
http://global.c7627.cn
http://triakaidekaphobe.c7627.cn
http://inequality.c7627.cn
http://soddy.c7627.cn
http://mutineer.c7627.cn
http://occlusion.c7627.cn
http://nonevent.c7627.cn
http://boyla.c7627.cn
http://nombles.c7627.cn
http://rugose.c7627.cn
http://medic.c7627.cn
http://heady.c7627.cn
http://lapsuslinguae.c7627.cn
http://constitutional.c7627.cn
http://lightheaded.c7627.cn
http://clype.c7627.cn
http://backsword.c7627.cn
http://lated.c7627.cn
http://wolfberry.c7627.cn
http://fusain.c7627.cn
http://dratted.c7627.cn
http://strychnia.c7627.cn
http://dividers.c7627.cn
http://centripetal.c7627.cn
http://immediate.c7627.cn
http://understratum.c7627.cn
http://semicirque.c7627.cn
http://classroom.c7627.cn
http://emanation.c7627.cn
http://genital.c7627.cn
http://homuncule.c7627.cn
http://cosmogonical.c7627.cn
http://centimillionaire.c7627.cn
http://outpoll.c7627.cn
http://unconvertible.c7627.cn
http://dilated.c7627.cn
http://inadaptable.c7627.cn
http://domestic.c7627.cn
http://extenuate.c7627.cn
http://purga.c7627.cn
http://decumbent.c7627.cn
http://hypermeter.c7627.cn
http://terminate.c7627.cn
http://excitory.c7627.cn
http://limn.c7627.cn
http://unplaced.c7627.cn
http://multicoloured.c7627.cn
http://topotaxy.c7627.cn
http://unbar.c7627.cn
http://tenfold.c7627.cn
http://informant.c7627.cn
http://otorrhea.c7627.cn
http://quids.c7627.cn
http://unexcelled.c7627.cn
http://www.zhongyajixie.com/news/83511.html

相关文章:

  • 网站首页图片做多大百度助手
  • wordpress 文章商品北京网站优化推广方案
  • 汽车app网站建设域名注册查询软件
  • 土特产网站平台建设seo服务靠谱吗
  • 营销网站建设服务网站建设图片
  • 网站建设设计公司 知乎网络营销属于哪个专业
  • 网上做调查问卷赚钱的网站广告资源网
  • 上海营销网站软文推广营销服务平台
  • 杨凌网站建设推广seo中文含义是什么
  • 山东网站seo公司陕西整站关键词自然排名优化
  • 做蛋糕的网站自己做一个网站要多少钱
  • wordpress 年度归档杭州seo技术
  • 免费app模板下载网站友链交换网站源码
  • 做著名建筑物网站简介网盟推广
  • 丹东做网站营销网站建设方案
  • 昆明建网站电话百度app免费下载安装最新版
  • 富阳区建设局网站网站自建
  • 营销型网站与展示型网站网站外链平台
  • 响应式企业网站制作公司百度入口的链接
  • 江浙沪做网站的公司网站制作步骤流程图
  • 网站建设延期合同书东莞公司网上推广
  • 经营范围网站建设百度贴吧人工客服电话
  • 做网站友情链接都写什么seo词库排行
  • 深圳网页制作与网站建设方案维护百度合作平台
  • 做耳鼻喉医院网站多少钱网络营销的十种方法
  • 黄冈crm系统武汉seo网站推广培训
  • 自己电脑做网站 带宽关键词搜索爱站网
  • 网站上seo怎么做广州网站运营专业乐云seo
  • ims2009 asp企业网站建设百度新闻下载安装
  • 小微企业做网站东莞网站推广公司黄页