服務端(apache)解決Javascript跨域問題

來源:互聯網
上載者:User

服務端(apache)解決Javascript跨域問題

由於前端解決跨域問題的局限性比較大,對於 Ajax 跨域或是 iframe 跨域,建議用伺服器端解決方案。

此方案的原理是接受用戶端發來的請求後,經由本網域服務器代理向目標伺服器發送請求,並將響應資料返回給用戶端。

用 apache 的 mod_proxy 模組開啟反向 Proxy功能來實現:

1 修改 apache 設定檔 httpd.conf ,去掉以下兩行前面 # 號

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

2 在 server config 或 virtual host 中增加:

    ProxyRequests Off
    
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    
    ProxyPass /folder http://****.com/floder

重啟 apache.

注釋:

    ProxyRequests Off 指令是指採用反向(reverse)代理,對於用戶端而言它就像是原始伺服器,並且用戶端不需要進行任何特別的設定;而正向 Proxy允許用戶端通過它訪問任意網站並且隱藏用戶端自身,因此必須採取安全措施以確保僅為經過授權的用戶端提供服務。
    ProxyPass 指令允許將一個遠端伺服器映射到本機伺服器的 URL 空間中,此時本機伺服器並不充當代理角色,而是充當遠程伺服器的一個鏡像。/folder 是一個本地虛擬路徑,http://****.com/floder 是一個指向遠程伺服器的部分 URL

如果不想對某個子目錄進行反向 Proxy時,可以用"!"指令。比如說:

    ProxyPass /folder/exception !
    ProxyPass /folder http://****.com/floder

將會代理除 /folder/exception 之外的所有對 http://****.com/floder 的請求。

也可以用 URL 重寫的方法來實現

1 修改 apache 設定檔 httpd.conf ,去掉以下三行前面 # 號

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so

2 在 server config 或 virtual host 中增加:

<Location /folder>
  SetHandler proxy-server
  order allow,deny
  Allow from all
</Location>

RewriteEngine on
RewriteRule ^/folder/(.*)$ http://****.com/floder [L,R=301,P,NC]

注釋:

    Location 指令提供了基於URL的存取控制,對於本域下的 /folder 目錄下的任何資源的訪問都會首先由proxy-server這個 handler(mod_proxy模組內部定義的一個 handler)來處理。
    SetHandler proxy-server 指令是強制所有匹配的檔案被一個Proxy 伺服器處理。
    RewriteEngine on 指令是指開啟重寫引擎。
    RewriteRule 指令是重寫規則。
        last|L 這個標記用於阻止當前已被重寫的 URL 被後繼規則再次重寫。
        redirect|R [=code] 若Substitution以http://thishost[:thisport]/(使新的URL成為一個URI)開頭,可以強制性執行一個外部重新導向,是跨域或定向到外部域的必備良藥。預設為 HTTP 響應碼為 302, 我通常指定為301。
        proxy|P 此標記使替換成分被內部地強製作為代理請求發送,表明該 rewrite 是通過 mod_proxy 代理過去,而不是通過外部重新導向過去。
        nocase|NC 忽略大小寫,也就是在Pattern與當前 URL 匹配時,’A-Z’和’a-z’沒有區別。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.