46. netty系列之:在netty中处理CORS
简介
CORS的全称是跨域资源共享,他是一个基于HTTP-header检测的机制,通过对HTTP-header进行控制,可以实现对跨域资源的权限管理功能。在之前的CORS详解文章中,我们已经对CORS有了基本的解释。
本文将会从netty的实现角度,讲解如何在netty中实现CORS。
服务端的CORS配置
熟悉CORS的朋友应该知道,CORS所有的操作都是在HTTP协议之上通过控制HTTP头来实现的。所以说如果要在服务器端实现CORS的支持,事实上也是对HTTP协议的头进行各种设置完成的。
为了方便大家的使用,netty提供了一个CorsConfig类,来统一CORS的头设置。
先看下CorsConfig类中定义的属性:
private final Set<String> origins;
private final boolean anyOrigin;
private final boolean enabled;
private final Set<String> exposeHeaders;
private final boolean allowCredentials;
private final long maxAge;
private final Set<HttpMethod> allowedRequestMethods;
private final Set<String> allowedRequestHeaders;
private final boolean allowNullOrigin;
private final Map<CharSequence, Callable<?>> preflightHeaders;
private final boolean shortCircuit;
这些属性和CORS的HTTP头设置是一一对应的。比如说origins表示的是允许的源,anyOrigin表示允许所有的源。
是和下面的设置对应的:
Origin: <origin>
exposeHeaders是和Access-Control-Expose-Headers一一对应的,表示服务器端允许客户端获取CORS资源的同时能够访问到的header信息。其格式如下:
Access-Control-Expose-Headers: <header-name>[, <header-name>]*
allowCredentials表示是否开启CORS的权限认证。表示服务器端是否接受客户端带有credentials字段的请求。如果用在preflight请求中,则表示后续的真实请求是否支持credentials,其格式如下:
Access-Control-Allow-Credentials: true
allowedRequestMethods表示访问资源允许的方法,主要用在preflight request中。其格式如下:
Access-Control-Allow-Methods: <method>[, <method>]*