發生跨域的時候,伺服器到底有沒有接收到請求?
背景:
大家好,我是 東東吖,一名前端工程師。今天,我發現前端技術交流群裡的小夥伴比較安靜,所以我丟了一個題目給大家討論。
對於這個問題,其實很簡單,但是大家作為前端工程師,沒有接觸過後端,所以難免會對這個問題不太瞭解。
口說無憑,實踐出真理。接下來,我們就對這個問題進行驗證,有助於大家理解深刻。
前提:
前提一:擁有一個客戶端專案。在此之前,我是作為一個前端工程師的身份給大家講解的,所以你自己要有建立前端專案的能力。當然,你也可以直接拉取我的github。
前提二:擁有一個後端伺服器。對於後端,我將用node作為後端伺服器,這篇文章可以幫助大家手把手搭建一個簡單的伺服器:從0到1學習Node.js系列教程(一):API介面初體驗,當然,你也可以直接拉取我的github。
如果你跨域問題不太瞭解,不知道怎麼解決跨域,可以先移步到我這篇文章: 跨域問題及前後端常見解決方案?
對於github拉取時網路超時問題,你可以通過修改host檔案來解決。 找到host資料夾,用寫字版開啟,把ip複製貼上到檔案末尾,儲存即可。
``` C:\Windows\System32\drivers\etc\HOSTS
http://github.com/140.82.1123 http://github.com
185.199.108.153 http://asset-cdn.github.com
199.232.69.194 http://github.global.ssl.fastly.net
185.199.108.133 http://githubusercontent.com
199.232.96.133 http://raw.githubusercontent.com
```
驗證:
通過上面的兩個大前提條件,你已經擁有了一個前端專案,也擁有了一個後端專案,你就可以來輕鬆驗證我剛剛提出的問題了。
首先,我們來將拉取前後端專案,下載依賴,啟動專案。 我們開啟前端專案,點選node選單欄,重新整理瀏覽器,就會發送一個get請求和post請求,並且請求成功了。
開啟我們的服務端,我們可以看見從前端專案發來的兩個請求,並接收到了引數。
此時是因為我們在伺服器端設定了跨域的程式碼,接下來,我們將註釋掉伺服器端解決跨域的程式碼,再次啟動伺服器端。
由於我們此時註釋掉了解決跨域的程式碼,那麼我們再去前端專案的node選單欄重新整理瀏覽器,就會發生跨域問題。
註釋程式碼之後,你還可能發生get請求依然沒有發生跨域,post請求發生了跨域,就像下面這樣。
這個時候是因為快取的原因,需要把快取禁用掉,把Disable cache 打上√。再次重新整理就會發現get請求和post請求都發生了跨域。
我們再來檢視後端伺服器的日誌。
我們會發現,伺服器是能接收到get請求,但是接收不到post請求,post請求只會接收到一個預檢請求,接收不到真正的http請求。
總結:
簡單請求,伺服器是能接收到請求的,也會返回響應,但是返回的時候,會被瀏覽器攔截;複雜請求,瀏覽器會先發一個預檢請求,去驗證伺服器是否允許跨域,如果允許跨越,才會發起真正的http請求,否則伺服器接收不到真正的http請求。
如果你對簡單請求、複雜請求(非簡單請求)、預檢請求等概念不瞭解,可移步到這篇文章: 面試官:說說你對 options 請求的理解
我是東東吖,一名前端工程師,關注我,帶你走進前端的世界。
- 東東吖帶你打通全棧,go-vue-react專案介紹
- 【vue進階之旅】如何自定義元件v-model,封裝屬於自己的元件庫?
- 【vue進階之旅】如何使用keep-alive做元件快取?
- 發生跨域的時候,伺服器到底有沒有接收到請求?
- vue進階之路:vue3.2-setup語法糖、組合式API、狀態庫Pinia歸納總結
- 跨域問題及前後端常見解決方案?
- 微信小程式如何分包?
- 前端效能優化,如何提高首屏載入速度?
- 專案中的配置檔案都是幹嘛的?
- 從0到1學習Node.js系列教程(第一篇):API介面初體驗
- 父子元件的生命週期執行流程是怎麼樣的呢?
- 1024程式設計師這天,我發現了掘金官方的一個bug。
- 元件通訊的8種方式,你搞清楚了嗎?
- 手把手教你利用XSS攻擊體驗一次黑客