跨域请求解决方法(JSONP, CORS)
1、跨域
假设我们页面或者应用部署在 http://www.aaa.com 上了,而我们打算从 http://www.bbb.com 请求提取数据。一般情况下,如果我们直接使用 AJAX 来请求将会失败,浏览器也会返回“源不匹配”的错误,"跨域"也就以此由来。
这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),项目开发不可避免的需要进行跨域操作,它是前端工程师的基本功之一。
大多数跨域的解决方案一样都是JSONP,但是它只支持GET。如果需要改成支持POST,因为传输的数据量比较大,GET形式搞不定。这就需要CORS(跨域资源共享,Cross-Origin Resource Sharing)。
2、jsonp:就是将返回的json数据放到一个回调方法里,只支持GET
客户端:get是后面加上www.bbb.com/11?callback=xxx
服务端:返回的数据:jsonpcallback({"Email":"zhww@outlook.com","Remark":"我来自遥远的东方"})就是合法的js语句
3、cors:
客户端:需要发送请求的浏览器支持cors,代码:
var data = {name:"a",password:"bb",email:"cc@cc.cc",birthday:"1980-01-23"}; $.ajax({ url: 'http://127.0.0.1:8080/RestEasy_04/User', type: 'POST', contentType : 'application/json', dataType: "json", data: JSON.stringify(data), success: function(){ console.log(arguments); }, error: function(){ console.log('error') } });
服务端:返回的时添加头 Access-Control-Allow-Origin
为了防止XSS攻击我们的服务器,也可以设置指定的域名,如只允许来自域名 http://www.aaa.com 的请求:
Access-Control-Allow-Origin: http://www.aaa.com
4、java的cors解决方法:CORS Filter
使用Maven添加cors-filter,pom.xml
<dependency> <groupId>com.thetransactioncompany</groupId> <artifactId>cors-filter</artifactId> <version>2.1.2</version> </dependency>
使用
web.xml添加过滤器:
<filter> <filter-name>CORS</filter-name> <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> </filter>
为单独的servlet应用过滤如下:
<filter-mapping> <filter-name>CORS</filter-name> <servlet-name>MyServlet</servlet-name> </filter-mapping>
为指定路径应用过滤如下:
<filter-mapping> <filter-name>CORS</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
另附下载地址:http://software.dzhuvinov.com/cors-filter.html
使用方法:http://software.dzhuvinov.com/cors-filter-installation.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现