Nginx 解决异步请求跨域问题【譬如JS前端异步请求】
2022/4/27 7:13:25
本文主要是介绍Nginx 解决异步请求跨域问题【譬如JS前端异步请求】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
十年河东,十年河西,莫欺少年穷
学无止境,精益求精
一、Nginx
关于Nginx的用途,听到最多的两个词,就是:
- 端口转发
- 负载均衡
负载均衡不属于现阶段要学习的内容,重点来看一看端口转发,本文用它来解决跨域请求的问题。
二、CROS 跨域资源共享
我们需要知道,同源的三要素:协议【http协议、https协议】、域名、端口。
如果比较两个地址,只要三者中只要有任何一个不同,就算跨域。
// 协议:http // 域名:localhost // 端口:8011 http://localhost:8011
出于安全原因,浏览器限制从脚本(比如JavaScript)内发起的跨源HTTP请求。
如果浏览器检测到跨域,它会尝试发起一次请求,然后查看返回的内容中,是否一个有允许跨域请求的标记(CORS响应头),如果有正确的标记,那么就不拦截;如果没有标记,浏览器就会阻止这个请求。并报错。
三、项目中为何产生跨域
在前后台分离的项目中,前台和后台分别运行在不同的端口上。
所以前台向后台发起异步请求时,会因为跨域,而被浏览器拦截下来。
这时解决方案是使用Nginx 配置 被访问的服务器允许跨域请求。
四、Nginx 实例配置
假设我们有两台服务器【同一个服务器,但端口不同】
服务器1:
server{ listen 80; server_name localhost; location / { root /html/index.html; } }
服务器2:
server { listen 8001; server_name localhost; # default_type application/octet-stream; #charset koi8-r; #access_log logs/host.access.log main; location /getuser { default_type application/json; return 200 '{id:"abc":"age":12}'; } }
现在如果让服务器1的index.html 页面通过Jqury去异步访问服务器2的getuser方法、则会产生跨域问题。
那么如何解决呢?
我们只需在被访问的服务器Location节中加入允许跨域的声明即可。
如下:
location /getuser { add_header Access-Control-Allow-Origin *; # http://192.168.136.135 OR http://192.168.136.135:8088 add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE; default_type application/json; return 200 '{id:"abc":"age":12}'; }
Allow-Origin 后面的 * 代表所有不同源的地址均可以异步访问,如果要指定域名/IP,可以使用诸如 http://www.xx.com 如果是多个Ip或域名,则域名/Ip之间用空格分开即可,譬如:http://192.168.136.135 http://192.168.136.135:8088
Allow-Methods 后面是允许的方法,POST请求 GET请求等
最后贴出我们配置
实际线上的项目,为了增加安全性,建议配置成 具体的IP/域名。
参考博客:https://www.cnblogs.com/lyh233/p/15149216.html
@天才卧龙的博客
这篇关于Nginx 解决异步请求跨域问题【譬如JS前端异步请求】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程