CORS解決跨域
跨域是什么?
為了保證瀏覽器的安全凄敢,不同源的客戶端無法讀寫對方資源扑庞,稱為同源策略滩援。
所謂同源(指在一個域)就是兩個頁面具有相同的協(xié)議(protocol)租悄,主機(jī)號和端口號。
當(dāng)請求一個url的協(xié)議外傅,域名碾盟,端口三者之間任意一個與當(dāng)前頁面url不同即為跨域榔组,無法讀取Cookie包归,無法發(fā)送AJAX請求。
跨域問題解決
CORS,一種跨域資源共享技術(shù)標(biāo)準(zhǔn)桥帆,可以在不破壞既有規(guī)則下叶骨,通過后端服務(wù)器實(shí)現(xiàn)CORS接口,從而實(shí)現(xiàn)跨域通信祈匙。
CORS將請求分為兩類忽刽,簡單和非簡單請求。
簡單請求:
CORS簡單請求的策略是在請求時在請求頭增加一個Origin字段夺欲,服務(wù)器收到請求后跪帝,根據(jù)該字段判斷是否允許該請求訪問,如果允許些阅,在http頭信息中添加Access-Contro-Allow=Origin字段
非簡單請求:
對于非簡單請求的跨源請求伞剑,瀏覽器會在真實(shí)請求發(fā)出前,增加一次OPTION請求市埋,稱為預(yù)檢請求(preflight request)
預(yù)檢請求將真實(shí)請求的信息黎泣,包括請求方法恕刘,自定義頭字段,源信息添加到http頭信息字段中抒倚,詢問服務(wù)器是否允許這樣的操作褐着。
服務(wù)器收到請求后,分別對請求信息進(jìn)行驗(yàn)證托呕,如果通過的話含蓉,會在返回http頭信息中添加允許通過的信息。
在Springboot中可以配置CORS
配置如下:
如果您的項(xiàng)目使用 Java 后端框架镣陕,例如 Spring 或 Spring Boot谴餐,您可以使用 @CrossOrigin 注解來啟用 CORS。具體來說呆抑,您可以在您的控制器方法上添加 @CrossOrigin 注解岂嗓,例如:
@CrossOrigin(origins = "http://example.com")
@GetMapping("/api/data")
public ResponseEntity<Data> getData() {
// 返回?cái)?shù)據(jù)
}
這將允許來自 http://example.com 域的請求訪問 /api/data 路徑,并在響應(yīng)標(biāo)頭中添加 Access-Control-Allow-Origin: http://example.com鹊碍。