首页 > 资讯 > > 正文

几种常见的跨域解决方案-焦点讯息

来源:前端南玖 2023-05-06 18:20:05
什么是跨域?

跨域是指指的是浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。


(资料图片)

什么是同源策略?

同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指协议+域名+端口三者相同,三者中只要有一个不相同就会造成跨域。

同源策略限制以下几种行为:

Cookie、LocalStorage 和 IndexDB 无法读取DOM和JS对象无法获得AJAX 请求不能发送常见的跨域场景

URL

说明

是否允许通信

www.domain.com/a.jswww.domain.com/b.jswww.domain.com/lab/c.js

同一域名,不同文件或路径

允许

www.domain.com:8000/a.jswww.domain.com/b.js

同一域名,不同端口

不允许

http://www.domain.com/a.jshttps://www.domain.com/b.js

同一域名,不同协议

不允许

http://www.domain.com/a.jshttp://192.168.4.12/b.js

域名和域名对应相同ip

不允许

http://www.domain.com/a.jshttp://x.domain.com/b.jshttp://domain.com/c.js

主域相同,子域不同

不允许

http://www.domain1.com/a.jshttp://www.domain2.com/b.js

不同域名

不允许

几种跨域解决方案JSONP跨域

jsonp的原理就是利用<script>标签没有跨域限制,通过<script>标签src属性,发送带有callback参数的GET请求,服务端将接口返回数据拼凑到callback函数中,返回给浏览器,浏览器解析执行,从而前端拿到callback函数返回的数据。

「原生JS实现:」

<script>    var script = document.createElement("script");    script.type = "text/javascript";    // 传参一个回调函数名给后端,方便后端返回时执行这个在前端定义的回调函数    script.src = "http://www.domain2.com:8080/login?user=admin&callback=handleCallback";    document.head.appendChild(script);    // 回调执行函数    function handleCallback(res) {        alert(JSON.stringify(res));    } </script>

服务端返回如下(返回时即执行全局函数):

handleCallback({"success": true, "user": "admin"})

「axios实现:」

this.$http = axios;this.$http.jsonp("http://www.domain2.com:8080/login", {    params: {},    jsonp: "handleCallback"}).then((res) => {    console.log(res); })

后端node.js代码:

var querystring = require("querystring");var http = require("http");var server = http.createServer();server.on("request", function(req, res) {    var params = querystring.parse(req.url.split("?")[1]);    var fn = params.callback;    // jsonp返回设置    res.writeHead(200, { "Content-Type": "text/javascript" });    res.write(fn + "(" + JSON.stringify(params) + ")");    res.end();});server.listen("8080");console.log("Server is running at port 8080...");

jsonp的缺点:只能发送get一种请求。

跨域资源共享(CORS)

「CORS」是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

浏览器将CORS跨域请求分为简单请求和非简单请求。

只要同时满足一下两个条件,就属于简单请求

(1)使用下列方法之一:

headgetpost

(2)请求的Heder是

AcceptAccept-LanguageContent-LanguageContent-Type: 只限于三个值:application/x-www-form-urlencoded、multipart/form-data、text/plain

不同时满足上面的两个条件,就属于非简单请求。浏览器对这两种的处理,是不一样的。

简单请求

对于简单请求,浏览器直接发出CORS请求。具体来说,就是在头信息之中,增加一个Origin字段。

GET /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

上面的头信息中,Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。

CORS请求设置的响应头字段,都以 Access-Control-开头:

「1)Access-Control-Allow-Origin」:必选

它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。

「2)Access-Control-Allow-Credentials」:可选

它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

「3)Access-Control-Expose-Headers」:可选

CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader(‘FooBar’)可以返回FooBar字段的值。

非简单请求

非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

预检请求

预检"请求用的请求方法是OPTIONS,表示这个请求是用来询问的。请求头信息里面,关键字段是Origin,表示请求来自哪个源。除了Origin字段,"预检"请求的头信息包括两个特殊字段。

