跨域问题--自整理

题目:下面关于浏览器中使用js跨域获取数据的描述,说法错误的是()
A:域名、端口相同,协议不同的,属于相同的域
B:JS可以使用jsonp进行跨域
C:通过修改document。domain来跨子域
D:使用window.name来进行跨域
 
答案:A
 
以下的同源策略是我自己整理的,不够全面,然后已经发表的博文中有一篇我觉得整理的最好的,地址是 https://segmentfault.com/a/1190000011145364
 
同源策略 同源策略是客户端脚本的重要的安全度量标准。最草出自Netscape navigator2.0,目的是防止某个文档或者脚本从多个不同的源装载。javascript中同源策略对于XHR的一个主要约束,它为通信设置了 相同的域,相同的端口,相同的协议”这一限制。除了被认可的跨域解决方案以外,试图访问限制以外的资源,会引发安全错误。
同源策略/SOP(same origin policy)是一种约定,是浏览器最核心也最基础的安全功能,如果缺少了同源策略,浏览器很容易受到XSS,CSFR等攻击。
 
同源策略限制:
1、cookie、localStorage和INdexDB无法读取
2、DOM和JS对象无法获得
3、Ajax请求不能发送
 
跨域解决方案:
  1. jsonp
  2. 图像ping
  3. document.damian + iframe
  4. location.hash + iframe
  5. window.name + iframe
  6. postMessage
  7. CORS(cross-origin resource sharing)
  8. nginx代理跨域
  9. nodejs中间件代理跨域
  10. websocket协议跨域
 
JSONP(json with padding)
说明:通过动态script元素,为src属性指定一个跨域URL。(因为<script>元素和<img>元素,都有能力不受限制从其他域加载资源)
JSONP由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般在请求中指定。而数据就是传入回调函数中的json数据。
function handleResponse(response){
alert("You're at IP address" + response.ip + ", which is in " + response.city + "," +response.region_name);
}
var script = document.createElement("script");
script.src= "http://freegeoip.net/json/?callback=handleResponse";
document.body.insertBefore(script,document,body.firstChild);
 
优点:简单易用。支持在浏览器和服务器之间双向通信。
缺点:一是jsonp从其他域中加载代码执行。如果其他域不安全,很可能在响应中夹带恶意代码,此时除了放弃JSONP调用之外,没有办法追究。二是要确定JSONP请求是否失败并不容易。HTML5中给script增加了onerror事件处理程序(目前支持的浏览器不多)。可以使用计时器检测在指定时间内是否接受到响应。
 
CORS(cross-origin Resource sharing,跨源资源共享):跨域解决方案。IE8通过XDomainRequest对象支持CORS,其他浏览器通过XHR对象原生支持CORS。图像Ping和JSONP是另外两种跨域通信的技术。
 
 
图像PING
说明:使用<img>元素,因为在任何网页中加载图像时,不用担心跨域不跨域。
图像ping经常用于跟踪用户点击页面或者动态广告曝光次数。
动态创建图像,使用它们的onload和onerror事件处理程序来确定是否接到了响应。
图像ping与服务器进行简单的,单向的跨域通信。请求的数据是通过查询字符串发送的,响应可以是任意内容,但通常是像素图或者204响应。通过图像ping,浏览器得不到任何具体的数据,但通过侦听load和error事件,可以知道响应是什么时候接到的。
var img = new Image();
img.onload = img.onerror = function(){
alert("Done");
}
img.src = "http://www.example.com/test?name=Nicholas";
 
缺点:一只能发送get请求,二是无法访问服务器的响应文本。
 
 
comet
说明:Comet是一种更高级的Ajax技术(服务器推送)。ajax是从页面向服务器请求数据,Comet是服务器向页面推送数据。
Comet有两种实现方式:长轮询和流。
短轮询是浏览器定时向服务器发送请求,看有没有更新的数据。长轮询是页面发起一个到服务器的请求,然后服务器一直保持连接打开,直到有数据可以发送。发送完数据之后,浏览器关闭连接,随机发起一个新请求。
HTTP流,不同于轮询,它在页面的整个生命周期内只使用一个HTTP连接。浏览器向服务器发送一个请求,服务器保持连接打开,然后周期性的向浏览器发送数据。
在Firefox,safari,Opera和chrome中,通过侦听readystatechange事件及检测readystate的值是否为3,就可以利用XHR对象实现HTTP流。在上述浏览器中,随着不断从服务器接受数据,readystate的值会周期性地变为3。readystate为3时,responseText属性中就会保存接收到的所有数据。此时需要比较此前接收到的数据,决定从什么位置开始取得最新的数据。
function createStreamingClient(url, progress, finished){
var xhr = new XMLHttpRequest(),
received = 0;
 
xhr.open("get", url, true);
xhr.onreadystatechange = function(){
var result;
if(xhr.readystate == 3){
//只取最新数据,并调整计数器
result = xhr.responseText.substring(received);
received += result.length;
 
//调用progress回调函数
progress(result);
}else if(xhr.readystate == 4){
finished(xhr.responseText);
}
};
xhr.send(null);
return xhr;
}
var client = createStreamingClient("streaming.php" , function(data){
alert("received" + data);
},function(data){
alert("done");
});
 
