跨域

Sina微博OAuth2框架解密

▼魔方 西西 提交于 2020-01-09 22:18:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 自从sina微博oauth2出来以后, 第三方集成开发简单了很多. Oauth2不像oauth1一样需要后台httpclient请求那么麻烦, 一切都可以在前台使用ajax实现了. 很多人觉得蹊跷, 对于一个第三方应用, 如何不走后台,而在前台使用ajax, 来获取access token? 又如何向sina发起get或post请求? 这其中最难解决的问题当属跨域问题. 这篇文章将彻底解决这些疑问. OAuth OAuth为一种授权认证机制. 它牵扯到服务提供方(sina weibo), 用户, 第三方应用(比如糗事百科). 第三方应用想方便用户可以在它的应用里面直接访问自己的weibo信息,还可以把第三方的信息发送到weibo, 比如转发糗事到sina weibo. 实现这个功能, 首先需要第三方应用拥有用户和sina的授权. 在拿到授权以后,第三方应用才能实现集成功能. 为什么不直接给第三方用户密码而用授权机制, 这种问题就不罗嗦了. 拿糗百为例,授权的过程为: 1, 糗百打开一个window或iframe, location指向weibo oauth授权界面. 2, weibo授权界面是在sina的域名下,是由sina的服务器控制的. 授权界面要求用户填写sina的账户,并确认授权. 3, 用户确认以后,

JSON和JSONP的区别,以及使用方法

时光总嘲笑我的痴心妄想 提交于 2020-01-07 16:49:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> (一)场景 在拉京东城市选择的基础数据时候,遇到被服务器拒绝的情况,也就是ajax跨域问题 (二)json和jsonp 说的直白一点,在我们做ajax异步的一些功能的时候,一定会或多或少的遇到两个问题,(1、数据的交换。2、跨域问题) JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。我们在用其他关于src的标签的时候,都可以跨域。所以我们只要动态构造的src标签同样可以做到跨域。 ? 1 2 3 4 5 6 7 <script type="text/javascript"> function jsonpCallback (result) { alert(result.msg); } </script> <script type="text/javascript" src=" http://crossdomain.com/jsonServerResponse?jsonp= jsonpCallback "></script> 从红色的地方可以看出,两个名字要一直,不过一般采用callback然后后面加一个“?”此时jquery会自动生成一个函数名

通过jsonp解决浏览器跨域问题

