因為瀏覽器使用了同源策略
是為了保證使用者的資訊保安,防止惡意網站竊取資料,如果網頁之間不滿足同源要求,將不能:
同源策略的非絕對性:
<script></script> <img/> <iframe/> <link/> <video/> <audio/>
等帶有src屬性的標籤可以從不同的域載入和執行資源。其他外掛的同源策略:flash、java applet、silverlight、googlegears等瀏覽器載入的第三方外掛也有各自的同源策略,只是這些同源策略不屬於瀏覽器原生的同源策略,如果有漏洞則可能被駭客利用,從而留下XSS攻擊的後患
所謂的同源指:域名、網路協定、埠號相同,三條有一條不同就會產生跨域。 例如:你用瀏覽器開啟http://baidu.com
,瀏覽器執行JavaScript指令碼時發現指令碼向http://cloud.baidu.com
域名發請求,這時瀏覽器就會報錯,這就是跨域報錯。
$.ajax({ url: 'http://192.168.1.114/yii/demos/test.php', //不同的域 type: 'GET', // jsonp模式只有GET 是合法的 data: { 'action': 'aaron' }, dataType: 'jsonp', // 資料型別 jsonp: 'backfunc', // 指定回撥函數名,與伺服器端接收的一致,並回傳回來 })
<script>
標籤來呼叫伺服器提供的 js指令碼。jquery 會在window物件中載入一個全域性的函數,當 <script>
程式碼插入時函數執行,執行完畢後就 <script>
會被移除。同時jquery還對非跨域的請求進行了優化,如果這個請求是在同一個域名下那麼他就會像正常的 Ajax請求一樣工作。)try { HttpClient client = HttpClients.createDefault(); //client物件 HttpGet get = new HttpGet("http://localhost:8080/test"); //建立get請求 CloseableHttpResponse response = httpClient.execute(get); //執行get請求 String mes = EntityUtils.toString(response.getEntity()); //將返回體的資訊轉換為字串 System.out.println(mes); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
在SpringBoot2.0 上的跨域 用以下程式碼設定 即可完美解決你的前後端跨域請求問題
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; /** * 實現基本的跨域請求 * @author linhongcun * */ @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); final CorsConfiguration corsConfiguration = new CorsConfiguration(); /*是否允許請求帶有驗證資訊*/ corsConfiguration.setAllowCredentials(true); /*允許存取的用戶端域名*/ corsConfiguration.addAllowedOrigin("*"); /*允許伺服器端存取的用戶端請求頭*/ corsConfiguration.addAllowedHeader("*"); /*允許存取的方法名,GET POST等*/ corsConfiguration.addAllowedMethod("*"); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } }
服務閘道器(zuul)又稱路由中心,用來統一存取所有api介面,維護服務。
Spring Cloud Zuul通過與Spring Cloud Eureka的整合,實現了對服務範例的自動化維護,所以在使用服務路由設定的時候,我們不需要向傳統路由設定方式那樣去指定具體的服務範例地址,只需要通過Ant模式組態檔引數即可
http://a.a.com:81/A
中想存取 http://b.b.com:81/B
那麼進行如下設定即可www.my.com/A
裡面即可存取 www.my.com/B
server { listen 80; server_name www.my.com; location /A { proxy_pass http://a.a.com:81/A; index index.html index.htm; } location /B { proxy_pass http://b.b.com:81/B; index index.html index.htm; } }
http://b.b.com:80/Api
中想存取 http://b.b.com:81/Api
那麼進行如下設定即可server { listen 80; server_name b.b.com; location /Api { proxy_pass http://b.b.com:81/Api; index index.html index.htm; } }
希望本篇文章對你有所幫助。
以上就是網站跨域的五種解決方式的詳細內容,更多請關注TW511.COM其它相關文章!