OPTIONS /cors HTTP/1.1Origin: http://api.bob.comAccess-Control-Request-Method: PUTAccess-Control-Request-Headers: X-Custom-HeaderHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0..

「1)Access-Control-Request-Method」:必选

用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT。

「2)Access-Control-Request-Headers」:可选

该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段,上例是X-Custom-Header。

预检请求的回应

服务器收到"预检"请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。

HTTP回应中,除了关键的是Access-Control-Allow-Origin字段,其他CORS相关字段如下:

「1)Access-Control-Allow-Methods」:必选

它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。

「2)Access-Control-Allow-Headers」

如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。

「3)Access-Control-Allow-Credentials」:可选

该字段与简单请求时的含义相同。

「4)Access-Control-Max-Age」:可选

用来指定本次预检请求的有效期,单位为秒。

CORS跨域示例

「1)前端设置」

原生ajax:
var xhr = new XMLHttpRequest(); // IE8/9需用window.XDomainRequest兼容// 前端设置是否带cookiexhr.withCredentials = true;xhr.open("post", "http://www.domain2.com:8080/login", true);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xhr.send("user=admin");xhr.onreadystatechange = function() {    if (xhr.readyState == 4 && xhr.status == 200) {        alert(xhr.responseText);    }};

「2)服务端设置」

