一、什么是跨域?跨域解决方法

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

以下用表格来直观展示跨域的类型

当前页面url 被请求页面url 是否跨域 原因
http://www.test.com/ http://www.test.com/index.html 同源(协议、域名、端口号相同)
http://www.test.com/ https://www.test.com/index.html 跨域 协议不同(http/https)
http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu)
http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog)
http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001)

二、故障情况

当出现403跨域错误的时候 No ‘Access-Control-Allow-Origin’ header is present on the requested resource,需要给Nginx服务器配置响应的header参数:
Nginx的处理措施,修改Nginx的配置

        location / {   proxy_pass  http://127.0.0.1:8010;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';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';add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";}

三、 配置详解

  1. Access-Control-Allow-Origin
    服务器默认是不被允许跨域的。给Nginx服务器配置Access-Control-Allow-Origin *后,表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。
  2. Access-Control-Allow-Headers 是为了防止出现以下错误:
    Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了"application/json"的类型请求导致的。这里涉及到一个概念:预检请求(preflight request),请看下面"预检请求"的介绍。

  1. Access-Control-Allow-Methods 是为了防止出现以下错误:
    Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

4.给OPTIONS 添加 204的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误
发送"预检请求"时(下边有介绍),需要用到方法 OPTIONS ,所以服务器需要允许该方法。

5.强制让所有HTTP请求换成HTTPS请求

四、 预检请求(preflight request)

其实上面的配置涉及到了一个W3C标准:CROS,全称是跨域资源共享 (Cross-origin resource sharing),它的提出就是为了解决跨域请求的。

跨域资源共享(CORS)标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。
其实Content-Type字段的类型为application/json的请求就是上面所说的搭配某些 MIME 类型的 POST 请求,CORS规定,Content-Type不属于以下MIME类型的,都属于预检请求:

application/x-www-form-urlencoded
multipart/form-data
text/plain

所以 application/json的请求 会在正式通信之前,增加一次"预检"请求,这次"预检"请求会带上头部信息

Access-Control-Request-Headers: Content-Type:OPTIONS /api/test HTTP/1.1
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type

… 省略了一些
服务器回应时,返回的头部信息如果不包含Access-Control-Allow-Headers: Content-Type则表示不接受非默认的的Content-Type。即出现以下错误:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

文中部分内容转自:
https://segmentfault.com/a/1190000012550346
https://blog.csdn.net/qq_38128179/article/details/84956552

跨域问题,以及nginx应对403 ACAO的处理办法相关推荐

  1. 跨域异常与nginx的underscores_in_headers on

    跨域异常与nginx的underscores_in_headers on 参考文章: (1)跨域异常与nginx的underscores_in_headers on (2)https://www.cn ...

  2. Access-Control-Allow-Origin VUE本地调试跨域问题使用nginx解决

    最近在使用VUE做前后端分离的项目,页面代码开发好了,连接后台获取数据的时候发现怎么都调不到后台接口,页面F12的信息如下: 如图所示:重点已经圈起来了 (Access-Control-Allow-O ...

  3. iis7 php 403,详解Nginx 出现 403 Forbidden 的解决办法

    本篇文章主要介绍了详解Nginx 出现 403 Forbidden 的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Nginx 也是当前流行的一款 轻量级服务器 ...

  4. 使用nginx代理跨域,使用nginx代理bing的每日一图

    前言 自从搞清楚了跨域原理后一直自鸣得意,感觉跨域没啥问题了.而事实上对关于跨域的几个header的理解也有限,但那又如何,我能做到跨域就行了.今天想把博客背景图改成bing的每日一图,发现遇到跨域问 ...

  5. 跨域问题解决方案--Nginx代理转发

    文章目录 问题描述 解决方案 问题描述 有这么一个html页面,具体代码如下: Nginx_CORS.html <!DOCTYPE html> <html lang="en ...

  6. nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记

    最近自己构建了一个轻量级的 MVC 框架,现在将该MVC用于生产环境的项目中,目前因为项目中有跨域的请求,所以需要做一些CORS授权,但在实际使用出现了一些问题,目前已解决,故做下记录. 服务器:ce ...

  7. vue cli 解决跨域 线上 nginx 反向代理配置

    前后分离 axios 接 api 跨域问题如图: 解决办法: 1. npm start 本地开发环境解决: 在webpack配置文件 /config/index.js 里找到 proxyTable 开 ...

  8. iconfont配置nginx跨域问题、nginx反向代理接口跨域

    1.nginx配置解决iconfont跨域 浏览器跨域访问js.css.img等常规静态资源被同源策略许可,但iconfont字体文件(eot|otf|ttf|woff|svg)例外,此时可在ngin ...

  9. vue反向代理解决跨域及部署nginx端口转发解决跨域

    1. 前言 本文是为了解决vue反向代理解决跨域及部署服务器nginx端口转发解决跨域,因为踩了不少的坑,百度了很多,也试了太多的方法,最终得以解决,所以记录一下,希望遇到同样问题的友友们可以高效的解 ...

  10. 解决vue项目中前后端交互的跨域问题、nginx代理配置

    最近新接了一个项目,需要自己写一个小demo和后端联调,第一次用自己写的demo和后端联调,出现了问题. 问题:Access to XMLHttpRequest at 'http://192.168. ...

最新文章

  1. 缓存击穿!竟然不知道怎么写代码???
  2. 设置DVD为CentOS6安装源
  3. linux显示父目录,linux – 仅列出文件的公共父目录
  4. 部署必备之Docker
  5. 在Linux上的虚拟机上启动Oracle上报ORA-00845: MEMORY_TARGET not supported on this system的问题解决
  6. python基础学习(十二)变量进阶
  7. vvv在线文档导出工具_一款真正实时的在线文档协作编辑工具,多人可同时对一份文件修改...
  8. 织梦后台如何生成站点地图sitemap.xml
  9. C#LeetCode刷题-二分查找​​​​​​​
  10. 从源码分析快速实现对新开源软件的检测
  11. Java - 初探贪心算法(纸币找零,背包问题)
  12. c++ 开源pdf文件阅读器
  13. 二、8086汇编命令大全
  14. 支付行业PCI DSS 3.0学习概述
  15. fv计算机公式,p=fv是什么公式
  16. Tomcat Caused by:java.lang.IllegalArgumentException: 指定的主资源集[……]无效
  17. Vue——v-if控制元素是否显示
  18. 通过meta代码强制浏览器使用WebKit内核极速模式
  19. 统计输入数据的个数、求和、平均值、方差、中位数
  20. android手机绘图软件,手机绘画软件(MediBang Paint Tablet)

热门文章

  1. OpenCV(二) —— 颜色通道提取 边界填充 数值计算 图像融合
  2. Mac常用触摸板手势
  3. web前端大作业:诗人文化网页主题网站【唐代诗人】纯HTML+CSS制作
  4. python模拟用户登录代码_Python模拟用户自动登陆网易126邮箱源码详解
  5. 【数学模型】基于Matlab模拟超市排队系统
  6. LPC2294看门狗定时器
  7. 【mcuclub】红外测温-MLX90614
  8. 数据结构 —— 队列
  9. 新闻资讯|iPad mini 概念想象重新设计,配备更大的8.4英寸Liquid Retina显示屏
  10. 如何高情商地在职场和生活中正确聊天