当前位置:网站首页>网络请求技术--跨域
网络请求技术--跨域
2022-08-02 00:15:00 【哈哈ha~】
一、概念
跨域:
- 指浏览器不能执行其他网站的脚本 由浏览器的同源策略造成
- 是浏览器对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)设置白名单
当一台服务器向另一台服务器发起网络请求出现跨域问题时在被请求的业务中添加发起请求的服务器的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授权) 再发给前端 前端写成自己的页面
示例:
请求百度的首页数据,请求到后直接返回给前端,就可以直接得到一个跟百度首页一模一样的页面
var router=require("./router.js")
var request=require("request") //是一个后端的网络请求工具
//var fs=require("fs")
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) 再发给前端 前端写成自己的页面
*/
})运行结果如下:

边栏推荐
猜你喜欢
随机推荐
The Statement update Statement execution
如何期货开户和选择期货公司?
Redis 相关问题
Constructor, this keyword, method overloading, local variables and member variables
【21天学习挑战赛】顺序查找和二分查找的小总结
nodeJs--各种路径
【CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!)(A~D)】
好的期货公司开户让人省心省钱
测试用例:四步测试设计法
期货开户手续费的秘密成了透明
JS中的防抖和节流
21.数据增强
22.卷积神经网络实战-Lenet5
What is the function of the JSP out.println() method?
2022/08/01 学习笔记 (day21) 泛型和枚举
PHP to read data from TXT file
管理基础知识21
CVPR 2022 | SharpContour:一种基于轮廓变形 实现高效准确实例分割的边缘细化方法
Redis - message publish and subscribe
Trie详解









