【springboot】【若依(ruoyi)】@RestController 接口跨域请求
前言
- springboot 2.1.1.RELEASE
- 360極速瀏覽器 12.0.1476.0 (正式版本) (32 位)
- jquery 3.5.0
- 接口跨域請求有兩者方式:
- jsonp
- CORS
JSONP
JSONP(JSON with Padding)是利用瀏覽器對script的資源引用沒有同源限制,通過動態插入一個script標簽,當資源加載到頁面后會立即執行的原理實現跨域的。
JSONP是一種非正式傳輸協議,具體做法是:用戶傳遞一個callback參數給服務端。服務端返回數據時用callback參數包裹住JSON數據,形如callback({name:'zhangsan',age:18})。
JSONP只支持GET請求(不支持POST等其它類型的HTTP請求),它只支持跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進行JavaScript調用的問題。
JSONP的優勢在于支持老式瀏覽器,弊端也比較明顯:需要客戶端和服務端定制進行開發。
CORS
Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定義了在跨域訪問資源時瀏覽器和服務器之間如何通信。CORS背后的基本思想是使用自定義的HTTP頭部允許瀏覽器和服務器相互了解對方,從而決定請求或響應成功與否。
CORS的具體做法為:瀏覽器發現請求不符合同源策略時,給請求加一個請求頭Origin。服務端如果接受請求則在返回結果中加入一個響應頭Access-Control-Allow-Origin。
CORS與JSONP的使用目的相同,但是比JSONP更強大。CORS支持所有的瀏覽器請求類型,承載的請求數據量更大(因為URL是有長度限制的,參考這里。以目前的技術看,URL沒有長度限制,那是不可想象的)。
CORS也不是萬能的,老舊的瀏覽器就不支持。
CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)。下面的方法只在簡單請求下做了測試。
springboot 啟用 @CrossOrigin
springboot很貼心的提供了不同粒度的控制。這里介紹全局設置。
添加注解@CrossOrigin
@CrossOrigin(origins = {"*"}) @SpringBootApplication public class Application { ... }說明:origins 不建議使用*(為了方便這里用*。實際應用時,老老實實的一個一個的添加)。
addCorsMappings
@Configuration public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**");}}測試
測試代碼略。
Http 請求如下(http://localhost:8085/api/sample/form/get1):
Http 響應如下:
HTTP/1.1 200 Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Access-Control-Allow-Origin: * Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Fri, 04 Sep 2020 06:09:46 GMT參考
https://www.cnblogs.com/banning/p/6250677.html
https://zhuanlan.zhihu.com/p/38972475
https://www.cnblogs.com/zhaosq/p/10529803.html
總結
以上是生活随笔為你收集整理的【springboot】【若依(ruoyi)】@RestController 接口跨域请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何包含鼠标指针如何包含鼠标指针图片
- 下一篇: 用电脑控制家用电器如何用电脑控制继电器