為什么意氣風發的少年,總是聽不進去別人的勸解。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????? ? ? ? ???????? ? ? ? ? ? ? ? ----------陳長生.
??主頁:陳長生.-CSDN博客?
📕上一篇:JAVA EE_網絡原理_數據鏈路層-CSDN博客
1.HTTP
1.1.HTTP是什么
? ? ? ? HTTP的中文名為超文本傳輸協議,是一種常用的應用層協議
1.2.HTTP工作過程
2.HTTP協議格式
? ? ? ? HTTP是一種文本協議的格式,我們可以通過一些抓包軟件來查詢響應的請求和響應信息,例如Fibble
2.1.抓包工具Fibbler
? ? ? ? 可以把Fibbler理解為一個代理,他可以幫客戶端進行操作。
舉個栗子:
? ? ? ?假設有一個辣條工廠,這給廠做了很多辣條,當時單單靠老板自己賣不完,于是他找到了張三,李四,王五等人來幫他出售,這些人就可以稱為代理,也就是正向代理。
???????于此同時,購買的人需要買這些辣條,但是他們不想自己買,找了人來替買,,這些被找來的人也可以稱為代理,也就是反向代理。
2.1.1.下載地址
Web Debugging Proxy and Troubleshooting Tools | Fiddler
2.1.2.配置環境
由于大部分網站都是https,但是fibbler中默認沒顯示https內容,所有我們需要手動勾選一下。
2.2.如何使用
2.2.1.刪除
點擊想要刪除的包信息,在點擊鍵盤上的DEL
2.2.2.查看請求/響應信息
點擊想要查看的包,在右邊尋找ROW屬性值,上面一個就代表包的請求信息,而下面的就為包的請求信息
我們可以點擊右下角的View in Notepad 查看文本內容的請求/響應內容
2.3.查看請求/響應內容
2.3.1.請求內容
- 第一行為請求行
- 從第二行開始到空一行的位置為請求報頭
- 空行代表請求頭結束
- 空行下面如果有內容那么就是請求正文(有的請求有,有的請求沒有)
2.3.2.響應內容
- 第一行為響應行
- 從第二行開始到空一行的位置為響應報頭
- 空行代表響應頭結束
- 空行下面內容為響應正文
3.HTTP請求
3.1.URL
URL中最重要的為IP,端口號,路徑,查詢字符串。
????????一般我們用網址來查找網頁的時候,只需要輸入www.xxxx.com(例如百度:www.baudu.com)即可了,那么上面的一串URL怎么還需要那么多屬性,其實是被省略掉了。
- 協議:可以省略,默認下URL前面都會加個http
- 登錄信息:可以省略,這一個值是運用在幾十年前的,現在已經不在URL中顯示了
- 端口號:可以省略,如果沒有給端口號賦值的話,會默認給80端口號,如果是https的話會給443端口號
- 帶層次的文件路徑:可以省略
- 查詢字符串:可以省略
- 片段標識符:可以省略
3.1.1.鍵值對
????????在上面一串URL中,問號后面的查詢字符串那段可以稱為鍵值對,鍵值對是由程序員自己定義的,意思一般只有自己懂。
以百度為例,紅色框中的內容都為鍵值對
3.2.GTE
表示獲取數據,位于請求行的首位
3.2.1.出現情況
- 直接在瀏覽器輸入URL連接
- 點擊超文本傳輸連接
- 加載圖片
3.2.2.特點
- 一般沒有body內容
- 要想傳輸數據要通過query string
3.3.POST
表示上傳數據,位于請求行的首位
3.3.1.出現情況
- 用戶登錄
- 上傳資源
3.2.2.特點
- 有body,一般傳輸數據直接使用body
3.4.GET與POST
3.4.1.區別
- GET用于獲取,POST用于上傳
- GET一般沒有body,要想傳輸數據需要通過query string
- POST直接通過body傳輸
3.4.2.判別網絡流言
- 1流言:POST比GET更安全,原因是POST的內容是在body里,而GET的內容是在URL上;
- 1解析:錯誤,談到安全那肯定得想到加密,如果POST和GET的內容都沒有加密,那么黑客通過抓包,不管是POST還是GET,都可以獲取到其中的信息。
- ---------------------------------------------------------------------------------------------------------------------------
- 2流言:POST請求的數據量比GET請求的數據量大
- 2解析:錯誤,這是在很早之前的瀏覽器上的限制了,當時的技術并不發達,傳輸的自然就少了,隨著技術的不斷更新換代,這種說法早已被淘汰了,而且http中并沒有限制請求數據的大小。
- ---------------------------------------------------------------------------------------------------------------------------
- 3流言:GET官方建議冪相等,POST則沒有
- 3解析:差不多是對的,官方建議是建議,但是并沒有強制實施,所以程序員可以不遵守該規則。
- 冪相等:請求一定,響應一定,假設申請一個百度的瀏覽器,那么返回的界面也是百度。?
3.5.請求報頭
以下是一些常見的報頭類型
3.5.1.Host
????????表示當前請求報頭的域名和端口號
3.5.2.Content-Length
????????表示當前請求正文的長度(單位:字節)
3.5.3.User-Agent
????????表示當前客戶端是什么類型(爬蟲/瀏覽器/客戶端)
????????也可以根據當前使用的機子(PC端/手機端)顯示合適的頁面
3.5.4.content-type
????????表示當前的數據格式
3.5.5.Referer
????????表示當前的請求數據是有哪個網址跳轉的
3.5.6.Cookie
以鍵值對的形式表示(使用“;”分割多個鍵值對,“=”分割鍵和值)
cookie本質上是瀏覽器在本地存儲數據的一種形式
????????眾所周知,在瀏覽器中向服務器訪問是有風險的,但是瀏覽器會提供一個方案,那就是cookie,cookie中的內容,其實是服務器給瀏覽器的,瀏覽器會把cookie保存在本地硬盤上,為了安全,不允許網站隨意訪問硬盤,而是只是按照“鍵值對”方式來存儲簡單數據。
? ? ? ? cookie的作用就是保存一些不怎么重要的,但是有用的信息,例如“上次訪問時間”,同時它也是一種保護用戶身份的表示。
關于sessionld:
? ? ? ? sessionld是會話id,用來標識當前瀏覽器的身份。
舉個栗子:
? ? ? ? 長生是A公司廠庫的管理員,它有一張身份卡,這張身份卡中只記錄了長生這個人,長生可以用這張卡自由進出A公司廠庫的各個地方,但是他要是想去B公司廠庫里亂逛,那肯定是不行的。
? ? ? ? ?回過來,sessionld就代表著身份卡,記錄著長生這個人,至于他的身高年齡等各屬性是由cookid來存儲的。
4.HTTP請求
4.1.狀態碼
4.1.1.200開頭
表示響應正常
200:訪問成功
4.1.2.300開頭
重定向
指客戶端訪問一個URL時,它自動跳轉到另一個URL
301:永久重定向
例如:網站 http://aaa.com 的http升級,永久變為?https://aaa.com
302:臨時重定向
例如:登錄一些網站后,自動跳轉到個人主頁
4.1.3.400開頭
表示客戶端出現問題
404:客戶端要訪問的資源不存在
403:訪問被拒絕(沒有權限)
4.1.4.500開頭
表示服務端出現問題
500:服務器臨時故障
502:網關沒有從服務器上獲取有效響應
504:當處理的數據量過大時或網絡延時以及服務堵塞,就可能會造成超時異常
5.HTTPS
5.1.HTTPS是什么
? ? ? ? HTTPS是根據HTTP協議為基礎進行一個升級,使其更安全
5.2.加密是什么
? ? ? ? 明文:任何人都能看得懂的
? ? ? ? 密文:明文通過加密,得到密文
????????假設小美提前跟長生說,都會把你看到的單詞內容,從第二個單詞開始,把每個字母的前一個字母或數字都去掉再讀,過了一會小美寫好了小紙條(TI ULEOAV0E 9Yooku),讓旁邊的同學傳給了長生,傳紙條的同學都瞄了一眼內容,但是看不懂,傳到長生那的時候,長生按小美之前說的話開始解讀字條內容,解讀到(I LOVE You)~~? ?
? ? ? ? 上訴中,小美跟長生將的話就為密鑰,而小美所做的就為加密,其他人都看不懂,只有她和長生能看的懂。? ?
5.3.HTTPS的工作原理
????????由于再互聯網上明文傳輸信息很危險,所以數據都會進行加密傳輸
? ? ? ? 而加密的方式有很多,可以分為“對稱加密”和“非對稱加密”
5.3.1.對稱加密????????
? ? ? ? 對稱加密就是使用同一個密鑰進行傳輸
????????
使用密文傳輸,黑客即使截獲數據也不知道內容,但真的是這樣嗎?
????????如果有多臺客戶端與服務器進行數據傳輸,那么多臺的客戶端的密鑰肯定都是不相同的(如果都是相同的密鑰,如果黑客直到了其中一臺客戶端的密鑰,其他的客戶端也就都遭殃了),既然是不同的密鑰,那么服務器要維護那么多密鑰是很麻煩的,所以比較理想的做法就是在傳輸前告知服務器密鑰是什么
? ? ? ?但是,如果在傳輸前告知服務器本次傳輸的密鑰是什么,由于該條信息是明文傳輸的,所以黑客也能知道密鑰是什么,那之后傳輸的數據黑客也能通過密鑰破解,就跟明文傳輸沒什么區別的,所以https引用了“非對稱加密”?? ? ??
5.3.2.非對稱加密
? ? ? ? 非對稱加密就是使用兩把鑰,公鑰(pub1)和私鑰(pri1)
? ? ? ? 公鑰:所有人都拿的到,可以理解為鎖
? ? ? ? 私鑰:只有之間有,可以理解為鑰匙
? ? ? ? 客戶端通過公鑰pub1將密鑰進行加密傳輸給服務端,服務端根據私鑰進行解密得到密鑰,之后就使用對稱加密進行傳輸
為什么使用對稱加密:
????????因為非對稱加密的運算速度是非常慢的,于是就需要非對稱加密和對稱加密聯合使用
5.3.3.中間人攻擊
? ? ? ? 但是即使是使用了非對稱加密,黑客還是有辦法進行攻擊,就比如“中間人攻擊”
? ? ? ? 由于公鑰是服務端發布給客戶端的,所以黑客也能夠拿到,如果黑客截獲信息,篡改公鑰,客戶端就收到黑客的公鑰,使用黑客的公鑰進行數據傳輸,那么黑客就能根據自己的公鑰破解該條信息
5.3.4.證書
? ? ? ? 為了防止這種“中間人攻擊”的出現,于是https就引用了證書
? ? ? ? 證書是在計算機出廠的時候就在操作系統里的,里面有一系列的信息
? ? ? ? 證書的有效期
? ? ? ? 證書的所有者
? ? ? ? 證書對應服務器的地址/域名
? ? ? ? 數字簽名
? ? ? ? 開啟一段會話的時候,服務器會向公證機構申請證書,證書中的各種信息就會以字符串的形式表示出來,當數據發送到客戶端的時候,客戶端就會判斷該證書是否為真。
5.3.5.數字簽名? ? ?
? ? ? ? 公證機構發布證書后,會對該證書生成校驗和
? ? ? ? 公證機構會拿著自己生成的非對稱密鑰對(pbu2/pri2),使用其中的私鑰pri3對校驗和進行加密,就得到了數字簽名
數字簽名的驗證:
? ? ? ? 客戶端拿到證書后,會對該證書進行校驗和計算,拿到check1,然后再時候公證機構的pub2對證書中的數字簽名進行解密,得到check2,如果相等,則信任該信息,如果黑客再其中篡改了證書中的內容,則不會相等,瀏覽器就會對用戶進行提示“該網站存在風險”
黑客是否能通過其他操作進行攻擊:
1>能否篡改公鑰
答:不能,一旦篡改了,check1和check2就對應不上
2>能否直接做一個證書
答:不能,證書中包含了服務器的地址/漁民,瀏覽器很容易識別出來
3>能否在篡改公鑰的同時,將數字簽名也改了
答:不能,數字簽名是通過私鑰加密的,黑客拿不到
4>客戶端如何拿到公證機構的公鑰,黑客是否能偽造公證機構的公鑰
答:公證機構的公鑰不是從網絡上獲得的,而是內置在操作系統里,所以黑客是偽造不了的