删除回忆录丶 提交于 2019-12-20 01:00:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、什么是jsonp 为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。 二、例子 1、客户端写法 这里借用了前端jquery框架对jsonp的支持 var ajaxUrl = "http://192.168.8.141:9092/project/rest/team/matchResult/1/20/1/1000"; function localHandler(data) { console.log("fengshu") console.log(data); } var ajaxParam = { async: false, url: ajaxUrl, type: "GET", dataType: 'jsonp',//非正式跨域传输协议 jsonp: 'localHandler', success: function (json) { //回调数据在localHandler处理 } }; $.ajax(ajaxParam); 2、服务器端写法 @RequestMapping("

Jquery跨域调用struts2的Action返回json数据易出现的问题

泪湿孤枕 提交于 2019-12-18 10:55:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近一个项目使用到了JQuery调用Struts2的Action返回的json数据,因为涉及到跨域的操作,所以选择对跨域操作已经做了很好兼容的 getJson方法,但实际应用中发现前端也买年的jquery虽然可以调用后台Action类成功,但总是无法调用回调函数! 经过不断的查找,最终确定原因所在,原来跨域调用想要成功调用回调函数,必须是服务器端明确知道回调函数的地址,因此有两个必须的要素要注意: 1、调用的URL必须有callback=?,这个名字可以自己起,不一定叫这个,但是必须有 2、struts2的配置文件里,必须加上 <paramname="callbackParameter">jsoncallback</param> 这里面的这个回调参数名称,也好前端传过来的一致。 下面贴出我的使用到的代码片段: 前端页面: $.getJSON('http://xxxxxxx.xhtml?'+$('#regForm').serialize()+"&jsoncallback=?", function(data) { alert(data); }); 后端的struts-json.xml标定返回值部分,注意要包含在result段里 <result name="jsonres" type="json"> <param

解决ajax跨域几种方式

◇◆丶佛笑我妖孽 提交于 2019-12-08 01:40:28
发生跨域问题的原因: 浏览器的限制,出于安全考虑。前台可以正常访问后台,浏览器多管闲事报跨域问题,但其实前台已经访问到后台了。 跨域,协议、域名、端口任何一个不一样浏览器就认为是跨域。 XHR(XMLHttpRequest)请求,因为ajax是XHR请求,浏览器就会捕捉跨域问题。 解决思路: 让浏览器不做限制,指定参数,让浏览器不做校验,但该方法不太合理,它需要每个人都去做改动。 不要发出XHR请求,这样就算是跨域,浏览器也不会报错,解决方案是JSONP,通过动态创建一个script,通过script发出请求。 在跨域的角度:一种是被调用方修改代码,加上字段,告诉浏览器,支持跨域,支持调用 通过nginx代理方式,在a域名里面的的请求地址使用代理指定到b域名。 跨域解决方案: 被调用方解决:在请求响应头增加指定字段,告诉浏览器允许调用。这种解决方案的请求是直接从浏览器发送的。( 服务器端实现、NGINX配置Apache配置) 调用方解决:这是隐藏跨域的解决法案。这种跨域请求不是直接从浏览器发送的,而是从中间的http服务器转发过去的。 设置浏览器不做限制: 可以使用everyting软件搜索浏览器的全路径,使用dos切换到此路径下 cd C:\Users\Administrator\AppData\Local\Google\Chrome\Application 输入 chrome

探讨一下常见的跨域问题

萝らか妹 提交于 2019-12-06 06:40:03
相信很多童鞋在刚接触前后端分离的时候都会遇到 跨域 问题,那么跨域问题是怎么产生的呢??怎么来解决跨域问题呢??我们闲话少说,接下来给大家做一波分析。 首先来看一下“跨域”问题的产生的原因,其实“跨域”是浏览器出于安全方面考虑作出的限制,如果不在同一域名下访问接口的话就会产生跨域问题;一般ajax请求如果因为跨域问题报错的话一般如下的报错: post request is No 'Access-Control-Allow-Origin' header is present on the requested resource.' 如果看到下面的报错,那你肯定是跨域访问了。 那么跨域问题如何避免如何解决呢?其实解决办法也很简单,统一域名就可以了,如果不能统一域名的话也可以用“jsonp”,来进行前后端数据传输,但是“jsonp”只支持get访问,而且据我所知后台还要进行一些处理才行,所以“jsonp”并不是一个好的办法。所以那只好用方法二了,方法二到底是什么呢....就是在服务端做手脚,操作起来也很简单,就是服务端在接口response的时候加上如下的header: 就可以解决跨域问题了。 > header("Access-Control-Allow-Origin:*"); > header("Access-Control-Allow-Methods:POST,GET");

CAS环境下的AJAX跨域

泄露秘密 提交于 2019-12-06 05:59:48
情况说明: 在单点登录的环境下,所有的文件上传都是通过webuploader上传到文件管理服务器。而webuploader的上传可以参考ajax的请求,相当于是跨域操作。 首先,跨域请求访问的问题,可以通过在文件服务器增加拦截器,修改请求头来解决。 package com.util; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; public class SimpleCORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

【Tomcat】将网页放在tomcat服务器上

末鹿安然 提交于 2019-12-05 15:15:54
作为一个新手,因为碰到了js的跨域问题,想把网页放在服务器中,但是又不知道怎么办,上网查了好久,说要改配置文件。但是后来问了行业的前辈,很简单。 只需要把网页放在“D:\Program Files\apache-tomcat-9.0.0.M3\webapps”里就行了。 具体方法如下: 1.在webapps中新建一个文件夹,命一个名字,这里我就命名为“quan” 2.然后把文件放进去 3.打开网页,注意网址和文件名之间的关系 这是我对tomcat的初体验 来源: oschina 链接: https://my.oschina.net/u/1165741/blog/636911

AJAX学习笔记——跨域

你。 提交于 2019-12-05 05:04:43
跨域 一个域名地址的组成: http:// www abc.com : 8080 / scripts/jquery.js 协议 子域名 主域名 端口号 请求资源地址 端口号:一般来说域名端口号是80,如果端口号是80,可以省略 当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。 不同域之间相互请求资源,就算作“跨域” 比如: http://www.abc.com/index.html请求http://www.efg.com/service.php 什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制, a.com域名下的js无法操作b.com或是c.a.com域名下的对象。 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。 www.abc.com/index.html调用www.abc.com/service.php (非跨域) www.abc.com/index.html调用www.efg.com/service.php (跨域) www.abc.com/index.html调用bbs.abc.com/service.php (跨域) www.abc.com/index.html调用www.abc.com:81/service.php (跨域)

Angular通过CORS实现跨域方案

对着背影说爱祢 提交于 2019-12-04 17:15:48
‍ ‍ 以前有一篇很老的文章网上转了很多,包括现在如果你百度"跨域"这个关键字,前几个推荐的都是"Javascript跨域总结与解决方案".看了一下感觉手段有点陈旧了,有一些比如document.domain还有iframe的解决方案委实"丑陋"一些,感觉不再适用于现在一些项目中. 就拿iframe来说作为一个前端工程师,我极为讨厌iframe这种东西.它不光增加了性能上的高负荷,同时也不利于掌控. 在Angular应用中实现跨域的方式相对简单,基本上通过两种方式即可.一种是JSONP,另一种是通过CORS.前者是相对比较老的手法,后者我感觉更加给力一点,所以本文主要说一下Angular如何与CORS配合跨域. 能不使用JSONP就尽量不使用,这是着手于Angular跨域的一个原则吧.不管怎么说,script的标签嵌入感觉还是low了点. ‍ ‍ Angular推崇的时前后端分离,所以跨域由哪一方实现成为一个问题.这个就不得不说前端技术上的局限性,即使是相对好用的JSONP对于非GET请求也是无能为力的,因为它本质上还是通过script去get一些资源. JSONP这种只能GET的限制,在Angular推崇RESTful风格接口的API场景下,就完全制约了它的使用,总不能弃POST和PUT那些不管.并且JSONP的错误处理很弱,不尽人意.总之前端实现跨域都有各种各样的局限性