vue + vue-resource 跨域訪問


使用vue + vue-resource進行數據提交,后台使用RESTful API的方式存取數據,搞了一天,終於把后台搞好了。進行聯合調試時,數據不能提交,報403錯誤:

XMLHttpRequest cannot load http://localhost:8090/xxx/xxx. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 403.

當時就懵逼了,愣了半天,突然腦子里靈光一閃,這**的不會是沒有權限進行跨域訪問的錯誤吧?然后就趕緊上網查找解決方案,有前端解決方案 和 后端解決放案兩種:

前端解決方案是在 build/webpack.dev.conf.js 文件中加個代理,但好像要把訪問的API一一映射,工作量有點大,遂沒有使用這種方式。這種方式沒試過,不知可不可行。

后端方案為在后台站點中加入允許指定的站點訪問的信息:

/**
 * 解決前端站點(主要為JavaScript發起的Ajax請求)訪問的跨域問題
 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {  
  
    @Override  
    public void addCorsMappings(CorsRegistry registry) {  
        
        registry.addMapping("/**")  
                .allowedOrigins("*")    //允許所有前端站點調用
                .allowCredentials(true)  
                .allowedMethods("GET", "POST", "DELETE", "PUT")  
                .maxAge(1728000);  
    }  
}

原來發起Ajax跨域請求后,事先會對目標站點進行一次詢問,是否允許訪問,允許后,才會發起真實的請求(參考:構建public APIs與CORSHTTP訪問控制(CORS) ),上述java代碼正是在返回的信息里設置其允許訪問的意思。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM