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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 允许Traceroute探测「建议收藏」

    允许Traceroute探测「建议收藏」漏洞描述使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来了解目标网络的网络拓扑。解决方法在防火墙中禁用TimeExceeded类型的ICMP包

    2022年7月4日
  • Webgame 设计与开发之内容简介

    Webgame 设计与开发之内容简介Webgame设计与开发之内容简介内容简介      本书将webgame设计方法,编程方法,设计过程完全的结合起来,详细阐明webgame设计与开发的各个方面。本书首先介绍webgame的市场趋势,以及开发wengame所需要的主要技术,然后分成三大部分:客户端设计,服务端设计,数值设计。最后以一个完整的webgame游戏展现在读者面前。     本书结构紧凑,内容由浅入深,是学习

    2022年6月6日
  • ubuntu18.04 linux journalctl 命令

    ubuntu18.04 linux journalctl 命令目录Help 输出所有的日志记录 匹配(match) 把日志保存到文件中 限定日志所能占用的最高容量 查看某次启动后的日志 查看指定时间段的日志 同时应用match和时间过滤条件 按unit过滤日志 通过日志级别进行过滤 实时更新日志 只显示最新的n行 控制输出 按可执行文件的路径过滤 查看内核日志 总结journalctl用来查询systemd…

    2022年5月24日
  • javatype和jdbctype作用_javatype

    javatype和jdbctype作用_javatypeJDBCType JavaTypeCHAR StringVARCHAR StringLONGVARCHAR StringNUMERIC java.math.BigDecimalDECIMAL java.math.BigDecimalBIT booleanBOOLEAN booleanTINYINT byte

    2022年10月20日
  • javaScript阶乘算法挑战

    javaScript阶乘算法挑战计算所提供整数的阶乘。如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成 n!例如: 5!=1*2*3*4*5=120思路: 对于小于1的整数,阶乘方法返回1;其他的整数,运用递归运算,依次相乘到1。functionfactorialize(num){if(num&gt;1){return num*factorialize(num-1…

    2022年7月24日
  • 方差、协方差、标准差、均方差、均方根值、均方误差、均方根误差对比分析[通俗易懂]

    方差、协方差、标准差、均方差、均方根值、均方误差、均方根误差对比分析[通俗易懂]方差、协方差、标准差(标准偏差/均方差)、均方误差、均方根误差(标准误差)、均方根值本文由博主经过查阅网上资料整理总结后编写,如存在错误或不恰当之处请留言以便更正,内容仅供大家参考学习。 方差(Variance) 方差用于衡量随机变量或一组数据的离散程度,方差在在统计描述和概率分布中有不同的定义和计算公式。①概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏…

    2022年9月30日

发表回复

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

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