java跨域访问四种方式_java如何解决跨域问题

java跨域访问四种方式_java如何解决跨域问题什么是跨域问题出于安全考虑,对于Ajax请求,浏览器会发起同源检查。所谓的同源是指发出请求的网页与请求的服务器对应的通讯协议、域名、端口完全一致。如果发起请求的网页和Ajax请求的目标地址不同源就会出现所谓的跨域问题而无法正确访问。跨域问题的解决方案Cross(跨域资源共享方案)CORS是一个W3C标准,全称是”跨域资源共享”(Cross-originresourcesharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。具.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

什么是跨域问题

出于安全考虑,对于Ajax请求,浏览器会发起同源检查。所谓的同源是指发出请求的网页与请求的服务器对应的通讯协议、域名、端口完全一致。如果发起请求的网页和Ajax请求的目标地址不同源就会出现所谓的跨域问题而无法正确访问。

跨域问题的解决方案

Cross(跨域资源共享方案)
CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。具体的过程如下:
(1)当我们发送AJAX请求时,浏览器会自动添加一个请求头Origin(源),该请求头中存储了发出该请求地址的源.
(2)浏览器发送该请求,收到服务器响应
(3)浏览器判断服务器响应头中的Access-Control-Allow-Origin(控制允许访问的源),如果该响应头中的源和发送请求时源相同,则本次请求进入Ajax的正确回调.如果不存在在响应头或者响应头中的允许访问源和发送请求时的源不同则报错.
所以使用Cross解决跨域问题的核心就是在响应时添加一个Access-Control-Allow-Origin响应头.
我们可以选择在Servlet中自己设置一个响应头:
该响应头可以告诉浏览器服务器允许从任何域发送过来的请求.
在这里插入图片描述
设置该响应头以后,跨域问题就得到解决了.
也可以引入第三方的jar包,在该jar包中定义了一个过滤器,使用该过滤器对响应头做出统一处理。
先导入jar包
在这里插入图片描述
导入jar包以后在web.xml文件中引入过滤器即可.

<filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
            <param-name>cors.allowOrigin</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedMethods</param-name>
            <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedHeaders</param-name>
            <param-value>Accept,Origin,X-Requested-With,Content-Type, 							Last-Modified</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposedHeaders</param-name>
            <param-value>Set-Cookie</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportsCredentials</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

JSONP
JSONP解决跨域问题的思路是通过script标签访问Servlet地址,然后在Servlet中响应一个js脚本,该js脚本会调用前端定义好的一个回调函数,并传入我们的响应数据。
代码如下:
前端:
注册点击事件
在这里插入图片描述
函数中向当前网页追加一个script标签,src地址为服务器Servlet地址
在这里插入图片描述
定义回调函数,用于处理数据
在这里插入图片描述
后端:
后端响应一个callback(数据),通过该js脚本调用前端的回调函数
在这里插入图片描述
当然Jquery也对Jsonp进行了封装只需要设置dataType为jsonp即可,注意jsonp只支持get提交方式.
在这里插入图片描述
其原理如下:
Jquery发送jsonp请求时,每次都会传一个callback参数到服务器,该参数代表了jquery定义的回调函数名称,我们需要在服务器Servlet中取出callback的参数名称响应脚本。
在这里插入图片描述
本地请求代理
还有一种方案,是通过请求本地的地址,在服务端使用httpclient请求跨域服务器,得到数据之后再响应给前端.如下图:
在这里插入图片描述
Nginx反向代理服务器
在部署应用时使用反向代理服务器例如Nginx,所有的请求包括静态资源和数据接口都是通过Nginx的地址来进行访问,那么也不存在跨域问题了.

好的这就是Ajax跨域问题的集中解决方案,大家可以根据自己在项目中的需要灵活的来选择适合自己的解决方案,希望可以帮到大家.

无论你在学习上有任何问题,重庆蜗牛学院欢迎你前来咨询,联系QQ:296799112

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172584.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 能做什么?「建议收藏」

    Python 能做什么?「建议收藏」Python能做什么?Python具有简单、易学、免费、开源、可移植、可扩展、可嵌入、面向对象等优点,我所关注的是网络爬虫方面,2018即将到来,我准备步入python的世界。Hello,wor

    2022年7月3日
    22
  • sublime text 3 激活码【2022免费激活】[通俗易懂]

    (sublime text 3 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~40…

    2022年4月2日
    835
  • c语言 bzero_c语言中函数的类型

    c语言 bzero_c语言中函数的类型原型:externvoidbzero(void*s,intn);  用法:#include  功能:置字节字符串s的前n个字节为零。  说明:bzero无返回值。  举例:  //bzero.c  #include  #include  main()  {  struct  {  inta;  chars[5];  fl

    2022年10月13日
    2
  • arm linux启动过程_项目冷启动和热启动的区别

    arm linux启动过程_项目冷启动和热启动的区别微处理器:LPC2114编译环境:KeilMDKV4.10思路:常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的,通常是0x00或0xFF;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启还是冷重启。常…

    2025年6月27日
    4
  • 数据结构导论第一遍重要吗_数据结构导论自考2018

    数据结构导论第一遍重要吗_数据结构导论自考2018根据以前的经验发现,看一本书,如果一天看一点,一天看一点,到最后也就看了一点点,所以这些天我决定吃个大力丸把《数据结构导论》这本书看完。      我很少能这样看完这样的一本厚厚的书的,如果是以前,可能得连续看半个月以上呢,就是不知道效果怎样而已,这个先不管,毕竟这些天也挺难熬的,大家都知道看书会困的嘛!所以睡不着的时候,床前备一本书,有备无患。这样,你会看到有些人的书上留了很多哈喇子的印记

    2022年8月18日
    9
  • 关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方式

    关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方式

    2022年1月26日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号