nodejs代码
var http = require("http");var server = http.createServer();var qs = require("querystring");server.on("request", function(req, res) {    var postData = "";    // 数据块接收中    req.addListener("data", function(chunk) {        postData += chunk;    });    // 数据接收完毕    req.addListener("end", function() {        postData = qs.parse(postData);        // 跨域后台设置        res.writeHead(200, {            "Access-Control-Allow-Credentials": "true",     // 后端允许发送Cookie            "Access-Control-Allow-Origin": "http://www.domain1.com",    // 允许访问的域(协议+域名+端口)            /*              * 此处设置的cookie还是domain2的而非domain1,因为后端也不能跨域写cookie(nginx反向代理可以实现),             * 但只要domain2中写入一次cookie认证,后面的跨域接口都能从domain2中获取cookie,从而实现所有的接口都能跨域访问             */            "Set-Cookie": "l=a123456;Path=/;Domain=www.domain2.com;HttpOnly"  // HttpOnly的作用是让js无法读取cookie        });        res.write(JSON.stringify(postData));        res.end();    });});server.listen("8080");console.log("Server is running at port 8080...");
nginx代理跨域

nginx代理跨域,实质和CORS跨域原理一样,通过配置文件设置请求响应头Access-Control-Allow-Origin…等字段。

nginx配置解决iconfont跨域

浏览器跨域访问js、css、img等常规静态资源被同源策略许可,但iconfont字体文件(eot|otf|ttf|woff|svg)例外,此时可在nginx的静态资源服务器中加入以下配置。

location / {  add_header Access-Control-Allow-Origin *;}
nginx反向代理接口跨域

跨域问题:同源策略仅是针对浏览器的安全策略。服务器端调用HTTP接口只是使用HTTP协议,不需要同源策略,也就不存在跨域问题。

实现思路:通过Nginx配置一个代理服务器域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域访问。

「nginx具体配置:」

#proxy服务器server {    listen       81;    server_name  www.domain1.com;    location / {        proxy_pass   http://www.domain2.com:8080;  #反向代理        proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里域名        index  index.html index.htm;        # 当用webpack-dev-server等中间件代理接口访问nignx时,此时无浏览器参与,故没有同源限制,下面的跨域配置可不启用        add_header Access-Control-Allow-Origin http://www.domain1.com;  #当前端只跨域不带cookie时,可为*        add_header Access-Control-Allow-Credentials true;    }}
nodejs中间件代理跨域

node中间件实现跨域代理,原理大致与nginx相同,都是通过启一个代理服务器,实现数据的转发,也可以通过设置cookieDomainRewrite参数修改响应头中cookie中域名,实现当前域的cookie写入,方便接口登录认证。

非vue框架的跨域

使用node + express + http-proxy-middleware搭建一个proxy服务器。

前端代码:
var xhr = new XMLHttpRequest();// 前端开关:浏览器是否读写cookiexhr.withCredentials = true;// 访问http-proxy-middleware代理服务器xhr.open("get", "http://www.domain1.com:3000/login?user=admin", true);xhr.send();
中间件服务器代码:
var express = require("express");var proxy = require("http-proxy-middleware");var app = express();app.use("/", proxy({    // 代理跨域目标接口    target: "http://www.domain2.com:8080",    changeOrigin: true,    // 修改响应头信息,实现跨域并允许带cookie    onProxyRes: function(proxyRes, req, res) {        res.header("Access-Control-Allow-Origin", "http://www.domain1.com");        res.header("Access-Control-Allow-Credentials", "true");    },    // 修改响应信息中的cookie域名    cookieDomainRewrite: "www.domain1.com"  // 可以为false,表示不修改}));app.listen(3000);console.log("Proxy server is listen at port 3000...");
vue框架的跨域

node + vue + webpack + webpack-dev-server搭建的项目,跨域请求接口,直接修改webpack.config.js配置。开发环境下,vue渲染服务和接口代理服务都是webpack-dev-server同一个,所以页面与代理接口之间不再跨域。

webpack.config.js部分配置:

module.exports = {    entry: {},    module: {},    ...    devServer: {        historyApiFallback: true,        proxy: [{            context: "/login",            target: "http://www.domain2.com:8080",  // 代理跨域目标接口            changeOrigin: true,            secure: false,  // 当代理某些https服务报错时用            cookieDomainRewrite: "www.domain1.com"  // 可以为false,表示不修改        }],        noInfo: true    }}
document.domain + iframe跨域

此方案仅限主域相同,子域不同的跨域应用场景。实现原理:两个页面都通过js强制设置document.domain为基础主域,就实现了同域。

1)父窗口:http://www.domain.com/a.html

<script>    document.domain = "domain.com";    var user = "admin";</script>

1)子窗口:http://child.domain.com/a.html

<script>    document.domain = "domain.com";    // 获取父窗口中变量    console.log("get js data from parent ---> " + window.parent.user);</script>
location.hash + iframe跨域

实现原理: a欲与b跨域相互通信,通过中间页c来实现。 三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。

具体实现:A域:a.html -> B域:b.html -> A域:c.html,a与b不同域只能通过hash值单向通信,b与c也不同域也只能单向通信,但c与a同域,所以c可通过parent.parent访问a页面所有对象。

1)a.html:http://www.domain1.com/a.html

<script>    var iframe = document.getElementById("iframe");    // 向b.html传hash值    setTimeout(function() {        iframe.src = iframe.src + "#user=admin";    }, 1000);        // 开放给同域c.html的回调方法    function onCallback(res) {        alert("data from c.html ---> " + res);    }</script>

2)b.html:http://www.domain2.com/b.html

<script>    var iframe = document.getElementById("iframe");    // 监听a.html传来的hash值,再传给c.html    window.onhashchange = function () {        iframe.src = iframe.src + location.hash;    };</script>

3)c.html:http://www.domain1.com/c.html

<script>    // 监听b.html传来的hash值    window.onhashchange = function () {        // 再通过操作同域a.html的js回调,将结果传回        window.parent.parent.onCallback("hello: " + location.hash.replace("#user=", ""));    };</script>
window.name + iframe跨域

window.name属性的独特之处:name值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。

1)a.html:http://www.domain1.com/a.html

var proxy = function(url, callback) {    var state = 0;    var iframe = document.createElement("iframe");    // 加载跨域页面    iframe.src = url;    // onload事件会触发2次,第1次加载跨域页,并留存数据于window.name    iframe.onload = function() {        if (state === 1) {            // 第2次onload(同域proxy页)成功后,读取同域window.name中数据            callback(iframe.contentWindow.name);            destoryFrame();        } else if (state === 0) {            // 第1次onload(跨域页)成功后,切换到同域代理页面            iframe.contentWindow.location = "http://www.domain1.com/proxy.html";            state = 1;        }    };    document.body.appendChild(iframe);    // 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)    function destoryFrame() {        iframe.contentWindow.document.write("");        iframe.contentWindow.close();        document.body.removeChild(iframe);    }};// 请求跨域b页面数据proxy("http://www.domain2.com/b.html", function(data){    alert(data);});

2)proxy.html:http://www.domain1.com/proxy.html

中间代理页,与a.html同域,内容为空即可。

3)b.html:http://www.domain2.com/b.html

<script>    window.name = "This is domain2 data!";</script>

通过iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。

postMessage跨域

postMessage是HTML5 XMLHttpRequest Level 2中的API,且是为数不多可以跨域操作的window属性之一,它可用于解决以下方面的问题:

页面和其打开的新窗口的数据传递多窗口之间消息传递页面与嵌套的iframe消息传递上面三个场景的跨域数据传递

用法:postMessage(data,origin)方法接受两个参数:

「data」: html5规范支持任意基本类型或可复制的对象,但部分浏览器只支持字符串,所以传参时最好用JSON.stringify()序列化。「origin」: 协议+主机+端口号,也可以设置为"*",表示可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"。

1)a.html:http://www.domain1.com/a.html

<script>           var iframe = document.getElementById("iframe");    iframe.onload = function() {        var data = {            name: "aym"        };        // 向domain2传送跨域数据        iframe.contentWindow.postMessage(JSON.stringify(data), "http://www.domain2.com");    };    // 接受domain2返回数据    window.addEventListener("message", function(e) {        alert("data from domain2 ---> " + e.data);    }, false);</script>

2)b.html:http://www.domain2.com/b.html

<script>    // 接收domain1的数据    window.addEventListener("message", function(e) {        var data = JSON.parse(e.data);        if (data) {            data.number = 16;            // 处理后再发回domain1            window.parent.postMessage(JSON.stringify(data), "http://www.domain1.com");        }    }, false);</script>
WebSocket协议跨域

WebSocket protocol是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server push技术的一种很好的实现。 原生WebSocket API使用起来不太方便,我们使用http://Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。

1)前端代码:

