cors跨域_详解跨域及CORS解决方案

1.发现问题[what]

在开发基于WEB应用的时候,一般情况下前端负责界面展示,后端负责业务逻辑,尤其是当前分布式、微服务、前后端分离架构的广泛使用,前端调用后端获取数据,难免会出现数据访问跨域现象:

当浏览器console出现下面的提示,说明出现了跨域问题。

Access to XMLHttpRequest at 'http://www.float.com/goods/findPage?page=1&size=5' from origin 'www.integer.net.cn' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

关键词:

origin:域、源

CORS:全称是"跨域资源共享"(Cross-Origin Resource Sharing)

blocked:阻止,阻塞

Access-Control-Allow-Origin:HTTP协议中与跨域有关的请求头信息。

CORS policy:CORS策略

接下来有个问题,域是什么鬼?[来看我]


2.什么是域[翻白眼]

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为不同的域

63f7e8b537eef0e8320500f5dff1deca.png

跨域


3.为什么会出现跨域问题

出于安全考虑,浏览器使用同源策略(SameOriginPolicy)进行访问的限制。

所谓同源(或同一个域)就是两个请求具有相同的协议(protocol),主机(host)和端口号(port),这三者均相同则表示这两个请求同源。

同源策略防止当前域的javascript脚本和另外一个域的内容进行交互,这就是为什么出现跨域访问被阻止的原因。

同源策略是Web应用程序安全模型中的一个重要概念,它由 Netscape 公司在1995年引入浏览器。该策略最初是为保护DOM的访问而设计的,Web浏览器允许第一个Web页面中包含的脚本访问第二个Web页面中的数据,但前提是两个Web页面具有相同的源(origin)。后来进行了扩展,此策略可防止一个页面上的恶意脚本(ajax请求)访问另一个网页上的敏感数据。

c317d8d404f7fe1f9c9763affcca51b1.png

恶意脚本访问敏感数据

目前Web应用程序广泛依赖HTTP cookie来维护经过身份验证的用户会话,服务器基于cookie信息来显示或者获取敏感信息。客户端必须保证无关站点与当前站点严格分离,以防止数据机密性或完整性丢失。

同源策略主要防止一个域的javascript脚本和另外一个域的内容进行交互。

主要限制包括:

  • 不同源的页面之间Cookie、LocalStorage 和 IndexDB无法共享
  • 不同源AJAX 请求不能发送

通过相应的HTML标记嵌入的资源不受限制,如图像,CSS和脚本

  • 图像: 1.png
  • CSS:
  • 脚本:
1c73e0587ca259b601c1e26e0fd21580.png

跨域请求

  • (1)当访问http://www.integer.net.cn的时候,浏览器发送GET 请求获取主页,这时候当前页面的域指定为http://www.integer.net.cn
  • (2)通过1.png访问1.png图片,没有跨域,允许访问,通过2.png访问2.png图片,虽然跨域,但访问的是HTML嵌入资源,不受同源策略影响,依然可以访问。
  • (3)通过访问a.css,没有跨域,允许访问,通过< link href="http://www.double.net.cn/b.css">访问b.css,虽然跨域,但访问的是HTML嵌入资源,不受同源策略影响。
  • (4)使用ajax异步请求http://www.integer.net.cn域下的数据,没有跨域,允许访问
  • (5)使用ajax异步请求http://www.float.com域下的数据,此时跨域,同源策略阻止继续访问,是否允许访问由CORS策略控制。

从以上分析可以看出,只有当ajax异步请求跨域时,同源策略才会起作用,跨域请求就一定不能访问呢?当然不是,上面已经提及,是否能访问跨域资源由CORS策略决定的,那么什么是CORS策略呢?


4.CORS跨域解决方案(服务端)

CORS策略,它允许浏览器向跨域服务器发出XMLHttpRequest(AJAX)请求,从而克服了AJAX只能同源访问的限制。

整个CORS通信过程,前端都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨域,就会自动添加一些附加的头信息(针对简单请求),有时还会多出一次附加的请求(针对复杂请求),但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨域通信。

上面这段话,翻译成大白话就是浏览器发现AJAX请求跨域,添加附加信息(简单请求)或者附加请求(复杂请求)发送到服务器,如果服务器端允许当前访问,则继续访问返回响应结果,如果服务器不允许该来源访问,则会出现跨域访问现象。所以,主动权掌握在服务器手里。这就是CORS策略。

