zoukankan      html  css  js  c++  java
  • nginx跨域

    五. 后端配置nginx解决跨域(服务端解决跨域)

    1. 依旧是ajax+node

    这是前端代码

    $(document).ready(function () {
                $('#get').click(function () {
                    $.ajax({
                        url:'http://localhost:3002/ok',
                        //  带cookies的请求
                        xhrFields:{
                            withCredentials:true
                        },
                        success:function(res) {
                            console.log("success",res)
                        },
                        error:function(err) {
                            console.log('fail',err)
                        }
                    })
                })
            })

    后端代码同前面
    还有nginx配置如下:

    server
    {
        listen 3002;
        server_name localhost;
        location /ok {
            proxy_pass http://localhost:3000;
    
            #   指定允许跨域的方法,*代表所有
            add_header Access-Control-Allow-Methods *;
    
            #   预检命令的缓存,如果不缓存每次会发送两次请求
            add_header Access-Control-Max-Age 3600;
            #   带cookie请求需要加上这个字段,并设置为true
            add_header Access-Control-Allow-Credentials true;
    
            #   表示允许这个域跨域调用(客户端发送请求的域名和端口) 
            #   $http_origin动态获取请求客户端请求的域   不用*的原因是带cookie的请求不支持*号
            add_header Access-Control-Allow-Origin $http_origin;
    
            #   表示请求头的字段 动态获取
            add_header Access-Control-Allow-Headers  $http_access_control_request_headers;
    
            #   OPTIONS预检命令,预检命令通过时才发送请求
            #   检查请求的类型是不是预检命令
            if ($request_method = OPTIONS){
                return 200;
            }
        }
    }
     

    发送预检命令的是非简单请求,具体可以看慕课网ajax跨域完全讲解
    实际上不是非简单请求的且不带cookie只需2个字段即可解决跨域

    add_header Access-Control-Allow-Methods *;
    add_header Access-Control-Allow-Origin $http_origin;
    • 具体效果如下图:

    这时只需改ajax请求的端口接口,无需修改前端服务器的地址

  • 相关阅读:
    XDOJ1156: 等待队列
    XDOJ 1009: Josephus环的复仇
    cookie浏览器编写测试无效???
    express框架中cookie的使用
    JS设置Cookie过期时间
    CSS 伪元素
    art-template手动编写时间过滤器
    mongoose设置默认值、模块化及性能测试
    Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `useFindAndModify
    mongoose 联表查询之populate使用及注意事项
  • 原文地址:https://www.cnblogs.com/gaoyuechen/p/13298197.html
Copyright © 2011-2022 走看看