网络请求技术--跨域

一、概念

跨域:

  • 指浏览器不能执行其他网站的脚本 由浏览器的同源策略造成
  • 是浏览器对javascript施加的安全限制 
  • 浏览器为了保证用户的信息安全  在用Ajax进行网络请求时  若请求的网址和当前页面的网址不是同一台服务器就会被拒绝接受服务器发送的数据

注:跨域限制访问,其实是浏览器的限制

同源策略: 

  • 是浏览器的一种安全策略
  • 当且仅当 协议,域名(ip),端口(port)三者都相同时才能称为同源,否则产生跨域

示例:

同源 ==> pathname不参与同源判断

http://www.baidu.com/index.html

http://www.baidu.com/news/one.html

异源 ==> 协议不一样

http://www.baidu.com/index.html

https://www.baidu.com/news/one.html

异源 ==> 域名(ip:port)不一样

http://www.baidu.com/index.html

http://www.baidu.cn/news/one.html

同源 ==>  解析后相同

http://www.baidu.com/index.html     假设将域名解析为192.168.60.1:8080

http://192.168.60.1:8080/news/one.html

二、跨域问题

示例:

testqunar网站里的index.html文件想要请求qunar网站里的数据

请求结果如下:

三、解决跨域问题的方式

1)CORS

当一台服务器向另一台服务器发起网络请求出现跨域问题时在被请求的业务中添加发起请求的服务器的IP,这样浏览器就不会拦截数据,相当于让它进入白名单,实现跨域资源共享。

示例:

http://192.168.43.17:8081 服务器 想请求 http://192.168.60.172:8080 服务器的数据

对http://192.168.60.172:8080服务器:

res.setHeader("Access-Control-Allow-Origin","http://192.168.43.17:8081")
//在数据包的头部配置"Access-Control-Allow-Origin"字段后,数据包发送给浏览器后,浏览器就会根据这里配置的白名单“放行”
//允许白名单的服务器对应的网页来用ajax跨域访问

2)JSONP

用script标签的src属性请求跨域服务器的网址不会出现跨域问题,但是会直接把请求过来的编码用v8引擎去运行,所以在后端写一个js引擎能识别的字符串发送给前端如: ' fn({"name":"haha"}) '。

前端用script标签的src属性去请求这个网址,请求完毕以后v8就会直接运行这个编码去调用fn函数,所以必须提前创建这个函数。

前端可以通过querystring把函数名以参数的形式发送给后端,后端解析了以后直接拼接到数据中,解决函数名传递和重名问题。

示例:

Server2(8081)中的index.html去请求Server1(8080)中的数据

 请求结果如下:

3)Proxy

指代理软件或代理服务器,也可以认为是一种网络访问方式

Proxy 代理服务:后端合法的去请求别的后端(oAuth授权) 再发给前端 前端写成自己的页面

用request模块在后端请求数据然后传给自己的前端,前端请求自己的服务器就没有跨域 

 request模块:后端做网络请求

 request(url,(err,res,data)=>{console.log(data)})

回调有三个参数:第一个是错误信息,第二个是响应信息的集合,第三个是返回的信息

data返回的是json字符串,需要通过JSON.parse处理

示例:

后端请求百度的首页数据,请求到后直接返回给自己的前端,就可以直接得到一个跟百度首页一模一样的页面

var router=require("./router.js")
var request=require("request")  //是一个后端的网络请求工具 
router.get("/home",function(req,res){
   request("http://www.baidu.com/index.html",function(arg1,arg2,arg3){
    console.log(arg3)
    res.end(arg3)
   })

/*  
 前端请求后端  后端请求别的网页数据 然后修改了发给用户   (钓鱼网站)
              后端请求别的ajax网址数据 数据处理 发给用户(大数据分析)
              后端请求别的静态文件和数据 数据处理 发给用户 (爬虫)
              后端合法请求别的后端(oAuth授权--token) 再发给前端 前端写成自己的页面
*/
})

运行结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈ha~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值