就像你想要约隔壁班的女生看电影,人家和你不是一个班根本不认识你,去不去由人家决定。当然,附加的信息就是你表明自己身份去邀请人家,这里还有一个问题,如果只是看电影这种简单请求,你拿着票表达诚意就行。但是对于其他复杂请求,问一次肯定不行,先要进行一次预请求,试探一下,试探成功后再进行复杂请求。

那么哪些请求是简单请求,哪些是复杂请求呢?

简单请求需要满足以下几点:

  • 请求是GET、POST、HEAD三种
  • HTTP的头信息不超出以下几种字段 Accept、Accept-Language、Content-Language、Content-Type
  • Content-Type 的值仅限于下列三者之一:text/plain、multipart/form-data、application/x-www-form-urlencoded

什么是复杂请求呢,除了简单请求都是复杂请求。

比如说你需要发送PUT、DELETE等HTTP请求,或者发送Content-Type: application/json的内容,这些就都是复杂请求。

那么简单请求中附加的信息是什么呢?

跨域请求HTTP头当中要求包含一个域(Origin)的信息。该域包含协议名、地址以及一个可选的端口。不过这一项实际上由浏览器代为发送,开发者不需要操作,这就是简单请求附加的信息。

服务器端对简单请求进行响应,部分响应头及解释如下:

  • Access-Control-Allow-Origin(必含) - 不可省略,否则请求按失败处理。该项控制数据的可见范围,如果希望数据对任何人都可见,可以填写"*"。
  • Access-Control-Allow-Credentials(可选) - 该项标志着请求当中是否包含cookies信息,只有一个可选值:true(必为小写)。如果不包含cookies,请略去该项,而不是填写false。这一项与XmlHttpRequest对象(ajax请求)当中的withCredentials属性应保持一致,即withCredentials为true时该项也为true;withCredentials为false时,省略该项不写。反之则导致请求失败。
13b032bc847dc2854387be305694d455.png

简单请求

任何不满足上述简单请求要求的请求,都属于复杂请求。

复杂请求会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。预检请求为OPTIONS请求,用于向服务器请求权限信息的。预检请求被成功响应后,才会发出真实请求,携带真实数据。

6b10293126e3cf89ce1b14bd77de1340.png

复杂请求

预请求以OPTIONS形式发送,当中同样包含域,并且还包含了两项CORS特有的内容:

  • Access-Control-Request-Method – 该项内容是实际请求的种类,可以是GET、POST之类的简单请求,也可以是PUT、DELETE等等。
  • Access-Control-Request-Headers – 该项是一个以逗号分隔的列表,当中是复杂请求所使用的头部。

显而易见,这个预请求实际上就是在为之后的实际请求发送一个权限请求,在预回应返回的内容当中,服务端应当对这两项进行回复,以让浏览器确定请求是否能够成功完成。

复杂请求的部分响应头及解释如下:

  • Access-Control-Allow-Origin(必含) – 和简单请求一样的,必须包含一个域。
  • Access-Control-Allow-Methods(必含) – 这是对预请求当中Access-Control-Request-Method的回复,这一回复将是一个以逗号分隔的列表。尽管客户端或许只请求某一方法,但服务端仍然可以返回所有允许的方法,以便客户端将其缓存。
  • Access-Control-Allow-Headers(当预请求中包含Access-Control-Request-Headers时必须包含) – 这是对预请求当中Access-Control-Request-Headers的回复,和上面一样是以逗号分隔的列表,可以返回所有支持的头部。这里在实际使用中有遇到,所有支持的头部一时可能不能完全写出来,而又不想在这一层做过多的判断,没关系,事实上通过request的header可以直接取到Access-Control-Request-Headers,直接把对应的value设置到Access-Control-Allow-Headers即可。
  • Access-Control-Allow-Credentials(可选) – 和简单请求当中作用相同。
  • Access-Control-Max-Age(可选) – 以秒为单位的缓存时间。预请求的的发送并非免费午餐,允许时应当尽可能缓存。

一旦预回应如期而至,所请求的权限也都已满足,则实际请求开始发送。


5.Spring CORS –@CrossOrigin注解

Spring MVC 提供@CrossOrigin 注解. 该注解可以标注在类或者方法上

5.1. Spring CORS 配置

@CrossOrigin 默认将允许所有的源,所有头信息,@RequestMapping标注的方法进行跨域访问,maxAge 为30分钟。

c8736b4343f3b5ec835fbe5411c71e4a.png

CrossOrigin 配置参数

5.2. @CrossOrigin 注解标注在Controller类

