http跨域預(yù)檢問題

昨天的項目碰到個比較棘手的問題。前端發(fā)送ajax請求時,總會在真實請求前多一次請求方法為OPTIONS的請求,而且該請求返回403,導(dǎo)致真實請求失敗。后來查閱資料,大致了解了產(chǎn)生該問題的原因及原理,即跨域預(yù)檢。本文只給出解決方法,不再詳述原理,詳細可見簡單跨域請求和帶預(yù)檢的跨域請求

解決方法也是比較簡單,主要是開啟后臺的options的驗證即可。作者使用spirngboot的項目,主要通過攔截器攔截當前的options請求,開啟options驗證。

public class CorsInterceptor implements HandlerInterceptor {

    private static final String OPTIONS = "OPTIONS";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) {
        //跨域預(yù)檢
        if (OPTIONS.equals(request.getMethod())) {
            response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "*");
            response.addHeader("Access-Control-Allow-Headers", "*");
//            有效期,在24小時內(nèi),該請求無需再發(fā)送預(yù)檢請求
            response.addHeader("Access-Control-Max-Age", String.valueOf(24 * 60 * 60));
        }
        return true;
    }
}

springboot添加攔截器

@Configuration
public class GlobalConfiguration implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CorsInterceptor()).addPathPatterns("/**");
    }
}

以上,即可完成因為跨域預(yù)檢導(dǎo)致的請求失敗的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容