# 跨域問題
平時被問到最多的問題還是關于跨域的,其實跨域問題真的不是一個很難解決的問題。這里我來簡單總結一下我推薦的幾種跨域解決方案。
我最推薦的也是我工作中在使用的方式就是:`cors`全稱為 Cross Origin Resource Sharing(跨域資源共享)。這種方案對于前端來說沒有什么工作量,和正常發送請求寫法上沒有任何區別,工作量基本都在后端這里。每一次請求,瀏覽器必須先以`OPTIONS`請求方式發送一個預請求(也不是所有請求都會發送 options,展開介紹[點我](https://panjiachen.github.io/awesome-bookmarks/blog/cs.html#cors)),通過預檢請求從而獲知服務器端對跨源請求支持的`HTTP`方法。在確認服務器允許該跨源請求的情況下,再以實際的`HTTP`請求方法發送那個真正的請求。推薦的原因是:只要第一次配好了,之后不管有多少接口和項目復用就可以了,一勞永逸的解決了跨域問題,而且不管是開發環境還是正式環境都能方便的使用。詳細[MDN 文檔](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)
但總有后端覺得麻煩不想這么搞,那純前端也是有解決方案的。
在`dev`開發模式下可以下使用 webpack 的`proxy`使用也是很方便,參照[文檔](https://doc.webpack-china.org/configuration/dev-server/#devserver-proxy)就會使用了,樓主一些個人項目使用的該方法。但這種方法在生產環境是不能使用的。在生產環境中需要使用`nginx`進行反向代理。不管是`proxy`和`nginx`的原理都是一樣的,通過搭建一個中轉服務器來轉發請求規避跨域的問題。
| 開發環境 | 生產環境 |
| --- | --- |
| cors | cors |
| proxy | nginx |
這里我只推薦這兩種方式跨域,其它的跨域方式都還有很多但都不推薦,真心主流的也就這兩種方式。****