@CrossOrigin(origins = "*", allowedHeaders = "*")@Controllerpublic class HomeController {    @GetMapping(path="/")    public String homeInit(Model model) {        return "home";    }}

表明该类的所有方法,均实现CORS策略。

5.3. @CrossOrigin 注解标注在方法

@Controllerpublic class HomeController {    @CrossOrigin(origins = "*", allowedHeaders = "*")    @GetMapping(path="/")    public String homeInit(Model model) {        return "home";    }}

表明该方法实现CORS策略

5.4. @CrossOrigin 在方法级覆盖类级注解

@Controller@CrossOrigin(origins = "*", allowedHeaders = "*")public class HomeController {    @CrossOrigin(origins = "http://example.com")    @GetMapping(path="/")    public String homeInit(Model model) {        return "home";    }}

homeInit() 方法只能被域 http://example.com访问,HomeController 的其他方法可以被所有的域

6.Spring CORS – 全局配置

6.1. 实现WebMvcConfigurer

为了让整个应该所有的请求均实现CORS跨域方案, 可以使用WebMvcConfigurer 并添加到 CorsRegistry中。

import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration@EnableWebMvcpublic class CorsConfiguration implements WebMvcConfigurer{    @Override    public void addCorsMappings(CorsRegistry registry) {        registry.addMapping("/**")                .allowedMethods("GET", "POST");    }}

6.2. WebMvcConfigurer Bean

spring boot应用中, 推荐声明一个 WebMvcConfigurer bean.

@Configurationpublic class CorsConfiguration {    @Bean    public WebMvcConfigurer corsConfigurer()     {        return new WebMvcConfigurer() {            @Override            public void addCorsMappings(CorsRegistry registry) {                registry.addMapping("/**").allowedOrigins("http://localhost:8080");            }        };    }}

6.3 CORS 与Spring Security

为了能够使CORS 支持 Spring security, 配置CorsConfigurationSource bean 并且使用 HttpSecurity.cors() 进行设置。