user input:
<script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script><script>var socket = io("http://www.domain2.com:8080");// 连接成功处理socket.on("connect", function() { // 监听服务端消息 socket.on("message", function(msg) { console.log("data from server: ---> " + msg); }); // 监听服务端关闭 socket.on("disconnect", function() { console.log("Server socket has closed."); });});document.getElementsByTagName("input")[0].onblur = function() { socket.send(this.value);};</script>

2)Nodejs socket后台:

var http = require("http");var socket = require("socket.io");// 启http服务var server = http.createServer(function(req, res) {    res.writeHead(200, {        "Content-type": "text/html"    });    res.end();});server.listen("8080");console.log("Server is running at port 8080...");// 监听socket连接socket.listen(server).on("connection", function(client) {    // 接收信息    client.on("message", function(msg) {        client.send("hello:" + msg);        console.log("data from client: ---> " + msg);    });    // 断开处理    client.on("disconnect", function() {        console.log("Client socket has closed.");     });});
小结

以上就是几种常见的跨域解决方案

jsonp(只支持get请求,支持老的IE浏览器)适合加载不同域名的js、css,img等静态资源;CORS(支持所有类型的HTTP请求,但浏览器IE10以下不支持)适合做ajax各种跨域请求;Nginx代理跨域和nodejs中间件跨域原理都相似,都是搭建一个服务器,直接在服务器端请求HTTP接口,这适合前后端分离的前端项目调后端接口。document.domain+iframe适合主域名相同,子域名不同的跨域请求。postMessage、websocket都是HTML5新特性,兼容性不是很好,只适用于主流浏览器和IE10+。
x
推荐阅读

几种常见的跨域解决方案-焦点讯息

2023-05-06 18:20:05

方集乡_关于方集乡介绍 焦点播报

2023-05-06 17:47:32

高青农商银行召开一季度经营网点“一点一策”汇报评比会

