vue开发之跨域请求,请求头not allowed by Access-Control-Allow-Headers,后端cookie session值取不到(二)

原因:你本地的请求ajax的get和post请求;如果你的请求头内放一些可用验证数据Token的时候就会存在跨域请求这是浏览器所不允许的问题;

方案一:后台的接口请求模式都写成jsonp请求,前端去调用;

特点:是一种非正式传输协议,该协议的一个要点就是允许用户传递一个callback 或者开始就定义一个回调方法,参数给服务端,然后服务端返回数据时会将这个callback 参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

缺点:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题,数据传输和服务器安全问题都不能得到保障。

第一种方案我就不解释和运用了缺点太多!

方案二:使用nginx服务重定向请求,实现伪同域请求;

      1、mac下载nginx(我只讲mac电脑的nginx安装,window可以去官网);

2、安装Command Line tools

  xcode-select --install

3、安装brew命令

  ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

4、安装nginx

  brew install nginx

5、启动nginx

  sudo nginx

拓展命令:

关闭nginx方法1、sudo nginx -s stop
2、先查询占用的进程号:
  ps -ef|grep nginx
终端输出:
  501 15800   1  0 12:17上午 ??     0:00.00 nginx: master process /usr/local/Cellar/nginx/1.8.0/bin/nginx -c /usr/local/etc/nginx/nginx.conf
  501 15801 15800  0 12:17上午 ??     0:00.00 nginx: worker process
  501 15848 15716  0 12:21上午 ttys000  0:00.00 grep nginx  占用进程号为:15800(记住第一行第二个数字为进程号,回头再解析),然后输入:
  kill -QUIT 15800 (从容的停止,即不会立刻停止)
  Kill -TERM 15800 (立刻停止)
  Kill -INT 15800 (和上面一样,也是立刻停止)

3、实在不知道打开:launchpad->其他->活动监视器->cup搜索nginx->手动结束nginx进程;

打开配置nginx的文件:

  open /usr/local/etc/nginx

6、打开nginx配置文件,配置nginx.conf文件;

  open /usr/local/etc/nginx 

      

代码解释区域:

代码copy区域:

server {
        listen       8089;
        server_name  localhost;

    location / {
            proxy_pass   http://192.168.0.112:8080;       # 前端静态页面地址
            proxy_redirect default;
            #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        #location  /hr/api/ {
    #rewrite  ^/(.*)$ /$1 break;
        #proxy_pass   http://192.168.0.119:8080;
        #proxy_set_header Host $host;
        #    proxy_set_header X-Real-IP $remote_addr;
        #    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #    client_max_body_size 20M;
        #}

        location  /edu {
    rewrite  ^/(.*)$ /$1 break;
        proxy_pass   http://192.168.0.119:8081;
        proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 20M;
        }
    }

7、配置vue代码以及请求;

然后

npm run dev 或者yarn dev运行前端vue代码

然后网页访问就正常了!

切记:每次更改完nginx的配置文件nginx.conf都要去重新启动nginx;可以先杀死然后去看看进程号里边有没有服务了,然后重启,也可以直接重启。检查进程号的nginx服务避免进程中出现多个nginx服务。

原理nginx使用的重定向解决了请求的跨域问题,前端页面进入nginx服务然后重定向为后台接口的同域的请求地址;

原文地址:https://www.cnblogs.com/PeterWolf/p/11896606.html

时间: 2024-10-04 02:36:03

vue开发之跨域请求,请求头not allowed by Access-Control-Allow-Headers,后端cookie session值取不到(二)的相关文章

常用跨域资源请求分析

WEB开发过程中最常使用 Ajax技术来完成客户端与服务器的通信.而实现Ajax通信的XmlHttpRequest对象会带来跨域安全策略问题.简单来说,默认情况下,XHR对象只能访问与包含它的页面位于同一个域下的资源. 那么问题来了,何为跨域呢?通常,Ajax指向的地址中,二级域名/端口号/协议/必须与包含它的页面相同.举个栗子: www.tangide.com 访问 www.i5r.com是跨域. a.tangide.com 访问 b.tangide.com是跨域. www.tangide.c

跨域AJAX请求的解决方案

同源策略 : http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html 在AJAX应用环境中,由于安全的原因,浏览器不允许XMLHttpRequest组件请求跨域资源.在很多情况下,这个限制给我来带来的诸多不 便.很多同行,研究了各种各样的解决方案: 1. 通过修改document.domain和隐藏的IFrame来实现跨域请求.这种方案可能是最简单的一种跨域请求的方案,但是它同样是一种限制最大的方 案.首先,它只能实现在同一个

jsonp突破同源策略,实现跨域访问请求

跨域访问问题,相信大家都有遇到过.这是一个很棘手的问题.不过道高一尺,魔高一丈,对于这类问题,总有解决问题的方案.最近我又接触到了这个问题,解决的途径是ajax+jsonp. 说到这个问题,不得不说一下"同源策略(Same-Origin Policy)",它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源,就是必须协议.域名.端口都一致的,才叫做同源.例如:http://www.12306.cn和https://www.

跨域post请求实现方案小结--转

[名词解释] 跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript 同源策略(注意Network Access这一节):http://www.w3.org/Security/wiki/Same_Origin_Policy [问题描述] 浏览器出于安全的考量(避免恶意网站轻易读取其他网站显示的内容,因为该内容可能含有敏感信息,想象iframe嵌套银行网页)原则上允许跨域写而限

跨域资源请求 JSONP CORS

1.什么是跨域资源请求? https://blog.csdn.net/u014607184/article/details/52027879 1.1 同源策略 跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制. XMLHttpRequest 受同源策略限制 2.如何解决 跨域资源请求 限制 JSONP   https://blog.csdn.net/DFF1993/article/details/79925874 CORS http://www.ruanyifeng.com/bl

js跨域post请求

1 function funPostBack(srvMethod){ 2 /* 3 var contentNR=$(document.getElementById("reportFrame").contentWindow.document).find("#content-container").html(); 4 contentNR=$("#x").text(contentNR).html(); 5 contentNR=contentNR.sub

跨域 HTTP 请求

如果你需要从不同的服务器(不同域名)上获取数据就需要使用跨域 HTTP 请求. 跨域请求在网页上非常常见.很多网页从不同服务器上载入 CSS, 图片,Js脚本等. 在现代浏览器中,为了数据的安全,所有请求被严格限制在同一域名下,如果需要调用不同站点的数据,需要通过跨域来解决. 以下的 PHP 代码运行使用的网站进行跨域访问. header("Access-Control-Allow-Origin: *");

用JQuery的$.getJSON发起跨域Ajax请求

jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callback] )  跨域加载JSON数据.伊川县第二中学 url:     发送请求的地址 data : (可选) 待发送key/value参数 callback: (可选) 载入成功时的回调函数 主要用于客户端获取服务器JSON数据.简单示例: 服务器脚本,返回JSON数据: view source p

jquery跨域Ajax请求

sonp原理: 首先在客户端注册一个callback, 然后把callback的名字传给服务器. 此时,服务器先生成 json 数据.然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp. 最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端. 客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定