Springboot跨域訪問爲什麼會出現OPTION請求呢?
** 請求方式有兩大類,一類是簡單的請求,一類是非簡單的請求。簡單的請求類似於GET、POST、HEAD等,非簡單的請求如PUT、DELETE等。對於簡單請求,瀏覽器直接發本次請求,而對於非簡單請求,瀏覽器會先發預檢請求,然後再發本次請求。而預檢請求就是OPTION請求,OPTION請求只是檢測作用,並沒有具體數據。對於跨域訪問設置攔截器時,需要對OPTION請求做相應的處理,否則對於非簡單的請求會攔截訪問**
具體詳解OPTION請求請點擊這裏
解決辦法
設置攔截器處對OPTION請求做處理,代碼如下:
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new HandlerInterceptor() {
//通過控制器之前執行的方法
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("執行攔截器");
//判斷請求方式,排除OPTIONS請求
if(request.getMethod().toUpperCase().equals("OPTIONS")){
return true;//通過所有OPTION請求
}
//其他業務攔截功能
return true;//返回true表示允許通過
}
}).addPathPatterns("/**")//添加攔截路徑,攔截所有
.excludePathPatterns("/XXX/YYY/**");//排除攔截路徑
}