2023-05-06 17:27:13

全球新资讯:山东印发博士后科研工作平台评估办法

2023-05-06 16:33:24

宝马电动M型车将很快比燃油车更受欢迎_世界速看料

2023-05-06 15:49:38

ST中嘉:公司目前未有触及退市风险警示的情形;公司经营活动正常,不存在应披露而未披露的重大事项

2023-05-06 15:13:48

当前头条:钢材下游周报:上市公司业绩密集披露,房地产销售平淡

2023-05-06 14:42:03

一季度营收大涨三成,借势高尔夫的比音勒芬正在出海_当前独家

2023-05-06 14:07:20

湖北高考状元2021恩施(湖北高考状元2021)

2023-05-06 13:20:37

5月,南京这些景区免费开放!

2023-05-06 12:12:19
相关新闻

几种常见的跨域解决方案-焦点讯息

2023-05-06 18:20:05

方集乡_关于方集乡介绍 焦点播报

2023-05-06 17:47:32

高青农商银行召开一季度经营网点“一点一策”汇报评比会

2023-05-06 17:27:13

全球新资讯:山东印发博士后科研工作平台评估办法

2023-05-06 16:33:24

宝马电动M型车将很快比燃油车更受欢迎_世界速看料

2023-05-06 15:49:38

ST中嘉:公司目前未有触及退市风险警示的情形;公司经营活动正常,不存在应披露而未披露的重大事项

2023-05-06 15:13:48

当前头条:钢材下游周报:上市公司业绩密集披露,房地产销售平淡

2023-05-06 14:42:03

一季度营收大涨三成,借势高尔夫的比音勒芬正在出海_当前独家

2023-05-06 14:07:20

湖北高考状元2021恩施(湖北高考状元2021)

2023-05-06 13:20:37

5月,南京这些景区免费开放!

2023-05-06 12:12:19

热消息:《文字玩出花》凑齐药费凑够十五块药费通关攻略

2023-05-06 11:53:27

比亚迪董秘回复:感谢您对公司的细致关注!根据公司公告,售后服务费用占比总销售费用约40%_焦点讯息

2023-05-06 11:02:40

全球快报:不做手机也赚钱!诺基亚发布首个CE认证的5G一体化无人机解决方案

2023-05-06 10:59:19

世界即时看!“穿越”古华大地,古典园林与古镇老街的梦幻联动

2023-05-06 10:30:31

今日最新!最新!苹果股价大涨5% 市值猛增8744亿元!库克:将在更多产品中加入人工智能技术

2023-05-06 09:56:45

全球视点!5月1日起江苏正式入汛 汛期全省降水量较常年同期偏多

2023-05-06 09:28:13

建设按下“加速键” 我市一批安置房项目建设取得新进展

2023-05-06 08:28:21

美称克宫遭无人机袭击系俄“自导自演”,俄媒借外嘴驳斥

2023-05-06 07:55:41

美股集体收高 银行股反弹,西太平洋合众银行涨逾81% 环球快消息

2023-05-06 05:57:51

当前速看:子公司遭遇合同诈骗 威孚高科:与公司主要产品业务无重叠

2023-05-06 04:58:39

【世界新视野】Qq更换手机通讯录怎样导入新手机

2023-05-06 02:04:29

“点题整治”9大民生领域

2023-05-06 00:17:26

​又一TVB新剧本月播!力捧女星豁出去,拍被奸戏展演技

2023-05-05 22:44:53

[直击业绩会]联泓新科:新项目建设稳步扎实推进 新工艺新技术等研发创新资源储备蓄势待发

2023-05-05 21:44:33

[路演]中科电气:向LG批量供货的产品为人造石墨负极材料

2023-05-05 21:17:56

杨莉娜专访:相较国内欧洲足球更职业水平更高 留洋为踢好世界杯

2023-05-05 20:16:00

天天微资讯!苏大维格:股东虞樟星持有的公司股份约2127万股被司法冻结

2023-05-05 19:50:57