@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {     @Override    protected void configure(HttpSecurity http) throws Exception {        http.cors().and()            //other config    }     @Bean    CorsConfigurationSource corsConfigurationSource()     {        CorsConfiguration configuration = new CorsConfiguration();        configuration.setAllowedOrigins(Arrays.asList("https://example.com"));        configuration.setAllowedMethods(Arrays.asList("GET","POST"));        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**", configuration);        return source;    }}

7.Java CORS过滤器

如果应用中没有集成Spring或者SpringBoot框架,可以直接使用过滤器来进行配置,基本原理就是对Http 头信息就行设置。

7.1Response Headers

· Access-Control-Allow-Origin : 指示允许哪些域进行跨域访问. “*” 代表没有限制.

· Access-Control-Allow-Credentials : 指示跨域访问是否支持用户身份,即cookie.

· Access-Control-Expose-Headers : 指示哪些头信息暴露出来.

· Access-Control-Max-Age : 指示预请求响应在客户端缓存的时间.

· Access-Control-Allow-Methods : 指示允许哪些方法可以访问资源

· Access-Control-Allow-Headers :指示在实际请求中哪些头信息被允许.

7.2. Request Headers

· Origin : 指示跨域请求或者预请求的来源.

· Access-Control-Request-Method : 在预请求中使用,告诉服务器实际请求讲使用该方法

· Access-Control-Request-Headers :在预请求中使用,告诉服务器实际请求中将带的头信息.

7.3. Java CORS 过滤器demo

import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; /** * Servlet Filter implementation class CORSFilter */// Enable it for Servlet 3.x implementations/* @ WebFilter(asyncSupported = true, urlPatterns = { "/*" }) */public class CORSFilter implements Filter {     /**     * Default constructor.     */    public CORSFilter() {        // TODO Auto-generated constructor stub    }     /**     * @see Filter#destroy()     */    public void destroy() {        // TODO Auto-generated method stub    }     /**     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)     */    public void doFilter(ServletRequest servletRequest,                           ServletResponse servletResponse, FilterChain chain)            throws IOException, ServletException {         HttpServletRequest request = (HttpServletRequest) servletRequest;        System.out.println("CORSFilter HTTP Request: " + request.getMethod());         // Authorize (allow) all domains to consume the content        ((HttpServletResponse) servletResponse)          .addHeader("Access-Control-Allow-Origin", "*");        ((HttpServletResponse) servletResponse)          .addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");         HttpServletResponse resp = (HttpServletResponse) servletResponse;         // For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake        if (request.getMethod().equals("OPTIONS")) {            resp.setStatus(HttpServletResponse.SC_ACCEPTED);            return;        }         // pass the request along the filter chain        chain.doFilter(request, servletResponse);    }     /**     * @see Filter#init(FilterConfig)     */    public void init(FilterConfig fConfig) throws ServletException {        // TODO Auto-generated method stub    } }

web.xml配置

CorsFiltercom.howtodoinjava.examples.cors.CORSFilterCorsFilter/*
weixin_39762441
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cors跨域
weixin_57176230的博客
05-17 1871
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 方法一 @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry)
使用CORS解决跨域问题
weixin_34163553的博客
05-02 1319
1.跨域问题 1.1 什么是跨域 跨域是指跨域名的访问,以下情况都属于跨域跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 www.jd.com:8080 与 www.jd.com:8081 二级域名不同 item.jd.com 与 miaosha.jd.com 如果域名和端口都相同,但是请求路径不同,不属于跨...
JS跨域解决方案之使用CORS实现跨域
11-24
引言        跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免的需要进行跨域操作,所以跨域能力也算是前端工程师的基本功之一。   和大多数跨域解决方案一样,JSONP也是我的选择,可是某天PM的需求变了,某功能需要改成支持POST,因为传输的数据量比较大,GET形式搞不定。所以折腾了下闻名已久的CORS跨域资源共享,Cross-Origin Resource Sharing),这边文章也就是折腾期间的小记与总结。 •CORS能做什么
CORS 报错】跨域请求问题:CORS 多种环境下的解决方案
Allen-
07-11 6145
CORS问题是前端开发中常见的一个挑战,但通过合理的代理配置和服务器设置可以有效解决。在不同环境下,可以使用Vite的代理功能、设置请求头、JSONP、服务器端代理、Nginx代理等多种方式来解决跨域问题。
什么是 CORS ?一文搞懂 CORS 跨域原理!零基础入门到精通,收藏这一篇就够了
最新发布
leah126的博客
08-28 2926
CORS,全称为“跨域资源共享”(Cross-Origin Resource Sharing),是一种机制,它使用额外的 HTTP 头来告诉浏览器允许一个网页从另一个域(不同于该网页所在的域)请求资源。这样可以在服务器和客户端之间进行安全的跨域通信。
03Web服务器基础-19. HTTP协议请求部分详解
学无止境
09-10 498
03Web服务器基础-19. HTTP协议请求部分详解
【JavaScript 教程】浏览器—CORS 通信
web前端开发
03-23 478
作者 |阮一峰CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨域...
CORS跨域
jasonjkj的博客
01-20 746
ajax的跨域2:     之前,是jasonp的跨域原理     现在,有一种可以替代jasonp的跨域解决方案---CORS     其他的解决方案:         设置document.domain=my.com         使用websocket通信(建议使用Socket.io)         图片Ping         iframe     参考文章:    
jsonp解决跨域_js_方案_web_跨域_
10-02
标题中的“jsonp解决跨域”指的是JavaScript对象标记...随着技术的发展,CORS和其他现代技术逐渐成为主流,提供了更强大、更安全的跨域解决方案。然而,理解和掌握jsonp的原理对理解Web开发中的跨域问题仍然很有帮助。
CORS跨域资源共享及解决方案.docx
10-26
### CORS跨域资源共享及其解决方案详解 #### 一、CORS跨域资源共享背景 在现代Web应用开发中,前后端分离已成为一种主流趋势。在这种模式下,前端负责展示逻辑,而后端处理业务逻辑与数据交互。然而,由于浏览器...
详解Spring MVC CORS 跨域
08-30
详解 Spring MVC CORS 跨域 在 Web 开发中,跨域资源共享(Cross-origin resource sharing,CORS)是一个非常重要的概念。它允许 Web 应用程序可以访问不同域名下的资源,而不受同源策略的限制。今天,我们主要介绍...
CORS 跨域
Aliguagua的博客
06-10 1166
CORS 跨域 对于跨域问题,我之前只知道jsonp的解决方案,这周改版了一个很复杂的H5页面,让我接触到了另一种解决跨域的方案——CORS。刚开始还是一脸蒙蔽的,然后马上联想到了之前使用koa2的时候用过koa2-cors这个模块,当时也是解决跨域问题的,这两个应该是一样的吧。查阅资料后发现是不一样的东西。 看了阮一峰老师的跨域资源共享 CORS 详解 这片文章后,对CORS有了新的认识,原...
cors跨域
Hello_MAOSONG的博客
07-24 231
SpringMVC已经帮我们写好了CORS跨域过滤器:CorsFilter ,内部已经实现了刚才所讲的判定逻辑,我们直接用就好了。 //配置 @Configuration public class LeyouCorsConfiguration { @Bean public CorsFilter corsFilter() { //1.添加CORS配置信息 ...
跨域资源共享(CORS)问题与解决方案
Java领域优秀创作者
06-12 2550
跨域资源共享(CORS,Cross-Origin Resource Sharing)是现代web开发中常见且重要的一个概念。它涉及到浏览器的同源策略(Same-Origin Policy),该策略用于防止恶意网站从不同来源窃取数据。然而,在实际开发中,我们经常需要与不同源的资源进行交互,这就引发了跨域问题。本文将详细讨论跨域问题的产生原因、工作流程以及在Spring Boot后端和Axios前端环境中解决跨域问题的方法。
跨域CORS
颠覆我的整个世界,只为摆正你的身影
01-28 694
CORS是W3C标准。全场跨域资源共享(Cross-origin resourse sharing) 她允许浏览器向跨域资源服务器放出XMLHttpRequest请求,克服了AJAX只能同源使用的限制 1,CORS通信是浏览器自动完成的,不需要用户参与。CORS通信和同源的AJAX通信没有差别,代码完全一样,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以通信 Acces...
跨域解决方案之二-->CORS解决跨域
puyangmengxue的专栏
02-02 1334
前面简单介绍了JSONP解决跨域访问,顺便将看到的另一种跨域解决方案CORS(Cross-Origin Resource Sharing)即跨域资源共享作以简单介绍。关于CORS解决跨域的相关理论可以参考CORS跨域资源共享) CORS跨域资源共享) CORS跨域资源共享),在此处就不做深入介绍。主要介绍一下CORS如何应用。 CORS解决跨域,是在后端做简单设置,下面是做的简单测试:
详解JSONP与CORS跨域解决方案:优缺点与实战应用
本文将深入探讨两种常用的跨域解决方案:JSONP(JSON with Padding)和CORS(Cross-Origin Resource Sharing)。 首先,我们来了解一下什么是跨域。浏览器的同源策略是为了保护用户隐私和安全,它规定了JavaScript...
写文章

热门文章

  • echart两个x轴线叠加_【旗舰】2颗X轴线性马达+2个充电口?拯救者电竞手机本月发... 24648
  • 计算机画图怎样更改文字,一招教你利用画图工具修改图片上的文字 20663
  • excel转word后表格超出页面_excel表格粘贴到word太宽显示不全怎么办? 14649
  • 怎么用计算机算三角函数值,如何在手机计算器中由三角函数值求角度 11481
  • 潘通色号与rgb转换_RGBA,opacity,RGB 9300

最新文章

  • ntfs文件系统服务器版,详解NTFS文件系统+NTFS 文件系统解析
  • 华盛酒店系统客户端连不上服务器,华盛酒店管理系统-系统设置手册.pdf
  • ie jquery ajax json,internet explorer - jQuery and Ajax with json - fails in IE - Stack Overflow
2021年154篇
2020年231篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家深圳北极熊玻璃钢雕塑玻璃钢卡通雕塑安装固定河南室外玻璃钢人物雕塑厂家户外商场美陈研发公司济南促销玻璃钢卡通雕塑长沙水景玻璃钢仿铜雕塑辽宁玻璃钢卡通雕塑汤姆猫四川季节性商场美陈哪家好军人浮雕玻璃钢仿铜雕塑上海玻璃钢花盆租赁空吊气球商场美陈吊装乳白色水印玻璃钢花盆玻璃钢雕塑 青铜玻璃钢人物雕塑价格行情四川高质量玻璃钢雕塑制作水景玻璃钢雕塑加工上饶欧式玻璃钢雕塑玻璃钢雕塑工艺品产业洛阳商场美陈布置玻璃钢大象雕塑制作长宁区玻璃钢雕塑哪家好人物雕塑玻璃钢骑士马雕塑玻璃钢雕塑造型定制哪种好内蒙市政玻璃钢仿真雕塑公司濮阳玻璃钢人物卡通雕塑赣州抽象玻璃钢雕塑哪家便宜临安区玻璃钢雕塑厂家无机玻璃钢雕塑专业玻璃钢雕塑定制方法郑州玻璃钢园艺雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化