有哪些方法可以实现不同语言间的前端跨域请求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1054个文字,预计阅读时间需要5分钟。
在处理前端跨域请求时,由于浏览器同源策略的限制,若不设置前端代理,则需要在后端设置允许跨域。以下是一些常见设置示例:
1. Node.js 服务器配置 CORS:javascriptapp.use((req, res, next)=> { res.header('Access-Control-Allow-Origin', '*'); // 允许所有来源 res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next();});
2. Java Spring Boot 配置 CORS:java@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) // 允许所有来源 .allowedMethods(GET, POST, PUT, DELETE); }}
3. Python Flask 配置 CORS:pythonfrom flask import Flask, request, make_responsefrom flask_cors import CORS
app=Flask(__name__)CORS(app)
@app.after_requestdef after_request(response): response.headers.add('Access-Control-Allow-Origin', '*') response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization') return response
在遇到前端跨域请求时,由于浏览器受同源策略的限制,如果不方便设置前端代理,那就要后端设置允许跨域,下面以常见语言或服务器环境为例来设置。
php跨源资源共享(CORS):developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
// 服务器端相应数据类型
header('Content-Type: application/json;charset=utf-8');
// 或 header('Content-Type: text/html;charset=utf-8');
// *代表允许任何网址请求
header('Access-Control-Allow-Origin:*');
// 允许请求的类型
header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE');
// 设置是否允许发送 cookies
header('Access-Control-Allow-Credentials: true');
// 设置允许自定义请求头的字段
header('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with,Origin');
// 还如:header("access-control-allow-headers: Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With");
说明:
- 上面每项不是必须的,请根据实际需求来设定。
- 限定域名使用
header("Access-Control-Allow-Origin: www.xxx.xom"); - 如果设置后,
get跨域请求正常,post异常,可能是Access-Control-Allow-Headers项问题,如没有包含Content-Type等。或者POST请求中对Content-Type使用application/json这个标头修改为application/x-www-form-urlencoded试试。
- 如果服务端是
Java开发的,添加如下设置允许跨域即可,但是这样做是允许所有域名都可以访问,不够安全:response.setHeader("Access-Control-Allow-Origin","*"); - 为保证安全性,可以只添加部分域名允许访问,添加位置可以在下面三处任选一个。可以在过滤器的
filter的dofilter()方法种设置;可以在servlet的get或者post方法里面设置;可以放在访问的jsp页面第一行。 - 在此用第一种方法,注意
web.xml配置过滤器(filter)。
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
// 将ServletResponse转换为HttpServletResponse
HttpServletResponse www.baidu.com","127.0.0.1","127.0.0.1:8080"};
Set allowedOrigins= new HashSet(Arrays.asList(allowDomain));
String originHeader=((HttpServletRequest) req).getHeader("Origin");
if (allowedOrigins.contains(originHeader)){
localhost:8080';
// 允许多个跨域
// var allowCors = ['localhost:8080', 'localhost:8081'];
// return allowCors.indexOf(ctx.header.origin) > -1 ? ctx.header.origin : '';
},
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowMethods: ['GET', 'POST', 'DELETE'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}));
Python
Flask
1、使用 flask 内置的 after_request() 方法
app = Flask(__name__)
# 跨域支持
def after_request(resp):
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
app.after_request(after_request)
2、使用 flask_cors 模块
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
asp.net
设置 config 方式
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST,OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
asp
这个只有收藏意义了。
Response.AddHeader "Access-Control-Allow-Origin", "*"
Response.AddHeader "Access-Control-Allow-Credentials", "true"
Response.AddHeader "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"
Response.AddHeader "Access-Control-Allow-Headers", "Content-Type, Authorization, Accept,X-Requested-With"
来源:各种语言允许前端跨域请求的办法 (xushanxiang.com)
本文共计1054个文字,预计阅读时间需要5分钟。
在处理前端跨域请求时,由于浏览器同源策略的限制,若不设置前端代理,则需要在后端设置允许跨域。以下是一些常见设置示例:
1. Node.js 服务器配置 CORS:javascriptapp.use((req, res, next)=> { res.header('Access-Control-Allow-Origin', '*'); // 允许所有来源 res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next();});
2. Java Spring Boot 配置 CORS:java@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) // 允许所有来源 .allowedMethods(GET, POST, PUT, DELETE); }}
3. Python Flask 配置 CORS:pythonfrom flask import Flask, request, make_responsefrom flask_cors import CORS
app=Flask(__name__)CORS(app)
@app.after_requestdef after_request(response): response.headers.add('Access-Control-Allow-Origin', '*') response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization') return response
在遇到前端跨域请求时,由于浏览器受同源策略的限制,如果不方便设置前端代理,那就要后端设置允许跨域,下面以常见语言或服务器环境为例来设置。
php跨源资源共享(CORS):developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
// 服务器端相应数据类型
header('Content-Type: application/json;charset=utf-8');
// 或 header('Content-Type: text/html;charset=utf-8');
// *代表允许任何网址请求
header('Access-Control-Allow-Origin:*');
// 允许请求的类型
header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE');
// 设置是否允许发送 cookies
header('Access-Control-Allow-Credentials: true');
// 设置允许自定义请求头的字段
header('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with,Origin');
// 还如:header("access-control-allow-headers: Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With");
说明:
- 上面每项不是必须的,请根据实际需求来设定。
- 限定域名使用
header("Access-Control-Allow-Origin: www.xxx.xom"); - 如果设置后,
get跨域请求正常,post异常,可能是Access-Control-Allow-Headers项问题,如没有包含Content-Type等。或者POST请求中对Content-Type使用application/json这个标头修改为application/x-www-form-urlencoded试试。
- 如果服务端是
Java开发的,添加如下设置允许跨域即可,但是这样做是允许所有域名都可以访问,不够安全:response.setHeader("Access-Control-Allow-Origin","*"); - 为保证安全性,可以只添加部分域名允许访问,添加位置可以在下面三处任选一个。可以在过滤器的
filter的dofilter()方法种设置;可以在servlet的get或者post方法里面设置;可以放在访问的jsp页面第一行。 - 在此用第一种方法,注意
web.xml配置过滤器(filter)。
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
// 将ServletResponse转换为HttpServletResponse
HttpServletResponse www.baidu.com","127.0.0.1","127.0.0.1:8080"};
Set allowedOrigins= new HashSet(Arrays.asList(allowDomain));
String originHeader=((HttpServletRequest) req).getHeader("Origin");
if (allowedOrigins.contains(originHeader)){
localhost:8080';
// 允许多个跨域
// var allowCors = ['localhost:8080', 'localhost:8081'];
// return allowCors.indexOf(ctx.header.origin) > -1 ? ctx.header.origin : '';
},
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowMethods: ['GET', 'POST', 'DELETE'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}));
Python
Flask
1、使用 flask 内置的 after_request() 方法
app = Flask(__name__)
# 跨域支持
def after_request(resp):
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
app.after_request(after_request)
2、使用 flask_cors 模块
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
asp.net
设置 config 方式
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST,OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
asp
这个只有收藏意义了。
Response.AddHeader "Access-Control-Allow-Origin", "*"
Response.AddHeader "Access-Control-Allow-Credentials", "true"
Response.AddHeader "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"
Response.AddHeader "Access-Control-Allow-Headers", "Content-Type, Authorization, Accept,X-Requested-With"
来源:各种语言允许前端跨域请求的办法 (xushanxiang.com)