微速讯:起底北京痘博士:被周杰伦起诉又撤诉9次,注册资本由1亿降为100万

2023-05-05 19:20:13

世界微速讯:《延禧攻略》纯妃下马,全靠愉贵人做这件事,令妃娴妃鼎力相助

2023-05-05 18:53:03

为什么广播电视编导专业学费比别的专业高?

2023-05-05 18:07:57

环球百事通!中欧班列多线开行

2023-05-05 17:52:51

一保洁员工上班6分钟晕倒后死亡企业或付百万元赔偿

2023-05-05 17:04:54

空中用5G!工业和信息化部批复5G地空通信试验频率 热消息

2023-05-05 17:02:57

大明宫攻略_大明宫攻略介绍|环球播报

2023-05-05 16:14:30

债权人转让债权有什么条件

2023-05-05 15:46:56

汤普森父亲:谁赢下湖人勇士之战,很可能就会夺冠

2023-05-05 15:31:04

今日黄金td开盘价格(2023年5月5日)-全球视讯

2023-05-05 14:59:41

新笑傲江湖怎么学独孤九剑 新笑傲江湖学独孤九剑方法介绍

2023-05-05 14:06:42

【天天快播报】来济南需要了解哪些方言?

2023-05-05 13:36:44

柳工:柳工是平陆运河项目的主要土方机械供应商之一|当前快看

2023-05-05 13:02:06

凯鸿物流2022年净利2934.23万同比下滑17.51% 投资收益减少-环球今头条

2023-05-05 12:22:03

速看:孚能科技:营收首次突破百亿,海外客户占比约60%

2023-05-05 12:04:31

会考成绩查询网站入口江西_会考成绩查询网站_简讯

2023-05-05 11:29:58

博主探店要强化社会责任 每日速讯

2023-05-05 11:02:53

21个小时!山东劳动节开启最长负电价时段-世界视点

2023-05-05 10:34:12

国家电网2023年绿电交易成交量突破300亿千瓦时!

2023-05-05 10:00:50

易维哲:黄金等待非农,原油暂时震荡-世界热闻

2023-05-05 09:50:55

久之洋:公司坚定以“技术+产业+资本”的运营模式实现可循环持续高质量发展的发展思路,有节奏、依法合规地推动公司做强做优做大

2023-05-05 09:29:44

当前简讯:两市融资余额增加106.15亿元

2023-05-05 09:08:16

迪生力:5月4日融资买入13.5万元,融资融券余额4578.74万元 环球看热讯

2023-05-05 08:36:36

当前热议!周五(5月5日)重点关注财经事件和经济数据

2023-05-05 08:02:58

银保监会:保险业偿付能力指标维持在合理区间 焦点快报

2023-05-05 07:21:36

队记:除非遭遇挫折 热火对巴特勒出战G3持乐观态度

2023-05-05 06:08:51

实况足球|震撼!又造小神兽,比维埃拉防守跑动给力!抽到即赚

2023-05-05 05:03:58

金价再创历史新高!年内涨幅超10%,黄金经销商:近期回购量明显上升

2023-05-05 03:07:53

天天新动态:身边2个低门槛小商机,几万块起步,懂行后也能闷声发财!

2023-05-05 01:03:18

“公园里的莎士比亚”正在上海外滩源上演,濮存昕等参演

2023-05-04 22:53:48

广州大厦地址查询_广州大厦地址|天天热讯

2023-05-04 22:02:23

环球观点:李宇嘉:京东砸60亿建公寓,热点城市“买房独大”预期或被打破

2023-05-04 21:27:52

世界热资讯!方紫_关于方紫介绍

2023-05-04 21:05:28

节后旅游股暴跌!五一国内旅游收入破1400亿,等涨停的股民傻眼了

2023-05-04 19:42:48

全球要闻:福特途睿欧是什么车?福特途牛的中文名是什么?

2023-05-04 19:07:48

看热讯:新兴业务高速增长 信息通信业发展动力足

2023-05-04 18:52:49

新龙县气象台发布雷电黄色预警信号【III级/较重】【2023-05-04】 当前热议

