跨域,是两个不同域名,或不同端口,不同二级域名,不同协议的情况下发生的;
URL | 说明 | 允许通讯 |
http://www.a.com/a.js | 同一域名下 | 允许 |
http://www.a.com/b.js | ||
http://www.a.com/lab/a.js | 同一域名下不同文件夹 | 允许 |
http://www.a.com/script/b.js | ||
http://www.a.com:8000/a.js | 同一域名,不同端口 | 不允许 |
http://www.a.com/b.js | ||
http://www.a.com/a.js | 同一域名,不同协议 | 不允许 |
https://www.a.com/b.js | ||
http://www.a.com/a.js | 域名和域名对应ip | 不允许 |
http://192.168.153.1/a.js | ||
http://www.a.com/a.js | 主域相同,子域不同 | 不允许 |
http://script.a.com/b.js | ||
http://www.a.com/a.js | 同一域名,不同二级域名(同上) | 不允许(cookie这种情况下也不允许访问) |
http://a.com/b.js | ||
http://www.cnblogs.com/a.js | 不同域名 | 不允许 |
http://www.a.com/b.js | ||
当前前端页面地址:http://localhost/test/
页面 ajax 请求地址:http://wechatads.com/kua/test?vid=132
两个地址 不同域名;正常请求出现如下错误提示:
后端代码跨域允许跨域请求,但是如果请求的是一个html页面用于渲染怎么办?这时就可以用到 nginx 代理 proxy_pass;
原始的 server 配置
添加代理之后的配置信息,注意红框中的代码;proxy_pass后面的 '/' 有和没有区别是很大的,而且先后顺序也有关系,如果将代理配置放在 “location / ”之后,估计执行不到代理了,因为会先响应上面的请求配置。
示例一:
location /kua/
{
proxy_pass http://wechatads.com;
}
示例二:
location /kua/
{
proxy_pass http://wechatads.com/;
}
针对示例一,如果访问url 是 http://wechatads.com/kua/test.jsp,则被nginx代理后,实际请求到的资源路径还是为http://wechatads.com/kua/test.jsp,跟路径没变。
针对示例二,如果访问url 是 http://wechatads.com/kua/test.jsp,则被nginx代理后,实际请求到的资源路径还是为http://wechatads.com/test.jsp,跟路径变为域名根目录。
跨域代理的时候,切记使用示例二情况;如果用示例一;会在代理处形成死循环;造成服务器响应 500 的情况