JS跨域访问分析

举报
黄生 发表于 2020/07/24 14:54:39 2020/07/24
【摘要】 1.Js在浏览器里解释执行,浏览器的JS引擎就是负责JS。JS的作用是让网页能够聪明、变化和互动,但它和CSS一样,都必须依附于HTML而存在,他们可以以多种的方式嵌入到HTML中。说到HTML,那就要说到HTTP协议,说到HTTP协议,那就有了URL,说到URL,那域名就出来了2.所以,JS不是独立运行的,它伴随着HTML网页的访问,必然存在归属于某一域名的环境(本地文件系统里网页访问,域...

1.Js在浏览器里解释执行,浏览器的JS引擎就是负责JS。JS的作用是让网页能够聪明、变化和互动,但它和CSS一样,都必须依附于HTML而存在,他们可以以多种的方式嵌入到HTML中。说到HTML,那就要说到HTTP协议,说到HTTP协议,那就有了URL,说到URL,那域名就出来了

2.所以,JS不是独立运行的,它伴随着HTML网页的访问,必然存在归属于某一域名的环境(本地文件系统里网页访问,域名是null)

3.如果js的动作里去访问一个URL资源,这个URL资源里的域名与JS自己所在的域名不一致。就产生了跨域问题。


跨域问题,实际上就是获取不到跨域的资源。从安全角度来说,应该考虑的是知识产权保护方面,但浏览器禁止JS跨域来做这个保护,过于简单粗暴。

如果对方授权允许,就不存在问题。所以对方表示允许,就在响应header里加:Access-Control-Allow-Origin:* or your domain。这个是H5比较简单的实现,

在这之前,需要使用jsonp技术,

这个技术实现用到了一些小技巧,但也需要对方的配合,

原理是我们使用src属性是可以从“外部域”引入css/js文件的,然后我们将script标签的src属性设置为我们在JS里要访问的外域地址,这样就可以借道跨域访问了

这样带来一个问题,就是借道获取到的资源数据,浏览器会当成js代码执行,那只能在数据外包装一个函数名,这样既符合js语法,又能用于处理数据。我们定义好这个函数,实际返回数据作为入参,函数做我们想对返回数据的处理就行了,这就是回调函数。

而从直接返回数据,到要返回“数据外包装一个函数名”,同样需要对端的配合。还想用跨域使用POST方法调用?想多了。


所以,以上的方法,都需要对端的知情、同意和配合。

如果想默默的跨域,那就只能本端加代理了,用代理实现白手套的功能。


其他:

跨域从浏览器的实现上看,并不合理,这种安全机制,简直就是简单粗暴而无用,浪费开发资源

因为浏览器实际已经拿到了资源,只是因为不能将资源给你看,那浏览器拿到了资源,是不是已经是不合理的了?

合理的做法,是资源方都不应该返回资源,直接拒绝才对

看图:A是服务端,B是请求端,A已返回成功码200和一定数量的数据,B的浏览器接收到这些数据,但是不展示给你:


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。