我开发了一组生活在asp.net mvc应用程序上的api,但是会从访问我们主站点(位于LAMP堆栈)的浏览器中使用。
域名如下所示:
API的
http://apis.www.mainsite.org(最初是apis.mainsite.org,但我是为了解决这个问题而做了修改)
我向api发出一个$ .ajax()请求,然后发送普通的html将输入表单转储到div中。
当我从我的apis网站上的示例主页运行时,配置运行正常,但是当我在apis.www.mainsite.org以外的网站上放置相同页面时,我收到“权限被拒绝”错误在IE上第一次请求服务。
我似乎有一些资源说我必须实现JSONP以使其正常工作并以这种方式调用跨域脚本 - 但我希望我可以在仍然返回html的同时启用该功能JSON。
任何建议都将不胜感激。
另一个问题 - 任何想法为什么从http://mysite.org到http://api.mysite.org的XMLhttp请求都会被视为跨域?域名是否有任何变化使其成为跨域调用?
将api的域与主要内容域分开似乎是一种相当常见的场景,我希望我只是遗漏了一些简单的东西。
致以最诚挚的问候和感谢您的光临。
哈尔
答案 0 :(得分:2)
这称为“同源策略”,这意味着Javascript无法访问其域外的页面。
是的,任何更改都会触发它成为跨域调用。我建议创建一个名为/api
的目录的符号链接,该目录将使目录转发到存储api.example.com文件的任何位置。它会使它看起来完全相同。因此api.example.com
和example.com/api
会链接到同一文件夹。这可能会解决你的情况。
另外,我发现我访问的大多数网站都使用API文件夹来存放他们的API而不是子域名,但是我再次没有与公司合作过。
答案 1 :(得分:2)
以下文章可能会更多地阐明脚本标记黑客技术:
Why don't I get a 'same origin policy' warning when using the Google Maps API?
简而言之,您不能使用XmlHttpRequest(这是jquery和ext-js使用的)进行跨域调用。 <script>
标记不受此类规则的约束。诀窍是放入一个带有参数的URL,其页面使用这些参数返回JSON,以在JavaScript代码中形成对回调的调用。
编辑:要回答您的其他问题,您网址的域名部分必须完全匹配。有关跨域调用与同域调用的示例,请参阅以下Wikipedia文章: