日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

跨域理解及服务器端解决跨域问题

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跨域理解及服务器端解决跨域问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.跨域請求,就是這個服務器去拿另一個服務器的資源,另一個服務器的域名肯定和當前的服務器域名不一樣嘛。

瀏覽器默認是不允許跨域請求的,是瀏覽器對JavaScript施加的安全限制。是瀏覽器對JavaScript施加的安全限制。是瀏覽器對JavaScript施加的安全限制。

由于瀏覽器同源策略,凡是發送請求url的協議、域名、端口三者之間任意一與當前頁面地址不同即為跨域。

?

所謂同源是指,域名,協議,端口均相同,不明白沒關系,舉個栗子:

http://www.123.com/index.html 調用 http://www.123.com/server.PHP?(非跨域)

http://www.123.com/index.html 調用 http://www.456.com/server.php?(主域名不同:123/456,跨域)

http://abc.123.com/index.html 調用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 調用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 調用 https://www.123.com/server.php (協議不同:http/https,跨域)

請注意:localhost和127.0.0.1雖然都指向本機,但也屬于跨域。

瀏覽器執行javascript腳本時,會檢查這個腳本屬于哪個頁面,如果不是同源頁面,就不會被執行。

?

服務器端解決跨域問題的三種方法

跨域是指html文件所在的服務器與ajax請求的服務器是不同的ip+port,例如:?
- ‘192.168.1.1:8080’ 與 ‘192.168.1.2:8080’是不同的域。?
- ‘192.168.1.1:8080’ 與 ‘192.168.1.1:8081’是不同的域。

解決此類問題的方法很多,有需要客戶端和服務端都要更改的,例如jsonp,iframe等等;有只需要客戶端更改的,這種情況只能出現在hybrid app開發中,即通過調用native方法來進行網絡請求;有只需要服務端配置的,下面介紹3種服務端配置的方法。

第一種

如果您使用的mvc框架是spring4.2以上的話,一個@CrossOrigin就可以搞定。將@CrossOrigin加到Controller上,那么這個Controller所有的請求都是支持跨域的,代碼如下:

@Controller @CrossOrigin public class GreetingController {

將@CrossOrigin加到請求方法上,那么這個請求是支持跨域的,代碼如下

@CrossOrigin@RequestMapping("/greeting")public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {

第二種

全局配置,也需要spring4.2以上。

@Beanpublic WebMvcConfigurer corsConfigurer() {return new WebMvcConfigurerAdapter() {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");}};}

.addCorsMappings()中的參數代表支持跨域的url,.allowedOrigins()中的參數代表可以訪問該接口的域名,設置為”*”可支持所有域。

第三種

這種方法就跟框架無關了,需要兩個jar包,點擊這里進行下載,兩個jar包可以放的程序里,也可以放到tomcat中,然后將下面的配置寫到web.xml中就可以了

< filter > < filter-name > CORS </ filter-name > < filter-class > com.thetransactioncompany.cors.CORSFilter </ filter-class > < init-param > < param-name > cors.allowOrigin </ param-name > <!--配置授信的白名單的域名!-->< param-value > * </ param-value > </ init-param > < init-param > < param-name > cors.supportedMethods </ param-name > < param-value > GET, POST, HEAD, PUT, DELETE </ param-value > </ init-param > < init-param > < param-name > cors.supportedHeaders </ param-name > < param-value > Accept, Origin, X-Requested-With, Content-Type, Last-Modified </ param-value > </ init-param > < init-param > < param-name > cors.exposedHeaders </ param-name > < param-value > Set-Cookie </ param-value > </ init-param > < init-param > < param-name > cors.supportsCredentials </ param-name > < param-value > true </ param-value > </ init-param > </ filter > < filter-mapping > < filter-name > CORS </ filter-name > < url-pattern > /* </ url-pattern > </ filter-mapping >

?

總結

以上是生活随笔為你收集整理的跨域理解及服务器端解决跨域问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。