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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

springboot 跨域配置cors

發布時間:2024/9/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot 跨域配置cors 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

擼了今年阿里、頭條和美團的面試,我有一個重要發現.......>>>

1 跨域的理解

跨域是指:瀏覽器A服務器B獲取的靜態資源,包括Html、Css、Js,然后在Js中通過Ajax訪問C服務器的靜態資源或請求。即:瀏覽器A從B服務器拿的資源,資源中想訪問服務器C的資源。

同源策略是指:瀏覽器A服務器B獲取的靜態資源,包括Html、Css、Js,為了用戶安全,瀏覽器加了限制,其中的Js通過Ajax只能訪問B服務器的靜態資源或請求。即:瀏覽器A從哪拿的資源,那資源中就只能訪問哪。

同源是指:同一個請求協議(如:Http或Https)、同一個Ip、同一個端口,3個全部相同,即為同源。

2 跨域的處理

跨域的這種需求還是有的,因此,W3C組織制定了一個Cross-Origin Resource Sharing規范,簡寫為Cors,現在這個規范已經被大多數瀏覽器支持,從而,處理跨域的需求。

Cors需要在后端應用進行配置,因此,是一種跨域的后端處理方式,這么做也容易理解,一個你不認識的源來訪問你的應用,自然需要應用進行授權。除了后端處理方式,也有前端的解決方案,如:JSONP,因這里我們主要講解SpringBoot2.x對Cors的配置,暫不對前端解決方案進行詳細說明。

3 跨域的分類

跨域分為以下3種

名稱英文名說明
簡單請求Simple Request發起的Http請求符合:
1.無自定義請求頭,
2.請求動詞為GET、HEAD或POST之一,
3.動詞為POST時,Content-Type是application/x-www-form-urlencoded,
multipart/form-data或text/plain之一
預檢請求Preflighted Request發起的Http請求符合其中之一:
1.包含了自定義請求頭,
2.請求動詞不是GET、HEAD或POST,
3.動詞是POST時, Content-Type不是application/x-www-form-urlencoded,
multipart/form-data或text/plain。 即:簡單請求的相反
憑證請求Requests with Credential發起的Http請求中帶有憑證

4 SpringBoot2.x配置Cors

@RestController @RequestMapping(value = "/api/users") @CrossOrigin public class UsersController{@Autowiredprivate UsersService usersService;@PostMapping@CrossOriginpublic User create(@RequestBody User user) {return userService.save(user);} }

?其中,@CrossOrigin注解可以使用以下參數

?

名稱類型范圍必填請求頭字段
valueString數組類或方法Access-Control-Allow-Origin
originsString數組類或方法是,同value,可以二選一Access-Control-Allow-Origin
methodsString數組類或接口Access-Control-Allow-Methods
maxAgelong類或接口Access-Control-Max-Age
allowCredentialsString類或接口Access-Control-Allow-Credentials
allowedHeadersString數組類或接口Access-Control-Request-Headers
exposedHeadersString數組類或接口Access-Control-Expose-Headers
  • 備注說明
  • value、origins屬性:配置允許訪問的源,如: http://anxminise.cc,*表示允許全部的域名
  • methods屬性:配置跨域請求支持的方式,如:GET、POST,且一次性返回全部支持的方式
  • maxAge屬性:配置預檢請求的有效時間, 單位是秒,表示:在多長時間內,不需要發出第二次預檢請求
  • allowCredentials屬性:配置是否允許發送Cookie,用于 憑證請求, 默認不發送cookie
  • allowedHeaders屬性:配置允許的自定義請求頭,用于 預檢請求
  • exposedHeaders屬性:配置響應的頭信息, 在其中可以設置其他的頭信息,不進行配置時, 默認可以獲取到Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma字段
  • ?使用WebMvcConfigurer對象

    @Configuration public class MyConfiguration {@Beanpublic WebMvcConfigurer corsConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**").allowedOrigins("*") .allowCredentials(true).allowedMethods("GET", "POST", "DELETE", "PUT","PATCH").maxAge(3600); }};} }

    或者這個方式:

    @Configuration public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE").maxAge(3600).allowCredentials(true);} }

    其中,通過相應的方法實現跨域請求的配置

    方法類方法名稱必填請求頭字段說明
    CorsRegistryaddMapping無, 非Cors屬性,?
    屬于SpringBoot配置
    配置支持跨域的路徑
    CorsRegistrationallowedOriginsAccess-Control-Allow-Origin配置允許的源
    CorsRegistrationallowedMethodsAccess-Control-Allow-Methods配置支持跨域請求的方法,?
    如:GET、POST,一次性返回
    CorsRegistrationmaxAgeAccess-Control-Max-Age配置預檢請求的有效時間
    CorsRegistrationallowCredentialsAccess-Control-Allow-Credentials配置是否允許發送Cookie, 用于 憑證請求
    CorsRegistrationallowedHeadersAccess-Control-Request-Headers配置允許的自定義請求頭, 用于 預檢請求
    CorsRegistrationexposedHeadersAccess-Control-Expose-Headers配置響應的頭信息,?
    在其中可以設置其他的頭信息
    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的springboot 跨域配置cors的全部內容,希望文章能夠幫你解決所遇到的問題。

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