跨域是什么?
跨域是浏览器加载了与当前域名、协议、端口不同另一站点下的资源,这与各大支持JavaScript的浏览器的同源策略是违背的。所谓同源策略,它是由 Netscape 提出的一个安全策略,它是浏览器最核心也是最基本的安全功能,如果缺少同源策略,则浏览器的正常功能可能都会受到影响,现在所有支持JavaScript的浏览器都会使用这个策略。
规定:浏览器要求,在解析Ajax请求时,要求浏览器的路径与Ajax的请求的路径必须满足三个要求,则满足同源策略,可以访问服务器。
要求:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源
处理方式
在配置中增加相应的add_header参数,特别需要注意“OPTIONS预检请求”问题,可直接返回204状态码处理该问题。
server
{
listen 80;
server_name www.abc.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/abc;
# 跨域处理
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods 'GET,POST,PUT,OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ( $request_method = 'OPTIONS') {
return 204;
}
# 日志文件
/www/wwwlogs/api-rep.fuqimm.cn.log;
error_log /www/wwwlogs/api-rep.fuqimm.cn.error.log;
}
参数说明
Access-Control-Allow-Origin:响应头表示是否可以将对请求的响应暴露给页面。返回true则可以,其他值均不可以。(可选值 true/false )
Access-Control-Allow-Headers:表示此次请求中可以使用那些header字段
Access-Control-Allow-Methods:表示此次请求中可以使用那些请求方法(可选值 GET/POST/PUT/OPTIONS/DELETE)
注意:
header头中若增加了参数,Access-Control-Allow-Headers中必须增加相应参数。如接口做了签名校验字段signature,相应的Access-Control-Allow-Headers也需要增加。
其次关于非200状态码的异常错误导致成该接口跨域时,Access-Control-Allow-Origin中always必不可少。