請求行(方法,URL,版本號)
方法:
描述了這次請求的目的。
常見方法:
GET:從服務器拿一個東西過來(讀操作)
POST:往服務器放一個東西去(寫操作)
兩個典型的使用POST的場景:1.登錄? ? ? ? 2.上傳
從使用習慣上,GET通常沒有body,POST通常有body,
GET會把需要給服務器補充的信息放到query string中(url)
POST會把這些信息放到body中,body中可以放任意格式的數據,前后端約定好即可(json是非常常用的格式)
GET與POST的區別
首先,GET與POST本質上沒有區別。
? ? ? ? 使用POST的場景可以替換成GET,反之亦然 => 取決于代碼的寫法,尤其是服務器和客戶端都是自己實現的場景。但是部分瀏覽器/服務器某些情況下GET和POST不能完美替換,大部分情況下相互替換問題不大。
? ? ? ? 但是GET和POST在使用情況下還是有區別的:
1.GET習慣于把數據放在url的query string中,POST習慣于放在body中。
GET可以把數據放在body中 => 有的瀏覽器/服務器不支持。
POST也可放在query string中 => 對于絕大多數瀏覽器/服務器都適用。
2.語義上的區別,標準文檔中,GET的語義用來獲取數據,POST的語義是用來提交數據。
實際應用中并不一定按照上述要求。
3.關于冪等性,標準文檔中,建議GET請求實現成冪等的,POST則無要求。
每次輸入的內容一定,輸出的結果也一定,稱為冪等。
每次輸入的內容一定,輸出的結果不一定,不是冪等。
如果一個操作本身是冪等的,此時就可以進行緩存了
4.GET請求可以被瀏覽器收藏,POST不可以。
其他方法:
1.PUT與POST相似,只是具有冪等性,一般用于更新。
2.DELETE刪除服務器指定資源
3.OPTIONS返回服務器所支持的請求方法。
4.HEAD類似于GET,只不過響應體不返回,只返回響應頭。
5.TRACE回顯服務器收到的請求,測試的時候會用到。
6.CONNECT預留,暫無使用。
URL
用于描述一個網絡上的資源位置。
一個完整的URL結構:
協議方案名+登錄信息(認證)+服務器地址+服務器端口+帶有層次的文件地址+查詢字符串+片段標識符
登錄信息(認證):寫在這里不太安全,現在都是通過單獨的登錄頁面來完成身份驗證的。
服務器地址+服務器端口:這里的域名也可以是ip地址,后面帶有端口號,瀏覽器就會自動給一個默認的端口。http:80;? ?https:443.
帶有層次的文件地址:這里可能會對應一個真實的硬盤文件,也可能對應一個虛擬的文件。
網絡上的資源位置:1)通過ip地址知道服務器在哪? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)通過端口號知道程序是哪個? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3)通過路徑知道是訪問哪個資源
查詢字符串:是客戶端給服務器傳遞信息的重要途徑,按照鍵值對的方式來組織的。針對請求的內容做的補充說明。
片段標識符:用來標識當前頁面的某個部分,通過不同的片段標識可以完成網頁內跳轉。