前後端分離 跨域問題解決
跨域的實現原理
http 跨域請求後端服務的時候會在請求頭中帶上如下資訊
Origin: http://api.jijs.com
後端伺服器需要在http的響應頭中新增以下響應頭
Access-Control-Allow-Origin : http://api.jijs.com
接收到請求後,並驗證該站點是否支援跨域請求。
如果前端沒有收到該相應頭,則瀏覽器不允許跨域請求的。
跨域解決方案
跨域問題可以通過nginx或其它的反向代理軟體配置實現。
也可以使用node.js 通過後臺轉發請求來解決跨域問題。(後端請求是不存在跨域問題的)
開發專案解析跨域可以通過如下兩中方式解決。
1.程式碼中設定
this.response.addHeader("Access-Control-Allow-Origin", "*");
this.response.addHeader("Access-Control-Allow-Methods", "get, post, put, delete, options");
this.response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept");
this.response.addHeader("Access-Control-Allow-Credentials", "true");
配置Access-Control-Allow相關的響應的頭
2. 使用第三方包過濾器中設定
依賴的maven
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.6</version>
</dependency>
專案中web.xml中的配置如下:
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
支援cookies
響應頭中需要新增下面資訊
Access-Control-Allow-Credentials:true
Access-Control-Allow-Credentials
該欄位可選。它的值是一個布林值,表示是否允許傳送Cookie。預設情況下,Cookie不包括在CORS請求之中。設為true,即表示伺服器明確許可,Cookie可以包含在請求中,一起發給伺服器。這個值也只能設為true,如果伺服器不要瀏覽器傳送Cookie,刪除該欄位即可。
Access-Control-Allow-Origin:http://api.jijs.com
需要注意的是,如果要傳送Cookie,Access-Control-Allow-Origin就不能設為星號,必須指定明確的、與請求網頁一致的域名。同時,Cookie依然遵循同源政策,只有用伺服器域名設定的Cookie才會上傳,其他域名的Cookie並不會上傳,且(跨源)原網頁程式碼中的document.cookie也無法讀取伺服器域名下的Cookie。
想了解更多精彩內容請關注我的公眾號
相關文章
- 前後端分離解決跨域問題後端跨域
- 解決 Laravel 5.8 前後端分離跨域問題Laravel後端跨域
- 前後端分離解決session跨域丟失問題後端Session跨域
- 前後端分離專案,如何解決跨域問題?後端跨域
- springboot使用Filter解決前後端分離,產生的跨域問題Spring BootFilter後端跨域
- SpringBoot解決前後端跨域問題Spring Boot後端跨域
- 前後端分離,後端用springboot遇到的跨域問題後端Spring Boot跨域
- Vue+SpringBoot前後端分離中的跨域問題VueSpring Boot後端跨域
- 超簡單的前端跨域、前後端分離解決方案前端跨域後端
- SpringBoot 配置CORS處理前後端分離跨域配置無效問題解析Spring BootCORS後端跨域
- Spring Boot前後端分離專案Session問題解決Spring Boot後端Session
- LiveNode.js 超簡單的前端跨域、前後端分離解決方案Node.js前端跨域後端
- 前後端分離下的跨域CAS請求後端跨域
- 無需CORS,用nginx解決跨域問題,輕鬆實現低程式碼開發的前後端分離CORSNginx跨域後端
- SpringBoot 前後端動靜分離+叢集 遇到的第一個問題:跨域session共享Spring Boot後端跨域Session
- 前後分離實現中,後臺 Laravel 接收資料的跨域解決方案Laravel跨域
- Laravel+vue.js 前後端分離解決跨域後獲取資料庫使用者列表(五)LaravelVue.js後端跨域資料庫
- vue前後端分離解決每次請求session都會變的問題Vue後端Session
- 解決跨域問題跨域
- 搞懂:前端跨域問題JS解決跨域問題VUE代理解決跨域問題原理前端跨域JSVue
- java 後端 控制跨域問題Java後端跨域
- 前後端分離使用 Token 登入解決方案後端
- 網易NEI在面臨前後端分離問題,所提供的完整解決方案後端
- SignalR跨域問題解決SignalR跨域
- Flask解決跨域問題Flask跨域
- Java解決跨域問題Java跨域
- CROS 解決跨域問題ROS跨域
- cors解決跨域問題CORS跨域
- Luffy - 解決跨域問題跨域
- WebSocket跨域問題解決Web跨域
- 關於 vue Laravel5.5 前後段分離式開發介面跨域問題請教VueLaravel跨域
- cookie跨域共享 cookie二級域名共享 前後端分離專案共享cookieCookie跨域後端
- Nginx解決前端跨域問題 CORS跨域配置Nginx前端跨域CORS
- 深入跨域問題(3) – 利用 JSONP 解決跨域跨域JSON
- 深入跨域問題(3) - 利用 JSONP 解決跨域跨域JSON
- 深入跨域問題(2) - 利用 CORS 解決跨域跨域CORS
- 【手摸手,帶你搭建前後端分離商城系統】02 VUE-CLI 腳手架生成基本專案,axios配置請求、解決跨域問題後端VueiOS跨域
- thinkphp 5 跨域問題解決PHP跨域
- 跨域問題解決辦法跨域