• 「ng」Access-Control-Allow-Origin 跨域问题


    【问题】

    使用nginx作为代理服务器,nginx.conf配置文件中已添加

    location / {
        proxy_pass http://127.0.0.1:88383;
        add_header Access-Control-Allow-Origin "*";
    }

    使用普通的post请求时,一切ok,但是post请求中的header增加了自定义的字段,就提示跨域问题。

    【分析】

    通过两次post的抓包发现正常的请求是post方式,而出问题的是OPTIONS方式,原来是头部信息中增加了自定义字段后,会通过发OPTIONS请求进行预检,而服务器并没有处理这个OPTIONS预检操作,所以失败,两种解决方案:

    1、取消头部中自定义新字段,改为放到post的body中;

    2、修改服务器(一般是nginx),增加OPTIONS的跨域支持,两个地方修改:1)服务增加path对应的OPTIONS操作,如下(示例为golang语言的gin框架):

    if _, ok := optionsExists[path]; !ok { // 防止重复注册
    optionsExists[path] = true
    g.OPTIONS(path, func(c *gin.Context) { // 解决自定义头部信息引起的跨域问题
    c.JSON(http.StatusOK, 0)
    })
    }

    2)在nginx配置增加(比如token字段),参考如下配置:

    location / {
                proxy_pass http://127.0.0.1:88383;
                add_header Access-Control-Allow-Origin "*";
                add_header Access-Control-Allow-Headers "Accept,Accept-Language,Content-Language, Last-Event-ID,Content-Type,Origin, X-Requested-With,token";
                add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
                add_header Access-Control-Expose-Headers "token";
                add_header Access-Control-Max-Age 1728000;
            }

  • 相关阅读:
    css定位
    表格常见属性
    细说Ajax--异步请求
    DOM事件与jQuery事件的是非纠葛
    简单特效-切换背景图片
    javascript之--offset家族
    javascript高级特性
    参数的传递
    javascript中函数浅析
    初识Javascript
  • 原文地址:https://www.cnblogs.com/ftrako/p/10250345.html
Copyright © 2020-2023  润新知