We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
weiruizhang
软通动力
一面
常用的跨域请求方法有哪些?
由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。跨域的解决方案有以下几种。 1、jsonp 这种方式主要是通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)。在客户端注册一个callback,然后把callback的名字传给服务器,此时,服务器先生成json数据,然后以js语法的方式,生成一个function,function的名字就是传递上来的参数jsonp,最后将json数据直接以入参的方式,放置到function中,生成了一段js语法的文档,返回给客户端,客户端浏览器,解析script标签,并执行返回的js文档,此时数据作为参数,传入到了客户端预定义好的callback函数里。这种方式有一个很直接的缺点,就是只能够获取数据不能发送数据,即请求方式只能为GET。 前端代码片段 <script> var _script = document.createElement('script'); _script.type = "text/javascript"; _script.src = "http://localhost:8888/jsonp?callback=f"; document.head.appendChild(_script); </script> 后端代码片段 var query = _url.query; console.log(query); var params = qs.parse(query); console.log(params); var f = ""; f = params.callback; res.writeHead(200, {"Content-Type": "text/javascript"}); res.write(f + "({name:'hello world'})"); res.end();
<script> var _script = document.createElement('script'); _script.type = "text/javascript"; _script.src = "http://localhost:8888/jsonp?callback=f"; document.head.appendChild(_script); </script>
var query = _url.query; console.log(query); var params = qs.parse(query); console.log(params); var f = ""; f = params.callback; res.writeHead(200, {"Content-Type": "text/javascript"}); res.write(f + "({name:'hello world'})"); res.end();
2、Proxy代理 代理的方式首先将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。比较常见的有nginx反向代理。我们在与服务器发生信息请求时,都会经过代理(中间层),由代理帮我们来收发请求,跨域的问题交给代理解决,前端还是正常发送请求就可以,不用理会是否跨域的问题。
3、iframe通信方法也可以实现不同域之间的通信。 利用window.postMessage方法,外页面通过绑定message方法,监听子级页面中(iframe)绑定的postMessage方法,实现不同域之间的通信。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
To:
weiruizhang
面试公司:
软通动力
面试环节:
一面
问题:
常用的跨域请求方法有哪些?
自己的答案:
由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。跨域的解决方案有以下几种。
1、jsonp
这种方式主要是通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)。在客户端注册一个callback,然后把callback的名字传给服务器,此时,服务器先生成json数据,然后以js语法的方式,生成一个function,function的名字就是传递上来的参数jsonp,最后将json数据直接以入参的方式,放置到function中,生成了一段js语法的文档,返回给客户端,客户端浏览器,解析script标签,并执行返回的js文档,此时数据作为参数,传入到了客户端预定义好的callback函数里。这种方式有一个很直接的缺点,就是只能够获取数据不能发送数据,即请求方式只能为GET。
前端代码片段
<script> var _script = document.createElement('script'); _script.type = "text/javascript"; _script.src = "http://localhost:8888/jsonp?callback=f"; document.head.appendChild(_script); </script>
后端代码片段
var query = _url.query; console.log(query); var params = qs.parse(query); console.log(params); var f = ""; f = params.callback; res.writeHead(200, {"Content-Type": "text/javascript"}); res.write(f + "({name:'hello world'})"); res.end();
2、Proxy代理
代理的方式首先将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。比较常见的有nginx反向代理。我们在与服务器发生信息请求时,都会经过代理(中间层),由代理帮我们来收发请求,跨域的问题交给代理解决,前端还是正常发送请求就可以,不用理会是否跨域的问题。
3、iframe通信方法也可以实现不同域之间的通信。
利用window.postMessage方法,外页面通过绑定message方法,监听子级页面中(iframe)绑定的postMessage方法,实现不同域之间的通信。
The text was updated successfully, but these errors were encountered: