HTML5中的跨域资源共享(CORS)

发布时间: 2023-12-13 17:26:22 阅读量: 34 订阅数: 38
PDF

跨域资源共享 CORS 详解

# 1. 理解跨域资源共享(CORS) ## 1.1 跨域是什么? 在Web开发中,跨域是指网页上的一个请求试图访问不同源(域、协议或端口)的资源。由于浏览器的同源策略限制,跨域请求默认是被禁止的。 ## 1.2 跨域资源共享(CORS)的意义 跨域资源共享(CORS)是一种机制,它允许Web应用服务器进行跨域访问控制,从而在不修改源代码的情况下实现不同源之间的数据交换。 CORS的出现解决了传统上通过代理服务器或JSONP方式进行跨域请求的一些限制,简化了开发者的工作流程。它提供了一种标准化的方法,使得新的Web应用能够安全地进行跨域资源共享。 ## 1.3 CORS 的工作原理 CORS的工作原理是通过在HTTP请求和响应的头部中添加一些特定的字段来实现的。当浏览器发起跨域请求时,首先会发送一个预检请求(Preflight Requests),以确认服务器是否愿意接受实际的请求。 预检请求会包含一个OPTIONS方法,并带有一些用于描述实际请求的头部字段。服务器接收到预检请求后,通过判断请求中的头部字段来决定是否接受实际请求。 如果服务器允许跨域访问,它会在响应头中添加一些CORS相关的字段,表示允许跨域访问的资源。浏览器在收到响应后,会根据这些字段判断是否接受实际请求,并将请求的结果返回给前端。 在后续的章节中,我们将会更加详细地了解CORS的相关概念、实际应用、安全性考虑以及未来的发展趋势。 # 2. CORS的基本概念 CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,用于允许在不同域名下的浏览器与服务器之间进行跨域通信。在理解CORS之前,我们需要了解一些基本概念。 ### 2.1 简单请求与非简单请求 CORS请求被分为简单请求和非简单请求。简单请求满足以下条件: - 请求方法是 `GET`、`POST`、`HEAD` 中的一种; - 请求头部只包含了以下几种字段: - `Accept` - `Accept-Language` - `Content-Language` - `Content-Type`,只限于 `application/x-www-form-urlencoded`、`multipart/form-data`、`text/plain`; - 请求中的任意XMLHttpRequestUpload对象均没有注册任何事件监听器; - 请求中没有使用 `ReadableStream` 对象。 除了简单请求之外的都属于非简单请求。 ### 2.2 CORS 请求的特点 CORS 请求有一些特点值得注意: - CORS 请求默认是不携带身份凭证(cookie、HTTP认证信息)的,如果需要携带,需要设置 `withCredentials` 为 `true`。 - 对于简单请求,浏览器会自动在请求头中添加 `Origin` 字段,表明请求发起的源。服务器可以根据该字段来确定是否允许跨域访问。 - 对于非简单请求,浏览器会在正式请求之前先发送一个预检请求,使用的方法是 `OPTIONS`,服务器需要正确处理并返回相应的响应头信息。 - 通过 `Access-Control-Allow-Origin` 响应头,服务器可以指定允许哪些域名进行跨域访问。如果使用通配符 `*`,则表示接受任意域名的访问,但不能与 `withCredentials` 一起使用。 ### 2.3 CORS 相关的 HTTP 头部 在处理CORS请求时,服务器端需要注意以下几个HTTP头部字段: - `Access-Control-Allow-Origin`:表示允许跨域访问的源,值可以是 `*` 或指定的域名。例如:`Access-Control-Allow-Origin: http://example.com` - `Access-Control-Allow-Methods`:表示允许的跨域请求方法。例如:`Access-Control-Allow-Methods: GET, POST, OPTIONS` - `Access-Control-Allow-Headers`:表示允许的跨域请求头部。例如:`Access-Control-Allow-Headers: Content-Type, Authorization` - `Access-Control-Expose-Headers`:表示允许浏览器访问的响应头部信息。例如:`Access-Control-Expose-Headers: Content-Length, Date` 通过正确设置这些响应头部字段,服务器端可以实现对CORS请求的处理。 以上是CORS的基本概念部分内容,让我们在下一章节继续探讨CORS的实际应用。 # 3. CORS的实际应用 CORS(Cross-Origin Resource Sharing)是一种用于在前端浏览器中处理跨域请求的机制。通过使用CORS,浏览器可以安全地发送跨域请求,实现不同域之间的数据交互。本章将介绍如何在实际应用中使用CORS。 ## 3.1 在浏览器中处理CORS请求 在浏览器中处理CORS请求非常简单。当浏览器发送一个跨域请求时,它会先发送一个预检请求(preflight request)来确认服务端是否支持CORS。预检请求是一个HTTP OPTIONS请求,其中携带了一些CORS相关的头信息。 下面是一个示例的预检请求的代码: ```javascript var xhr = new XMLHttpRequest(); xhr.open('OPTIONS', 'https://api.example.com/data', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.setRequestHeader('Access-Control-Request-Method', 'GET'); xhr.setRequestHeader('Access-Control-Request-Headers', 'Authorization'); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { // 预检请求成功,可以发送实际请求了 } else { // 预检请求失败,处理错误 } } }; xhr.send(); ``` 在预检请求的响应中,服务器需要返回一些特定的头信息,以表明它是否支持CORS和允许实际请求的方法。 ## 3.2 前端代码中的CORS处理 在前端的代码中,如果要发送一个带有CORS的请求,只需要设置XMLHttpRequest对象的`withCredentials`属性为`true`即可。 下面是一个示例的前端代码,发送一个跨域请求并处理响应: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.example.com/data', true); xhr.withCredentials = true; xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { // 处理响应数据 var responseData = JSON.parse(xhr.responseText); console.log(responseData); } else { // 处理错误 } } }; xhr.send(); ``` 在上述代码中,我们通过将`withCredentials`属性设置为`true`来指示浏览器发送带有凭证的请求。这样,服务器就能够识别出请求的用户身份。 ## 3.3 后端代码中的CORS配置 除了前端代码外,后端服务器也需要进行相应的CORS配置,以确保能够安全地处理跨域请求。在服务器端,通常会在HTTP响应头部中添加一些CORS相关的头信息。 下面是一个示例的后端代码,使用Node.js和Express来配置CORS: ```javascript const express = require('express'); const app = express(); app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', 'https://example.com'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.setHeader('Access-Control-Allow-Credentials', 'true'); next(); }); app.get('/data', (req, res) => { // 处理实际请求 res.json({ message: 'Hello CORS!' }); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上述代码中,通过设置`Access-Control-Allow-Origin`头信息,我们指定了允许的来源站点。可以使用通配符`*`来允许所有站点。 通过设置`Access-Control-Allow-Methods`头信息,我们指定了允许的请求方法。 `Access-Control-Allow-Headers`头信息用于指定允许的请求头信息。 通过设置`Access-Control-Allow-Credentials`头信息,我们指定了是否允许发送带有凭证的请求。 这样,在收到浏览器的CORS请求时,服务器就会根据这些头信息进行相应的处理。 以上是在实际应用中使用CORS的一些示例代码,希望能帮助你理解如何在前端和后端进行相应的配置和处理。CORS的使用可以解决跨域请求的问题,并优雅地实现不同域之间的数据交互。 # 4. CORS的安全性考虑 跨域资源共享(CORS)作为一种用于解决跨域请求问题的机制,在提供便利的同时也带来了一些安全性考虑。本章将介绍CORS的安全风险,以及如何通过最佳实践来确保CORS的安全性。 ### 4.1 CORS的安全风险 尽管CORS可以有效地解决跨域请求问题,但不正确地配置CORS可能会导致一些安全风险。以下是一些常见的CORS安全风险: #### 4.1.1 CSRF(跨站请求伪造) CORS请求在发送请求时会自动附带相关的身份验证信息(如Cookie),这就意味着如果网站存在CSRF漏洞,攻击者可以通过伪造请求来执行恶意操作。因此,正确配置CORS对于防止CSRF攻击非常重要。 #### 4.1.2 暴露敏感信息 如果没有限制跨域请求的访问权限,CORS可能会暴露网站的敏感信息,例如个人隐私、商业机密等。因此,在配置CORS时,应仔细考虑哪些资源可以被访问,并限制访问权限。 ### 4.2 CORS安全性最佳实践 为了确保CORS的安全性,我们可以采取一些最佳实践来减少风险。以下是一些常用的CORS安全性最佳实践: #### 4.2.1 限制来源 通过配置CORS的`Access-Control-Allow-Origin`头部,我们可以限制允许跨域访问的来源。建议将该头部设置为具体的合法域名,而不是使用通配符 `*` ,这样可以降低被攻击的风险。 ```java // Java示例代码 response.setHeader("Access-Control-Allow-Origin", "https://www.example.com"); ``` #### 4.2.2 使用安全的请求方法 在CORS中,有一些请求方法(例如GET、POST)被视为简单请求,而另一些请求方法(例如PUT、DELETE)被视为非简单请求。对于非简单请求,浏览器会自动发送一个预检请求(Preflight Requests)来检查服务器是否允许该请求。因此,建议仅允许必要的请求方法,并要求进行预检请求的请求头部字段。 ```python # Python示例代码 response.headers["Access-Control-Allow-Methods"] = "GET, POST" response.headers["Access-Control-Allow-Headers"] = "Content-Type" ``` #### 4.2.3 验证请求来源 在服务器端,我们可以通过验证请求来源的方式来增加安全性。只允许特定的来源访问敏感资源,以及验证请求时携带的身份验证信息。 ```go // Go示例代码 func handleRequest(w http.ResponseWriter, r *http.Request) { origin := r.Header.Get("Origin") if isOriginAllowed(origin) { w.Header().Set("Access-Control-Allow-Origin", origin) // 处理请求 } else { // 返回错误或拒绝请求 } } ``` ### 4.3 CORS安全性配置示例 以下是一个使用Node.js和Express框架的例子,展示了如何通过配置CORS来实现安全跨域请求: ```javascript // Node.js示例代码 const express = require('express'); const app = express(); app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', 'https://www.example.com'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); next(); }); app.get('/api/data', (req, res) => { // 处理请求 }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 以上是关于CORS的安全性考虑及最佳实践的介绍。通过正确配置CORS并采取相应的安全措施,我们可以确保跨域请求的安全性,保护网站和用户的信息安全。 # 5. CORS与跨域资源共享的其他技术 在本章中,我们将探讨与CORS 相关的其他跨域资源共享技术,包括 JSONP、预检请求(Preflight Requests)以及代理服务器。我们将深入了解它们的原理、特点以及在实际应用中的使用场景。 ## 5.1 JSONP ### 5.1.1 JSONP 的原理和特点 JSONP(JSON with Padding)是一种利用 <script> 标签来实现跨域资源共享的技术。它允许在不受同源策略限制的情况下,从其他域中加载数据。JSONP 的原理是利用 <script> 标签可以跨域请求资源的特性,通过在请求的URL中指定一个回调函数的名称,服务器返回的数据将会作为回调函数的参数而被调用,从而实现跨域数据的获取。 ### 5.1.2 JSONP 的使用场景 JSONP 通常用于解决在浏览器端跨域获取 JSON 数据的需求。由于其兼容性良好,因此在老版本浏览器中仍然被广泛使用。 ```javascript // JSONP 请求示例 function handleResponse(data) { console.log("获取到的数据:", data); } var script = document.createElement("script"); script.src = "http://example.com/api/data?callback=handleResponse"; document.body.appendChild(script); ``` ### 5.1.3 JSONP 的优缺点 #### 优点: - 兼容性好,支持老版本浏览器。 - 简单易用,无需复杂的配置。 #### 缺点: - 安全性问题,因为 JSONP 是通过 <script> 标签动态加载资源,理论上来说可以执行任何脚本。 - 只支持 GET 请求,无法实现其他类型的HTTP请求。 ## 5.2 预检请求(Preflight Requests) ### 5.2.1 预检请求的概念 预检请求是指浏览器在跨域请求中使用 OPTIONS 方法向服务器发送一个预检请求,以确定是否可以安全地发送实际的跨域请求。预检请求包含一些 CORS 相关的头部信息,例如Origin和Access-Control-Request-Method,服务器根据这些信息来决定是否允许实际的跨域请求。 ### 5.2.2 预检请求的处理流程 1. 浏览器发起预检请求(OPTIONS 方法)。 2. 服务器根据请求头部信息判断是否允许实际的跨域请求。 3. 如果服务器通过预检请求,浏览器将发送实际的跨域请求。 ### 5.2.3 预检请求的示例 ```javascript // 预检请求示例 var xhr = new XMLHttpRequest(); xhr.open("POST", "http://example.com/api/data", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.withCredentials = true; // 带上 cookie xhr.send(); ``` ## 5.3 代理服务器 ### 5.3.1 代理服务器的作用 代理服务器是位于客户端和目标服务器之间的一台服务器,它可以转发客户端的请求,并将目标服务器的响应返回给客户端。在跨域请求中,可以通过代理服务器来间接获取目标服务器的数据,从而规避同源策略的限制。 ### 5.3.2 代理服务器的实现方式 常见的代理服务器实现方式包括反向代理和前向代理。反向代理是目标服务器的一层代理,它接收客户端的请求,并将请求转发给目标服务器;前向代理则是客户端的一层代理,它接收目标服务器的响应,并将响应返回给客户端。 ### 5.3.3 代理服务器的部署与配置 代理服务器的部署可以在客户端与目标服务器之间,以及目标服务器与后端服务之间进行部署。配置代理服务器时需要考虑安全性、性能以及可维护性等因素。 通过本章的学习,我们对于JSONP、预检请求以及代理服务器的原理和使用有了更深入的了解,这些技术也是在实际开发中经常会遇到的跨域资源共享相关问题的解决方案。 # 6. CORS的未来发展 在本章中,我们将讨论CORS的未来发展方向和新的技术应用。跨域资源共享(CORS)作为一种解决跨域请求限制的标准化机制,在不断地发展和完善中。随着互联网和Web技术的不断发展,CORS也面临着新的挑战和机遇。 ## 6.1 CORS的标准化进展 CORS最初由W3C(World Wide Web Consortium)提出并得到广泛支持,随后被纳入HTML5标准。目前,CORS标准已经得到了广泛的实际应用和验证,并且不断在实践中得到改进和完善。W3C持续关注着CORS相关技术的发展,并在CORS标准化的过程中接纳来自社区的反馈和建议。 在HTML5的基础上,W3C一直在推动新一代Web标准的制定,其中也包括进一步完善和扩展CORS标准。未来,我们有理由期待CORS标准会变得更加完善和强大,以应对不断变化的Web应用场景和需求。 ## 6.2 CORS 在新兴技术中的应用 随着Web技术的不断发展,新兴技术如WebAssembly、Service Workers、Progressive Web Apps等也在逐渐成为主流。这些新技术的出现将对Web应用的开发和部署方式产生重大影响,同时也会对跨域资源共享提出新的挑战。 CORS作为Web开发中重要的安全机制,将持续发挥作用并得到更加广泛的应用。随着新兴技术的发展和普及,CORS也将在更多新的场景下得到应用和验证。 ## 6.3 探索未来的跨域请求解决方案 除了CORS之外,还有许多其他解决跨域请求限制的技术和方案。例如,Web开发中常用的JSONP、代理服务器、WebSocket等技术都可以用于解决跨域请求的限制。在未来,我们也可以期待更多新的技术和解决方案的出现,来应对跨域请求的挑战。 总的来说,CORS作为目前最为成熟和广泛应用的跨域请求解决方案,将继续发展并得到更加广泛的应用。在未来,我们也有理由期待更多新的技术和解决方案的出现,来不断完善和丰富跨域请求的处理方式。 希望这部分内容能够对你有所帮助,如果有其他问题或者需要进一步了解其他章节的内容,请随时告诉我。
corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