2023-05-04 18:21:03

【视频】云南弥勒:月季花海迷人眼,芳香四溢醉人心 世界速讯

2023-05-04 17:49:27

光伏设备板块一季度迎开门红 终端装机量持续上升

2023-05-04 17:10:33

俄罗斯南部两处炼油厂遭无人机袭击起火

2023-05-04 16:44:09

韶关企业停息挂账方式是什么?借款人停息挂账的申请条件有哪些?

2023-05-04 16:22:41

免费鉴定,包邮到家!微拍堂鉴真阁服务再升级!

2023-05-04 16:21:06

环球视点!寻找中国好面料!2023中国面料之星启动仪式暨服装品牌需求精准对接会在柯桥召开

2023-05-04 15:41:11

环球微动态丨上游观察丨销量同比增长26% 重庆新能源汽车晒出一季度“成绩单”

2023-05-04 15:25:35

足金回收多少钱一克(2023年5月4日)_当前热议

2023-05-04 14:47:39

商络电子:4月26日召开业绩说明会,投资者参与

2023-05-04 14:20:50

环球播报:新能源和储能检测认证迎来黄金期

2023-05-04 13:40:25

午评:主力不讲武德强拉沪指,创指深指背离大跌!指数或留下后遗症?接下来怎么看?

2023-05-04 13:09:58

中单泰坦爆火,MSI季中赛BLG仅差一步晋级;电刀回归基础属性大削

2023-05-04 12:36:45

快乐的一天/北斗心灵成长双语绘本 天天热讯

2023-05-04 12:03:19

《拳击俱乐部2》实机预告 2023年年内上线|今日快看

2023-05-04 11:24:05

积极做好自我监测 成都疾控这份“节后返岗健康提示”请查收_每日热议

2023-05-04 11:05:08

世界上最长的人工运河是什么_世界上最长的人工运河介绍

2023-05-04 11:04:01

全球热推荐:三河市场监管多举措护航假期市场

2023-05-04 10:37:39

天天速讯:港股异动 | 合景泰富集团(01813)涨超10% 集团称正沟通2.12亿元还款计划 公司经营正常

2023-05-04 10:00:37

国家税务总局:“五一”假期旅游服务消费快速恢复

2023-05-04 09:38:06

唐人神(002567)4月28日主力资金净卖出7352.09万元

2023-05-04 09:22:27

选择大城市逐梦还是小城市安稳 当前热闻

2023-05-04 08:41:04

【全球新视野】“五一”假期,中国交通显实力

2023-05-04 08:03:42

【全球独家】怎么应用我的的个人图书馆http amp 47 amp 47 www 360doc com amp 4

2023-05-04 07:07:45

苹果M3芯片交付或延期,新款MacBook和iPad今年无望问世

2023-05-04 06:15:44

美萍记账通(美屏)-世界新要闻

2023-05-04 05:02:19

机械中级工程师考试题库 机械中级工程师

2023-05-04 02:15:49

“新人”新基“爆场”发行,节后专户派还是公募派更有戏? 环球看热讯

2023-05-04 00:00:20

人类如何超越光速?太阳帆的秘诀.人造物速度小考-热闻

2023-05-03 21:59:31

精彩看点:致敬劳动者!三代电力工程师赓续“劳动精神”

2023-05-03 20:43:13

景区抓住“流量密码” “五一”假期新玩法 折射需求新“脉动” 当前报道

2023-05-03 19:40:11

当日快讯:城地香江:第一大股东拟减持不超450万股公司股份

2023-05-03 19:03:34

当前简讯:挖补地上下村

2023-05-03 17:55:22

每日焦点!“复兴号”动车组将首次驶上青藏铁路

2023-05-03 16:50:46

世界快资讯:宓怎么读音

2023-05-03 16:05:57

2023注会经济法核心入门知识点18:留置权 全球速讯

2023-05-03 15:23:58

当前速讯:4 月楼市月评:宁波楼市加速“撕裂”!

2023-05-03 14:24:01