背景和应用场景:
当前团队运营多个网站,比如有两个网站www.t1.com、www.t2.com。技术团队同时掌控了t1、t2的资源,理论上t2可以使用t1页面级的资源,这样有利于业务解耦和集中维护。但页面级的资源存在跨域安全问题,关于跨域问题可见前文http://truemylife.iteye.com/admin/blogs/1454300。这里由于t1与t2并非主次域名,因此若按前文,将无法实现跨域调用。这种情况下,要实现资源调用,没有条件只能创造条件,好让t1,t2实现同源,也就是实现同域名,这样就绕过了此问题。
Nginx配置:
配置www.t1.com片段
server {
listen 80;
server_name www.t1.com;
server_name_in_redirect off;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
location / {
proxy_pass http://192.168.90.111:8080;
proxy_redirect http://wwwt1.com/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 4 32k;
}
}
再新增一个供www.t2.com调用的同源域名t1.t2.com
server {
listen 80;
server_name t1.t2.com;
server_name_in_redirect off;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
location / {
proxy_pass http://192.168.90.111:8080;
proxy_redirect http://t1.t2.com/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 4 32k;
}
if ($request_uri !~* "/(s|billstudy)/(.*)") {
rewrite ^(.*)$ http://www.t1.com break;
}
}
这样,www.t1.com与t1.t2.com实际上指向相同的应用,t1.t2.com存在的意义就是供www.t2.com调用页面资源,因为www.t2.com与t1.t2.com是主次域名关系,主次域名跨域方案就简单了,参考前文。
对于t1.t2.com这个访问域名,我们并不想对外公开,因此做了访问的限制,看t1.t2.com的配置里这句:
if ($request_uri !~* "/(s|billstudy)/(.*)") {
rewrite ^(.*)$ http://www.t1.com break;
}
除了公开/s/与/billstudy/这个访问路径外对www.t2.com公开外,其他通过t1.t2.com访问,都会被重定向www.t1.com。这样有利于资源权限的控制。还可以加上防盗链的配置。
Nginx有大量的正则表达式应用,参考http://www.howtocn.org/nginx:pcre
Nginx rewrite样例 http://blog.csdn.net/cnbird2008/article/details/4409620
另外在修改nginx.conf时,一定要注意空格,比如if($request_uri !~* "/(s|billstudy)/(.*)")是不符合书写格式的,就无法启动nginx,if后面一定要留空格。
javascript支持跨域
通过iframe实现跨域调用资源时,需要主次页面都置
<script>document.domain="t1.com";</script>
但如果想资源被多个域名调用,此时定死指定t1.com就出错了,需要动态扩展,
<script> if(location.href.indexOf("t2.com")>0){ document.domain="t2.com"; }else{ document.domain="t1.com"; } </script>
这样资源就能同时被t1.com、t2.com调用了,当然访问资源的时候需要使用不同的域名,比如t1.com要调用t1.com的资源,使用http://www.t1.com/xxx.html; t2.com要调用xxx.html时,必须使用http://t1.t2.com/xxx.html。按以上配置和代码扩展,可以进一步扩展出更多的不同域名之间的页面级资源调用。
相关推荐
- Applet和JavaScript的交互可能会受到浏览器的同源策略限制,确保它们在同一域名下运行。 - 使用`<applet>`标签时,要确保用户已经安装了Java运行环境。 这个"js与applet的相互调用资源包"可能包含了相关的示例...
在互联网应用中,由于同源策略的限制,不同域名下的网页之间无法直接通信。然而,为了实现特定功能,如嵌入第三方内容或者实现跨域数据交互,开发者常常会利用`iframe`来解决这一问题。本示例“iframe跨域互相调用...
4. **错误处理**:在多线程环境中,必须处理各种可能的异常,例如网络连接问题、超时、API调用限制等。 5. **数据分块和批处理**:为了减少网络延迟和提高效率,可以将待检查的域名列表分成多个批次,每个线程处理...
在JavaScript(JS)中,由于同源策略的限制,我们不能直接从网页中访问其他不同源(协议、域名或端口)的资源。然而,为了实现特定功能,如跨域调用Window服务来获取本机硬件信息,我们需要采用一些特殊的技术来规避...
默认情况下,浏览器的同源策略限制了Ajax调用只能访问同源(协议、域名、端口相同)的URL。若需跨域访问,服务器需要设置CORS(Cross-Origin Resource Sharing)头,允许特定的跨域请求。 六、安全考虑 在使用Ajax...
AJAX阻塞及跨域名解析 AJAX(Asynchronous JavaScript and XML)是一种非常流行的Web开发技术,但是它也存在一些问题,其中之一就是阻塞和跨域名访问问题。在本文中,我们将讨论AJAX的阻塞原因和跨域名解决方案。 ...
2. **地址解析与展示**:将复杂的API调用过程简化,清晰地展示API的URL结构,包括协议(如HTTP或HTTPS)、域名、路径、查询参数等,帮助开发者理解如何正确构造调用请求。 3. **调用示例**:提供实际的调用示例,...
需要注意的是,由于同源策略的限制,JavaScript默认只能向同一域名下的资源发起请求。如果你的JavaScript代码和WebService不在同一个域下,你需要在服务器端设置CORS(跨源资源共享)或者使用JSONP(JSON with ...
在同源策略限制下,JavaScript通常不能访问不同源(协议、域名或端口不同)的资源。然而,为了实现Web应用的灵活性和扩展性,开发者有时需要突破这一限制,进行跨域请求。Ajax跨域是通过设置HTTP头信息(如`Access-...
由于同源策略的限制,Ajax请求通常只能访问同源(协议+域名+端口)的资源。如果WebService不在同一个域下,你需要在服务器端启用CORS(Cross-Origin Resource Sharing)或者使用JSONP(JSON with Padding)技术。 ...
在Web浏览器的安全策略中,同源策略限制了JavaScript只能访问与当前页面同源(协议、域名和端口相同)的资源。因此,当JS试图调用不同源的WCF服务时,就会触发跨域问题。为了解决这个问题,我们需要在WCF服务端配置...
通过输入域名,系统将调用这个页面来执行查询并返回结果。 2. `index.asp`:作为系统的主页,它通常会提供一个用户界面,让用户输入域名进行查询,并展示查询结果。页面设计可能包括输入框、查询按钮以及查询结果的...
由于JavaScript运行在浏览器的安全沙箱中,直接操作系统资源的能力受限,但通过调用OCX控件,开发者可以打破这一限制,使网页具备更强大的功能。 调用OCX控件的过程通常涉及以下几个步骤: 1. **注册OCX控件**:...
跨域资源共享(CORS)是一种安全机制,它限制了Web页面上脚本在不同域之间请求资源的能力。当一个Web应用试图从不同源的服务器请求资源时,浏览器会检查服务器的响应头,如果响应中没有正确的CORS头部信息,则会阻止...
然而,由于浏览器的同源策略限制,JS默认不能跨域(cross-domain)进行请求,即只能访问与当前页面协议、域名和端口相同的资源。这在需要从不同源获取数据时构成了障碍,例如,当我们需要使用JS调用其他服务器上的...
9. **权限控制**:根据应用场景,可能需要实施权限控制,限制非授权用户的访问,或者限制查询次数以防止滥用。 10. **版本管理**:随着功能的更新和优化,接口可能需要发布新版本,因此版本管理和向后兼容性也是...
5. **错误处理**:在处理过程中可能会遇到各种问题,如网络延迟、API调用限制、无效的域名等,系统需要有适当的错误处理机制来保证用户体验。 6. **安全性**:考虑到可能存在的安全风险,比如SQL注入或跨站脚本攻击...
同时,API调用可能有频率限制,PHP代码需要适当地处理超时和重试机制,以确保服务的稳定性和效率。 6. 用户界面设计:前端页面应该具有良好的用户体验,包括清晰的输入提示,友好的错误反馈,以及快速的响应时间。...
跨域是指浏览器的同源策略限制了JavaScript从一个域名下的网页向另一个域名下的资源发送Ajax请求。这一策略是为了防止恶意网站通过脚本访问并操作其他网站的数据,从而保护用户信息安全。然而,在某些场景下,如前后...
在IT行业中,"URL域名抓取"是一种常见的网络数据挖掘技术,主要目的是从网页或互联网上批量收集和整理URL(统一资源定位符),也就是我们常说的网址。这项技术广泛应用于搜索引擎优化、数据分析、市场研究等领域。...