跨域是JavaScript出于安全方面的考虑,不允许浏览器在当前访问的域名的页面中的javascript的调用其他域名页面中的对象。
祁东ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
跨域请求就是为了解决禁止跨域访问的问题。
用jsonp的原因是json是javascript中的对象,而跨域访问中有图片、css、javascript脚本文件等是不限制,因此你可以在页面渲染时动态在script标签设置src路径,而这个路径返回回来的就是json对象。
JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下:
首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。更详细的说明可以看下表:
特别注意两点:
第一,如果是协议和端口造成的跨域问题“前台”是无能为力的,
第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个ip上。
“URL的首部”指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。
在构建xmpp web客户端的时候, 如果网站和xmpp服务器的域名不一致,就需要用到跨域请求了。
可以使用 flXHR.js 这个库来实现跨域请求,因为使用了 strophe,所以需要加载以下两个js。之后会在 strophe 中会使用 flxhr 来发起请求。
使用 flxhr 请求, 需要服务器在根目录返回 domaincross.xml 文件, 具体格式点这 --- 文档链接
ejabberd 的 mod_http_fileserver 组件是专门用来配置文件服务器的组件
在加入 mod_http_fileserver 后, web_admin(web admin管理)功能失效了, google 后发现为 ejabberd 的 bug.
想到的解决的办法,是另外一个端口启动 web_admin。
1.编辑 ejabberd 配置文件, 将 {5280, ejabberd_http, 开头的这段配置替换成
2.将 {mod_http_fileserver, 开头的一段替换为以下,
记得把路径替换成你的。
3.在 /Applications/ejabberd-14.05/www 路径下加入 domaincross.xml
上篇讲了 nodejs做http请求转发,解决js跨域问题(二)
现在遇到一个问题,公司的服务器防火墙针对User-Agent做了拦截。需要特定的User-Agent才能访问到API接口
如果用上篇的方法js的ajax请求目前在很多浏览器中是无法修改User-Agent,这样的话导致api请求可能无法成功。
我们可以在nodejs这一层加入请求修改User-Agent,不仅仅可以在nodejs这一层代理修改User-Agent,还可以修改request和response
例如
下面就修改了request的headers 添加了mytest=0000000000000和User-Agent= mytest
也修改了request里面的body给body添加了 Type : 'jpg' 以及修改了 FileName : '2.jpg'
一定要注意如果修改了 request 的 body 值一定要重新设置 Content-Length
response原本是返回一个json {"ID":"1234567890","Name":"张三"} ,也把这个json改了,改成 {"ID":"1234567890","Age":2}