Nginx通过CORS配置实现跨域访问
2017-03-13 15:52
666 查看
CORS: Cross-origin resource sharing (跨域资源共享),是指a页面想获得b页面的资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的的访问都是进行跨域的,而浏览器为了安全考虑,对跨域访问一般都是进行了限制的。需要注意的是,CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 浏览器将所有的CORS请求分为简单请求和非简单请求,对于简单请求来说,以GET为例:
if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; }
上面的配置中: Access-Control-Allow-Origin:必须配置的字段,'*'表示接受任意域名的请求,也可以指定接受某一个域名的请求 Access-Control-Request-Headers:如果浏览器请求包括Access-Control-Request-Headers字段,则在Nginx配置中也是必须的,是一个由逗号分隔的字符串 Access-Control-Expose-Headers:可选配置字段。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值 非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。 浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。
if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' 'http://m-dev.pengyunliuxue.com'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; }
Access-Control-Request-Method:该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法 Access-Control-Max-Age:用来指定本次预检请求的有效期,单位为秒 其他参数参考简单请求即可
参考文章:
跨域资源共享详解
CORS on Nginx
相关文章推荐
- Nginx通过CORS实现跨域(转)
- 利用CORS配置实现jQuery对WebApi及MVC的跨域访问
- 用反向代理nginx proxy_pass配置解决ie8 ajax请求被拦截问题 ie8用nginx代理实现跨域请求访问 nginx405正向代理request_uri
- .NET通过配置文件的方式实现静态js文件跨域访问
- nginx通过CORS实现跨域
- nginx介绍(六) - 通过反向代理实现跨域访问
- NGINX的CORS--跨域访问配置
- Nginx配置实现同一域名下 同一ip 通过子域名访问不同端口
- Nginx配置SSL证书实现访问HTTPS网站
- wcf实现跨域访问所需的配置文件
- 通过设置P3P头来实现跨域访问COOKIE
- Angular通过CORS实现跨域方案
- Windows下Tomcat+nginx配置证书实现登录页https访问
- nginx 配置轮询分流-实现负载均衡【测试通过】
- 通过配置PIX防火墙实现FTP客户端对服务端的访问
- Windows下Tomcat+nginx配置证书实现登录页https访问
- 通过统计nginx访问日志禁止恶意抓取数据的实现
- 通过sshpass实现自动配置搭建Hadoop完全分布式所需的SSH免密码访问
- PHP 通过设置P3P头来实现跨域访问COOKIE
- 通过设置P3P头来实现跨域访问COOKIE