1.クロスドメインとは何ですか?
クロスドメイン:スクリプトに他のサイトを実行できないブラウザを指します。これは、ブラウザの同一生成元ポリシーによって引き起こされたJavaScriptに課せられたブラウザのセキュリティ制限されている(別のドメイン内のリソースを要求するには、ドメインの試みを文書またはスクリプトを参照して、広範なクロスドメインがあります)
たとえば:ページBには、契約のページ、ドメイン名、ポート、異なるサブドメイン名B、アクセス操作がドメイン間で行われ、およびセキュリティ上の問題のためのブラウザは、一般的にクロスドメインアクセスを制限され、場合、リソースのページを取得したいです、クロスドメインリクエストリソースに許可されていません。注意:クロスドメインアクセス制限は、実際には、あるブラウザを制限します。理解することが重要です!!!
広範なクロスドメイン:
1.) 资源跳转:A链接、重定向、表单提交
2.) 资源嵌入:<link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链
3.) 脚本请求:js发起的ajax请求、dom和js对象的跨域操作等
其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。
2.元ポリシーとは何ですか?
ソース戦略/ SOP(同一生成元ポリシー)は、それが同一生成元ポリシーの欠如は、ブラウザのXSSの脆弱性がある場合は、ブラウザのコアは、また、最も基本的なセキュリティ機能ですあり、1995年にNetscapeがブラウザを導入し、慣習ですCSFR攻撃。相同は、いわゆる「プロトコル+ドメイン名+ポート」と同じ3(を参照其中有一个不同都会产生跨域
)、二つの異なるドメイン名が同じIPアドレスを指す場合でも、またホモログ。
行動を以下のいくつかの同一生成元ポリシーの制限:
1.) Cookie、LocalStorage 和 IndexDB 无法读取
2.) DOM 和 Js对象无法获得
3.) AJAX 请求不能发送
3.一般的なクロスドメインのシナリオ
クロスドメインアクセスの3例
、2つのサイトがあると仮定し、Aサイトの展開でます。http:// localhost:ローカルIPポート81で81。
Bホームページは、展開します。http:// localhost:82ローカルIPポート82です。
ウェブサイトのページは現在、情報Bサイトにアクセスしたい(jqueryの非同期要求を使用して、ここで)以下のように、A Webページのコードがあります
$(関数(){
$に.get( "HTTP:// localhostの:82 / API /値"、{}関数(結果){
$( "#ショー")HTML(結果)。
})})。
上記のエラーメッセージからわかるように、クロスドメインの問題を表示されます!
4 。クロスドメインソリューション
1、 通过jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域资源共享(CORS)
7、 nginx代理跨域
8、 nodejs中间件代理跨域
9、 WebSocket协议跨域
5 。nginxのクロスドメインソリューション
マップ上のファースト:
首先我们用nginx作为代理服务器和用户交互,这样用户就只需要在80端口上进行交互就可以了,这样就避免了跨域问题,因为我们都是在80端口上进行交互的;
下面我们看一下利用nginx作为反向代理的具体配置:
server {
listen 80; #监听80端口,可以改成其他端口
server_name localhost; # 当前服务的域名
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:81;
proxy_redirect default;
}
location /apis { #添加访问目录为/apis的代理配置
rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://localhost:82;
}
#以下配置省略
1.当用户发送localhost:80/时会被nginx转发到http://localhost:81服务;
2.当界面请求接口数据时,只要以/apis 为开头,就会被nginx转发到后端接口服务器上;
总结:nginx实现跨域的原理,实际就是把web项目和后端接口项目放到一个域中,这样就不存在跨域问题,然后根据请求地址去请求不同服务器(真正干活的服务器);
6. nginx跨域解决方案