ajax前端与后端配合解决跨域问题

来源:程序思维浏览:2233次
ajax前端与后端配合解决跨域问题

什么是ajax?

它是一种用于创建快速动态网页的技术,通过后台与服务器进行少量数据交换(请求后端数据),ajax可以使网页实现异步更新,即在不更新整个网页的情况下 进行部分网页更新 减少用户的等待时间,加快响应。

XMLHttpRequest 对象

XMLHttpRequest 对象所有的是ajax的基础,XMLHttpRequest 用于在后台与服务器的数据交互 目前所有的浏览器都支持XMLHttpRequest

建立对服务器的调用
open("method","URL",[asyncFlag],["userName"],["password"])
//method 参数可以为"get" "pust" "put"
// method 参数为get时:url参数为'getStar.php?starName='+name
//method 参数为 post时:向服务器发送请求时content为url内容 如:http.send('name=fox&age=18');
//URL 参数为相对或绝对URL
//asyncFlag 为是否选择异步 默认为异步
//userName 用户名
//password 密码

向服务器发送请求

send(content)

原生ajax写法:分为五步

1.创建XMLHttpRequest对象

  var http=new XMLHttpRequest();

2.使用open方法设置和服务器的交互信息

  http.open("get","./data/data.txt")
  //默认异步请求 true

3.设置发送数据,开始和服务器交互

  http.send();

4.注册事件
5.更新界面

http.onreadystatechange=function (res){
                    /!*readyState 状态为4  读取完成
                     status   200  请求成功*!/
                    if(this.status==200&&this.readyState==4)
                    {
                        /!*5.更新界面*!/
                        console.log(this);
                        /!*读取成功之后的返回数据在response  responseText*!/
                        document.write(this.response);
                    }
                }

ajax 跨域

jsonp跨域 前端后端都需要配置 CORS跨域只需要在前端进行配置

jsonp跨域
通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。
<script>
        function getdata(data){
            console.log(data);
        }
    </script>
    <script src="http://localhost:8080/stu/selectUesr.php?callback=getdata"></script>
    //callback为回调函数

2.CORS请求原理

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。它的实现原理就是使用自定义的HTTP头部让浏览器和服务器进行有效的沟通,从而决定请求或者响应是否成功即就是在我们发起跨域请求时,浏览器会自动创建一个origin字段,其值就是我们要请求的域名

第一种现象:No ‘Access-Control-Allow-Origin’ header is present on the requested resource,并且The response had HTTP status code 404

出现这种情况的原因如下:

本次ajax请求是“非简单请求”,所以请求前会发送一次预检请求(OPTIONS)
服务器端后台接口没有允许OPTIONS请求,导致无法找到对应接口地址

解决方案: 后端允许options请求

第二种现象:No ‘Access-Control-Allow-Origin’ header is present on the requested resource,并且The response had HTTP status code 405
这种现象和第一种有区别,这种情况下,后台方法允许OPTIONS请求,但是一些配置文件中(如安全配置),阻止了OPTIONS请求,才会导致这个现象

解决方案: 后端关闭对应的安全配置

第三种现象:No ‘Access-Control-Allow-Origin’ header is present on the requested resource,并且status 200
比如origin头部检查不匹配,比如少了一些头部的支持(如常见的X-Requested-With头部),然后服务端就会将response返回给前端,前端检测到这个后就触发XHR.onerror,导致前端控制台报错
解决方案: 后端增加对应的头部支持(Access-Control-Allow-Origin:*;)

*表示支持所有
第四种现象:heade contains multiple values ‘,’
表现现象是,后台响应的http头部信息有两个Access-Control-Allow-Origin:*
解决方案:
建议删除代码中手动添加的*,只用项目配置中的即可
建议删除IIS下的配置*,只用项目配置中的即可

后端应该如何配置以解决问题
PHP后台配置
PHP后台得配置几乎是所有后台中最为简单的,遵循如下步骤即可:
第一步:配置Php 后台允许跨域

<?php
header('Access-Control-Allow-Origin: *');

主要为跨域CORS配置的两大基本信息,Origin和headers

第二步:配置Apache web服务器跨域(httpd.conf中)

//原始代码:
<Directory />
    AllowOverride none
    Require all denied
</Directory>
//修改代码:
<Directory />
    Options FollowSymLinks
    AllowOverride none
    Order deny,allow
    Allow from all
</Directory>

JAVA后台配置

方法一:

JAVA后台配置只需要遵循如下步骤即可:

第一步:获取依赖jar包下载 cors-filter-1.7.jar, java-property-utils-1.9.jar 这两个库文件放到lib目录下。(放到对应项目的webcontent/WEB-INF/lib/下)
第二步:如果项目用了Maven构建的,请添加如下依赖到pom.xml中:

<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>[ version ]</version>
</dependency>

方法二:

在代码里加入:
Response.AddHeader("Access-Control-Allow-Origin", "*");

NET后台配置

.NET后台配置可以参考如下步骤:

第一步:网站配置
打开控制面板,选择管理工具,选择iis;右键单击自己的网站,选择浏览;打开网站所在目录,用记事本打开web.config文件添加下述配置信息,重启网站

("Access-Control-Allow-Headers":"X-Requested-With,Content-Type,Accept,Origin")
精品好课
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
收藏
扫一扫关注我们