什么是跨域?如何解決?

1.什么是跨域?

跨域:指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。

例如:a頁面想獲取b頁面資源,如果a、b頁面的協(xié)議、域名、端口、子域名不同,所進行的訪問行動都是跨域的,而瀏覽器為了安全問題一般都限制了跨域訪問,也就是不允許跨域請求資源。注意:跨域限制訪問,其實是瀏覽器的限制。理解這一點很重要!?。?/p>

同源策略:是指協(xié)議,域名,端口都要相同,其中有一個不同都會產(chǎn)生跨域;


2.跨域訪問示例

假設(shè)有兩個網(wǎng)站,A網(wǎng)站部署在:http://localhost:81 即本地ip端口81上;B網(wǎng)站部署在:http://localhost:82 即本地ip端口82上?,F(xiàn)在A網(wǎng)站的頁面想去訪問B網(wǎng)站的信息,A網(wǎng)站頁面的代碼如下(這里使用jquery的異步請求)

$(function (){

??? $.get("http://localhost:82/api/values", {},function (result) {

????????? $("#show").html(result);

? })});


從錯誤信息可以看出以上出現(xiàn)了跨域問題!

3.如何解決跨域問題?

由之前的介紹我們已經(jīng)知道錯誤的原因,既然跨域會產(chǎn)生問題,那么我們就不跨域不就完了嘛?。?!

先上圖:


首先我們用nginx作為代理服務(wù)器和用戶交互,這樣用戶就只需要在80端口上進行交互就可以了,這樣就避免了跨域問題,因為我們都是在80端口上進行交互的;

下面我們看一下利用nginx作為反向代理的具體配置:

server {

? ? ? ? listen? ? ? 80; #監(jiān)聽80端口,可以改成其他端口

? ? ? ? server_name? localhost; # 當(dāng)前服務(wù)的域名

? ? ? ? #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.當(dāng)用戶發(fā)送localhost:80/時會被nginx轉(zhuǎn)發(fā)到http://localhost:81服務(wù);

2.當(dāng)界面請求接口數(shù)據(jù)時,只要以/apis 為開頭,就會被nginx轉(zhuǎn)發(fā)到后端接口服務(wù)器上;

總結(jié):nginx實現(xiàn)跨域的原理,實際就是把web項目和后端接口項目放到一個域中,這樣就不存在跨域問題,然后根據(jù)請求地址去請求不同服務(wù)器(真正干活的服務(wù)器);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 1.跨域訪問示例 假設(shè)有兩個網(wǎng)站,A網(wǎng)站部署在:http://localhost:81 即本地ip端口81上;B網(wǎng)...
    魏楊閱讀 596評論 0 2
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    HeroXin閱讀 955評論 0 4
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,412評論 0 6
  • 開學(xué)啦,很多大盆友小盆友背上開學(xué)新裝備,哼著小歌上學(xué)去啦!每逢開學(xué)第一天,各種發(fā)課本、作業(yè)本、調(diào)座次認識新同學(xué),讓...
    二雙閱讀 1,084評論 0 0

友情鏈接更多精彩內(nèi)容