跨域,是两个不同域名,或不同端口,不同二级域名,不同协议的情况下发生的;
| 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 的情况

本文介绍了如何利用nginx解决前端跨域问题,特别是在前端页面和AJAX请求的源不同时。通过设置nginx的proxy_pass代理,调整URL路径匹配顺序,避免死循环,实现跨域请求。示例配置展示了正确处理不同URL请求的方式,以确保正确代理并防止服务器响应500错误。
1351

被折叠的 条评论
为什么被折叠?