张诚01

知名公司技术专家
09级浙大计算机硕士,曾在多个知名公司担任技术专家和团队领导,有超过10年的前端和移动开发经验,主导过多个大型项目的开发和优化,精通React、Vue等主流前端框架。
专栏简介
HTML5专栏全面介绍了HTML5的各个方面和主要特性,从简介及其基础语法和标签开始,逐步探讨了HTML5新增的语义化标签,改进的表单元素,以及音频、视频标签等多媒体嵌入技术。专栏还深入解析了Canvas绘图技术、地理定位与地图应用、拖放事件、本地存储技术和离线Web应用等前沿内容,还介绍了响应式设计与布局、动画技术、Web Workers与多线程编程、Web Socket与实时通信等新特性。此外,专栏还探讨了跨文档通信与消息传递、新数据类型与数据操作技术、跨域资源共享(CORS)和性能优化技术等实用知识,最后介绍了响应式图片与图像优化技术。HTML5专栏内容涵盖全面,旨在帮助读者系统地了解和掌握HTML5技术,为Web开发和设计提供丰富的知识与技巧。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【CMOS集成电路设计实战解码】:从基础到高级的习题详解,理论与实践的完美融合

![【CMOS集成电路设计实战解码】:从基础到高级的习题详解,理论与实践的完美融合](https://www.semiconductor-industry.com/wp-content/uploads/2022/07/process16-1024x576.png) # 摘要 CMOS集成电路设计是现代电子系统中不可或缺的一环,本文全面概述了CMOS集成电路设计的关键理论和实践操作。首先,介绍了CMOS技术的基础理论,包括晶体管工作机制、逻辑门设计基础、制造流程和仿真分析。接着,深入探讨了CMOS集成电路的设计实践,涵盖了反相器与逻辑门设计、放大器与模拟电路设计,以及时序电路设计。此外,本文还

CCS高效项目管理:掌握生成和维护LIB文件的黄金步骤

![CCS高效项目管理:掌握生成和维护LIB文件的黄金步骤](https://fastbitlab.com/wp-content/uploads/2022/11/Figure-2-7-1024x472.png) # 摘要 本文深入探讨了CCS项目管理和LIB文件的综合应用,涵盖了项目设置、文件生成、维护优化以及实践应用的各个方面。文中首先介绍了CCS项目的创建与配置、编译器和链接器的设置,然后详细阐述了LIB文件的生成原理、版本控制和依赖管理。第三章重点讨论了LIB文件的代码维护、性能优化和自动化构建。第四章通过案例分析了LIB文件在多项目共享、嵌入式系统应用以及国际化与本地化处理中的实际应

【深入剖析Visual C++ 2010 x86运行库】:架构组件精讲

![【深入剖析Visual C++ 2010 x86运行库】:架构组件精讲](https://img-blog.csdnimg.cn/aff679c36fbd4bff979331bed050090a.png) # 摘要 Visual C++ 2010 x86运行库是支持开发的关键组件,涵盖运行库架构核心组件、高级特性与实现,以及优化与调试等多个方面。本文首先对运行库的基本结构、核心组件的功能划分及其交互机制进行概述。接着,深入探讨运行时类型信息(RTTI)与异常处理的工作原理和优化策略,以及标准C++内存管理接口和内存分配与释放策略。本文还阐述了运行库的并发与多线程支持、模板与泛型编程支持,

从零开始掌握ACD_ChemSketch:功能全面深入解读

![从零开始掌握ACD_ChemSketch:功能全面深入解读](https://images.sftcdn.net/images/t_app-cover-l,f_auto/p/49840ce0-913f-11e6-af0b-00163ed833e7/4147169977/chemsketch-chemsketch5.png) # 摘要 ACD_ChemSketch是一款广泛应用于化学领域的绘图软件,本文概述了其基础和高级功能,并探讨了在科学研究中的应用。通过介绍界面布局、基础绘图工具、文件管理以及协作功能,本文为用户提供了掌握软件操作的基础知识。进阶部分着重讲述了结构优化、立体化学分析、高

蓝牙5.4新特性实战指南:工业4.0的无线革新

![蓝牙5.4新特性实战指南:工业4.0的无线革新](https://ai2-s2-public.s3.amazonaws.com/figures/2017-08-08/0d180662adb5cea5be748d16f00ebfb2414b44f8/2-Figure1-1.png) # 摘要 蓝牙技术是工业4.0不可或缺的组成部分,它通过蓝牙5.4标准实现了新的通信特性和安全机制。本文详细概述了蓝牙5.4的理论基础,包括其新增功能、技术规格,以及与前代技术的对比分析。此外,探讨了蓝牙5.4在工业环境中网络拓扑和设备角色的应用,并对安全机制进行了评估。本文还分析了蓝牙5.4技术的实际部署,包

【Linux二进制文件执行错误深度剖析】:一次性解决执行权限、依赖、环境配置问题(全面检查必备指南)

![【Linux二进制文件执行错误深度剖析】:一次性解决执行权限、依赖、环境配置问题(全面检查必备指南)](https://media.geeksforgeeks.org/wp-content/uploads/20221107004600/img3.jpg) # 摘要 本文详细探讨了二进制文件执行过程中遇到的常见错误,并提出了一系列理论与实践上的解决策略。首先,针对执行权限问题,文章从权限基础理论出发,分析了权限设置不当所导致的错误,并探讨了修复权限的工具和方法。接着,文章讨论了依赖问题,包括依赖管理基础、缺失错误分析以及修复实践,并对比了动态与静态依赖。环境配置问题作为另一主要焦点,涵盖了

差分输入ADC滤波器设计要点:实现高效信号处理

![差分输入ADC的前端抗混叠RC滤波器设计及作用](https://img-blog.csdnimg.cn/img_convert/ea0cc949288a77f9bc8dde5da6514979.png) # 摘要 本论文详细介绍了差分输入模数转换器(ADC)滤波器的设计与实践应用。首先概述了差分输入ADC滤波器的理论基础,包括差分信号处理原理、ADC的工作原理及其类型,以及滤波器设计的基本理论。随后,本研究深入探讨了滤波器设计的实践过程,从确定设计规格、选择元器件到电路图绘制、仿真、PCB布局,以及性能测试与验证的方法。最后,论文分析了提高差分输入ADC滤波器性能的优化策略,包括提升精

【HPE Smart Storage性能提升指南】:20个技巧,优化存储效率

![HPE Smart Storage](https://community.hpe.com/t5/image/serverpage/image-id/106116i55F0E6179BD7AFF0?v=v2) # 摘要 本文深入探讨了HPE Smart Storage在性能管理方面的方法与策略。从基础性能优化技巧入手,涵盖了磁盘配置、系统参数调优以及常规维护和监控等方面,进而探讨高级性能提升策略,如缓存管理、数据管理优化和负载平衡。在自动化和虚拟化环境下,本文分析了如何利用精简配置、快照技术以及集成监控解决方案来进一步提升存储性能,并在最后章节中讨论了灾难恢复与备份策略的设计与实施。通过案

【毫米波雷达性能提升】:信号处理算法优化实战指南

![【毫米波雷达性能提升】:信号处理算法优化实战指南](https://file.smartautoclub.com/108/uploads/2021/08/beepress6-1628674318.png!a) # 摘要 毫米波雷达信号处理是一个涉及复杂数学理论和先进技术的领域,对于提高雷达系统的性能至关重要。本文首先概述了毫米波雷达信号处理的基本理论,包括傅里叶变换和信号特性分析,然后深入探讨了信号处理中的关键技术和算法优化策略。通过案例分析,评估了现有算法性能,并介绍了信号处理软件实践和代码优化技巧。文章还探讨了雷达系统的集成、测试及性能评估方法,并展望了未来毫米波雷达性能提升的技术趋