问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

API设置跨域的方法与实践

创作时间:
作者:
@小白创作中心

API设置跨域的方法与实践

引用
1
来源
1.
https://docs.pingcode.com/baike/3276400

API设置跨域的关键在于:使用CORS头部、配置服务器、使用代理。其中,使用CORS头部是最常见和基本的方式,具体是在服务器端的响应头中添加 Access-Control-Allow-Origin 头部。

CORS(跨域资源共享)

跨域资源共享(CORS)是实现跨域请求的最常见方法。CORS允许服务器明确指定哪些域可以访问其资源,并设置必要的HTTP头部来管理这些请求。

CORS基本概念

CORS是由一组HTTP头部组成的,它允许服务器控制跨域请求。浏览器会根据这些头部决定是否允许客户端访问资源。主要的CORS头部包括:

  • Access-Control-Allow-Origin:指定允许的域。
  • Access-Control-Allow-Methods:指定允许的HTTP方法。
  • Access-Control-Allow-Headers:指定允许的请求头。
  • Access-Control-Allow-Credentials:是否允许发送凭据。

服务器端配置CORS

不同的服务器框架和语言有不同的配置方式。下面是一些常见的示例:

Node.js(Express)

在Express应用中,可以使用cors中间件来配置CORS:

const express = require('express');
const cors = require('cors');  
const app = express();  
app.use(cors({  
  origin: 'https://example.com',  
  methods: ['GET', 'POST', 'PUT', 'DELETE'],  
  allowedHeaders: ['Content-Type', 'Authorization'],  
  credentials: true  
}));  
app.listen(3000, () => {  
  console.log('Server running on port 3000');  
});

Java(Spring Boot)

在Spring Boot应用中,可以使用@CrossOrigin注解或全局配置来设置CORS:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  
@RestController  
public class MyController {  
  @CrossOrigin(origins = "https://example.com")  
  @GetMapping("/api/data")  
  public String getData() {  
    return "Hello World";  
  }  
}

全局配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.servlet.config.annotation.CorsRegistry;  
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  
@Configuration  
public class WebConfig {  
  @Bean  
  public WebMvcConfigurer corsConfigurer() {  
    return new WebMvcConfigurer() {  
      @Override  
      public void addCorsMappings(CorsRegistry registry) {  
        registry.addMapping("/api/")  
                .allowedOrigins("https://example.com")  
                .allowedMethods("GET", "POST", "PUT", "DELETE")  
                .allowedHeaders("Content-Type", "Authorization")  
                .allowCredentials(true);  
      }  
    };  
  }  
}

使用代理

有时候,直接在服务器上配置CORS可能不太方便,尤其是在开发环境中。此时,可以通过代理服务器来解决跨域问题。

什么是代理

代理服务器是客户端和目标服务器之间的中介,它可以代表客户端发出请求并返回响应。通过在代理服务器上配置跨域请求,可以绕过浏览器的同源策略。

使用代理解决跨域问题

Node.js(http-proxy-middleware)

在使用React或Vue等前端框架时,可以使用http-proxy-middleware库来配置代理。

React(create-react-app)

在src/setupProxy.js中配置代理:

const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {  
  app.use(  
    '/api',  
    createProxyMiddleware({  
      target: 'http://localhost:5000',  
      changeOrigin: true,  
    })  
  );  
};

Vue(vue.config.js)

在vue.config.js中配置代理:

module.exports = {
  devServer: {  
    proxy: {  
      '/api': {  
        target: 'http://localhost:5000',  
        changeOrigin: true,  
      }  
    }  
  }  
};

通过这种方式,前端应用中的所有/api请求都会被代理到http://localhost:5000,从而避免跨域问题。

JSONP(JSON with Padding)

JSONP是一种早期的跨域解决方案,它通过动态插入

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号