翼度科技»论坛 编程开发 JavaScript 查看内容

前端跨域解决方案——CORS

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
CORS(跨来源资源共享)是一种用于解决跨域问题的方案。
CORS(跨来源资源共享)是一种安全机制,用于在浏览器和服务器之间传递数据时,限制来自不同域名的请求。在前端开发中,当通过 XMLHttpRequest(XHR)或 Fetch API 发送跨域请求时,如果服务器没有正确配置 CORS,浏览器会阻止该请求,从而导致请求失败。说白了,它是一种解决跨域问题的方案。
CORS 允许服务器指定哪些源可以访问其资源。在跨域请求中,浏览器会发送一个预检请求( OPTIONS )到服务器,来确定是否允许跨域访问。预检请求包含了一些额外的头信息,比如请求的方法、请求的头信息等,服务器需要根据这些信息来判断是否允许跨域访问。服务器返回的响应头中,需要设置 Access-Control-Allow-Origin 和 Access-Control-Allow-Methods 等字段来指定允许访问的源和方法。


以下是一个使用 CORS 解决跨域问题的例子:
客户端代码:
  1. fetch('http://CORS.com/api/data', {
  2.   method: 'GET',
  3.   headers: {
  4.     'Content-Type': 'application/json',
  5.   },
  6.   mode: 'cors',
  7. })
  8. .then(response => response.json())
  9. .then(data => console.log(data))
  10. .catch(error => console.error(error))
复制代码
 
服务端代码:
  1. const express = require('express');
  2. const app = express();
  3. app.use((req, res, next) => {
  4.   res.setHeader('Access-Control-Allow-Origin', ' ');
  5.   res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  6.   res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  7.   next();
  8. });
  9. app.get('/api/data', (req, res) => {
  10.   const data = { message: 'Hello, World!' };
  11.   res.json(data);
  12. });
  13. app.listen(3000, () => {
  14.   console.log('Server listening on port 3000');
  15. });
复制代码
在上面的例子中,客户端使用 fetch  发送一个 GET  请求到 http://CORS.com/api/data ,通过设置 mode 为 cors ,告诉浏览器需要使用 CORS 方案来解决跨域问题。服务端使用 express 框架,设置 Access-Control-Allow-Origin 等响应头,指定允许访问的源和方法。当浏览器发送预检请求时,服务端会返回响应头,告诉浏览器允许跨域访问。



它的优点和不足如下:
优点:
1.  安全性高:CORS 是一种安全的跨域访问解决方案,通过限制允许跨域访问的源和方法,可以有效地防止恶意攻击。
1.  灵活性强:CORS 支持不同类型的请求,包括 GET、POST、PUT、DELETE 等,同时也支持不同类型的数据传输格式,比如 JSON、XML 等。
1.  使用方便:CORS 只需要在服务器端设置响应头,就可以实现跨域访问,使用方便。
不足:
1.  兼容性问题:CORS 在某些旧版的浏览器中不支持,需要进行特殊处理。
1.  跨域请求的额外消耗:在使用 CORS 解决跨域请求时,需要发送预检请求,这会增加请求的时间和带宽消耗。
1.  CSRF 攻击:虽然 CORS 是一种安全的跨域访问解决方案,但仍然可能存在 CSRF(Cross-Site Request Forgery)攻击,需要在使用时加以注意。可以使用 Cookie、Token 或者请求头中的特定信息来验证请求是否合法。
 

来源:https://www.cnblogs.com/ronaldo9ph/p/17358044.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具