Ajax使用Access-Control-Allow-Origin头实现跨域访问
跨域在开发中是一个比较常见的问题,虽然有json或者xml来解决,现在html5开始流行了,可以通过Access-Control-Allow-Origin解决跨域问题。
问题
在未加入header前:
解决方案
使用Access-Control-Allow-Origin
头部
参考代码如下:
location ~* \.(eot|otf|ttf|woff|woff2)$
{
if ($request_method = 'OPTIONS')
{
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-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST')
{
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';
}
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';
}
}
如果仍然不行,将所有的add_header 'Access-Control-Allow-Origin' '*';
改为add_header 'Access-Control-Allow-Origin' '<你的域名>';
即可解决。
最后更新于 2017-08-26 08:01:21 并被添加「apache nginx ajax」标签,已有 5100 人阅读过。
本文距离最后一次更新已超过180天,部分内容可能会随着时间的推移变更或失效。
此处无声胜有声