websocket
wensocket:在一个单独的持久连接上提供全双工、双向通信。使用websocket协议。http服务器无法实现web socket,只有支持这种协议的专门服务器才能正常工作。
 
 
postMessage
说明:html5中新增的跨文档消息传递(cross-document messaging),有时候简称为XDM。
web messaging的核心是postMessage()。想当前页面的<iframe>元素或者由当前页面弹出的窗口。
postMassage(“消息”,消息接收方来自哪个域的字符串);
var iframeWindow = document.getElementById("myframe").contentWindow;
iframeWindow.postMessage("A secret","http://www.wrox.com");
接受到XDM消息是,会触发window的message事件。这个事件是以异步形式触发,因此从发送消息到接收消息可能要经过一段时间的延迟。事件对象包含三个重要信息:
1、data postMessage()的第一个参数
2、origin 发送消息的文档所在的域
3、source 发送消息的文档的window的代理。代理主要用于发送上一条消息的窗口中调用postMessage()方法。如果发送消息的窗口来自同一个域,那这个对象就是window。
EventUtil.addHandler(window, "message", function(event){
if(event.origin == "http://www.wrox.com"){
processMessage(event.data);//处理接收的数据
 
event.source.postMessage("received","http://p2p.wrox.com");
}
});
通过内嵌框架加载其他域的内容时,XDM是非常方便的。在混搭(mashup)和社交网络应用中,这种传递消息的方法极为常用。
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/Jamie1032797633/p/9340914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于异质图嵌入的推荐可以通过以下步骤实现:首先,将不同的数据表示为异质图,然后使用图嵌入算法将异质图嵌入到低维向量空间中,最后通过相似度计算实现推荐。具体实现可以使用深度学习模型,如图卷积网络(GCN)等。 ### 回答2: 基于异质图嵌入的推荐是指在不同或领下的推荐系统中,利用异质图嵌入方法来实现推荐任务。 要实现基于异质图嵌入的推荐,可以按照以下步骤进行: 1. 数据准备:收集并整理不同或领的相关数据,包括用户、物品和关系信息。这些数据应该以异质图的形式进行表示,即图中的节点代表不同类型的实体,边代表不同类型的关系。 2. 异质图构建:根据数据准备的异质图,构建对应的图结构,包括节点和边的类型,以及它们之间的关系。例如,可以将用户和物品分别作为一种节点类型,用户和物品之间的交互行为作为一种关系类型。 3. 异质图嵌入:利用异质图嵌入方法将异质图中的节点和边映射到低维向量空间中。常用的异质图嵌入方法包括HIN2Vec、Metapath2Vec等。这些方法会考虑节点和边的类型信息,以及它们之间的关系,将它们嵌入到向量空间中,以便进行下一步的推荐计算。 4. 推荐计算:利用嵌入后的节点向量进行推荐计算。根据用户的行为和关系信息,计算用户与其他领中物品的相似度,推荐相似度高的物品给用户。可以使用用户-物品相似度计算方法,例如余弦相似度或基于矩阵分解的方法,来计算用户与物品之间的关联程度。 5. 推荐结果生成:根据推荐计算的结果,生成推荐列表或推荐排序。将相似度高的物品推荐给用户,以提供个性化的推荐体验。 总结起来,基于异质图嵌入的推荐主要包括数据准备、异质图构建、异质图嵌入、推荐计算和推荐结果生成等步骤。通过构建合适的异质图结构,并利用异质图嵌入方法将节点和边嵌入到向量空间中,可以实现更准确和个性化的推荐。 ### 回答3: 基于异质图嵌入的推荐是一种利用图嵌入技术来实现不同领或不同之间的推荐系统。该方法通过将异质图中的不同节点和边分别表示为向量,然后通过学习节点和边的向量表示来计算节点之间的相似度,从而进行推荐。 具体实现基于异质图嵌入的推荐可以按照以下步骤进行: 1. 数据预处理:首先,需要对异质图中的不同节点和边进行编码,将其转化为数值表示。例如,可以使用独热编码来表示不同类型的节点和边。 2. 构建异质图:根据不同领或不同的数据,可以构建一张异质图,其中不同类型的节点表示不同的物品或用户,边表示不同的关系类型。例如,在音乐推荐中,可以将歌曲、用户、专辑等不同类型的节点以及它们之间的关系用边连接起来。 3. 异质图嵌入:通过使用图嵌入技术,将图中的节点和边转化为低维度向量表示。常用的图嵌入算法包括DeepWalk、Node2Vec、LINE等。这些算法通过考虑节点的邻居信息来学习节点的向量表示,以保留节点之间的结构信息。 4. 推荐计算:通过计算不同领或不同的节点之间的相似度,可以进行推荐。一种常用的方法是通过计算节点之间的向量余弦相似度来度量它们的相似程度。根据节点之间的相似度,可以为用户推荐在其他领中类似的物品,或者为物品推荐类似的用户。 5. 评估和优化:最后,需要对推荐的性能进行评估,并进行优化。可以使用评估指标如准确率、召回率、覆盖率等来评估推荐结果的质量,并根据评估结果进行模型的调优和改进。 基于异质图嵌入的推荐方法可以帮助解决不同领或不同之间的信息孤立问题,提高推荐系统的多样性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值