HTTP學(xué)習(xí)筆記

HTTP

  • HyperText Transfer Portocol 超文本傳輸協(xié)議
    • 超文本:在電腦中,顯示的含有可以指向其他文本鏈接的文本

HTTP的工作方式

  • 瀏覽器-->發(fā)送請求-->服務(wù)器
    GET/HTTP/1.1
    Host:····.com

  • 服務(wù)器-->響應(yīng)-->瀏覽器
    HTTP/1.1 200 OK
    Server:nginx/1.13.1
    Date:Sun,0,...

URL--->HTTP報(bào)文

  • 示例:http://space.bilibili.comsp/56285643
    https: 協(xié)議類型
    space.bilibili.com:服務(wù)器地址
    56285643: 路徑
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  • GET/56285643 HTTP/1.1
    Host:space.bilibili.comsp
  • 報(bào)文格式:Request
      GET/Users HTTP?1.1 //請求行
      Host:api.githu.com                 //headers    
      Content-Type: text/plain           //headers    
      Content-Length:243                //headers   
      ...                                       //body
    
  • 報(bào)文格式:Response
HTTP/1.1 200 OK //狀態(tài)行
//請求頭
Content-type:application/json;charset=UTF-8 //headers
Cache-control:public,max-age=60,S-maxage=60
vary:Accept,Accept-Encoding
etag:w/“02eec5b33460”
Content-encoding:g-zip
//Body
[{
    .......
}]

Request Methods

  • Get
    獲取資源,無Body
  • Post
    增加或者修改資源;Body
  • Put
    修改資源;有Body
  • DELETE
    刪除資源;無Body
  • HEAD
    獲取信息;如下載文件的大小;服務(wù)器不返回Body
    Get/Put/DELETE具有冪等性

Status Code 狀態(tài)碼

  • 1xx: 臨時(shí)性消息
    101:支持HTTP2.0
    100:未完成
  • 2XX:成功
  • 3XX:重定向
    301:永久遷移
    302:臨時(shí)遷移
    304:內(nèi)容無改變
  • 4XX:客戶端錯(cuò)誤
  • 5XX:服務(wù)器錯(cuò)誤

Header 請求頭

  • 作用:HTTP消息的元數(shù)據(jù)(metadata)

    • Host:服務(wù)器的主機(jī)地址 虛擬主機(jī)
    • Content-Type/Content-Length: Body的類型/長度
      • Content-Length:內(nèi)容的長度(字節(jié))
      • Content-Type:
        • text/html:HTML內(nèi)容,用于瀏覽器頁面響應(yīng)
        • application/x-www-form-urlencoded:普通表單
        • encoded:URL模式
    • multipart/form-data:多部分形式;包含二進(jìn)制的多內(nèi)容
    • application/json:json形式,用于Web Api的響應(yīng)或者Post/Put請求
    • image/jpeg/application/zip...:單文件,用于Web API響應(yīng)或者put/post請求

    Chunked Transfer Encoding

  • Transfer-Encoding:chunked
    表示Body長度無法確定,Content-Length不能使用
    Body格式:
    <length>
    <data1>
    <length2>
    <date2>
    ......
    0
    
    

0加換行

最后傳輸0表示內(nèi)容結(jié)束

  • Location:重定向的目標(biāo)URL
  • User-Agent:用戶代理
  • Range/Accept-Range:指定Body內(nèi)容范圍
  • Cookie/Set-Cookie:發(fā)送/設(shè)置 Cookie
  • Authorization:授權(quán)信息
  • Accept:客戶端可接受的數(shù)據(jù)類型:如text/html
  • Accept-charset:客戶端接收的字符集:如 UTF-8
  • Accept-Encoding:客戶端接收的壓縮類型編碼。如gzip
  • Conetent-Encoding:壓縮類型:如gzip

Cache 緩存

  • Cache和Butter的區(qū)別?
  • Cache-Control:
    • no-cache: 緩存,使用前詢問
    • no-store:不緩存
    • max-age:指定日期
  • Last-Modified:
    • If-Modified-since
  • ETag: If-None-Match
  • Cache-Control:private/public 個(gè)性信息/公共信息

REST

  • 什么是REST
    一種架構(gòu)風(fēng)格對HTTP加以限制
  • Sever-Client architecture CS架構(gòu)
  • StateLessness 無狀態(tài)
  • Cacheablility 可緩存
  • Layered System 分層的服務(wù)器集群對客戶端透明
  • Code on demand 服務(wù)器返回包含可執(zhí)行代碼
  • Uniform interface
    • Resource identication in requests
    • Resource manipulation through representation
    • self-descriptive messages
    • Hypermedia as engine of application state(HATEOAS)

RESTFUL HTTP

  • 正確的使用Http

編碼,加密,Hash

加密

  • 對稱加密
    • 原理:使用密鑰和加密算法對數(shù)據(jù)進(jìn)行轉(zhuǎn)換,得到的無意義的數(shù)據(jù)即為密文。使用密鑰和解密算法對密文進(jìn)行逆向轉(zhuǎn)換,得到原數(shù)據(jù)。
    • 經(jīng)典算法:AES DES
  • 非對稱加密
    • 原理使用公鑰對數(shù)據(jù)進(jìn)行加密得到密文,使用私鑰對數(shù)據(jù)解密得到原數(shù)據(jù)
    • 經(jīng)典算法:RSA DSA
    • 衍生用途:數(shù)字簽名
      原數(shù)據(jù)---加密算法+加密密鑰===>密文---加密算法+解密密鑰===>原數(shù)據(jù)
  • 密鑰(key)
    • 場景:用于加密和解密
    • 目的:保證數(shù)據(jù)被人截取時(shí)不被人讀懂
    • 焦點(diǎn):數(shù)據(jù)
  • 密碼(pasword)
    • 場景:用戶進(jìn)入網(wǎng)站或者游戲的身份驗(yàn)證
    • 目的:數(shù)據(jù)提供方或者應(yīng)用服務(wù)方對賬戶擁有者的數(shù)據(jù)的保護(hù),保證你是你的時(shí)候提供權(quán)限
    • 焦點(diǎn):身份

Base64

  • 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為64個(gè)字符組成的字符串的編碼算法
  • 用途:讓原數(shù)據(jù)擁有字符串所擁有的特性,如可以放在URL中傳播,可以保存到文本文件,可以通過普通聊天軟件進(jìn)行文本傳輸。
  • 可以將人眼可讀的字符串變?yōu)樽x不懂的字符串,降低窺視危險(xiǎn)

URL Encoding

壓縮和解壓縮

  • 壓縮:把數(shù)據(jù)換一種方式來存儲,減少存儲空間

  • 解壓縮:把壓縮后的數(shù)據(jù)還原為原先的形式,以便使用

  • 常見壓縮算法:DEFLATE,JPEG,MP3

  • 壓縮屬于編碼嗎?

    • 編碼五官方定義
    • 壓縮屬于編碼
  • 媒體數(shù)據(jù)的編碼解碼

    • 圖片的編碼:把圖像數(shù)據(jù)寫成JPG,PNG,等文件的編碼格式
    • 圖片的解碼:把JPG,PNG等文件的數(shù)據(jù)解析為標(biāo)準(zhǔn)的圖像數(shù)據(jù)

    序列化

    • 把數(shù)據(jù)對象(一般為內(nèi)存中的,例如JVM對象)轉(zhuǎn)換為字節(jié)序列的過程
    • 目的:讓內(nèi)存中的對象可以被存儲和傳輸

Hash

  • 把任意數(shù)據(jù)轉(zhuǎn)化為指定大小范圍(通常很小的計(jì)算)
  • 作用:摘要,數(shù)字指紋
  • 經(jīng)典算法:MD5,SHA1,SH256等等
  • 實(shí)際用途:數(shù)據(jù)完整性驗(yàn)證,快速查找:hashCode()和HashMap()

登錄和授權(quán)

  • Cookie
  • Authorization

Cookie

  • 起源:購物車

  • 工作機(jī)制:

    1. 客戶端----->服務(wù)器
      Post/cart HTTP/1.1
      Host:shop.com
      Cookie:cart="apple=1 " banana=1
    2. 服務(wù)器---->客戶端
      HTTP/1.1 200 ok
      set-Cookie:Cart=”apple=1&banana=1“
    3. 客戶端
      shop.com:
      cart:"apple=1&banana=1"
  • Cookie的作用:

    • 會話管理:購物車,登錄狀態(tài)等等
    • 使用Cookie管理登錄狀態(tài)
    • 個(gè)性化
    • 分析用戶行為
  • Xss(cross-site scrpting):HTTP only 跨站腳本攻擊

    • Set-Cookie:Sessionid=123;Http Only 使Cookie對本地腳本不可見
  • XSRF(cross-site request forgery ):Referer:跨站請求偽造
    利用之前登錄留下的Cookie實(shí)現(xiàn)無登錄轉(zhuǎn)賬

Authorization

  • Authorization: Basic<Username:passwor(base64)>
  • Authorization: Bearer<bearer token>
    • OAuth2
    • 微信登錄

TCP/IP協(xié)議簇

  • 一系列模型組成的網(wǎng)絡(luò)模型分層
  • 為什么要分層:因?yàn)榫W(wǎng)絡(luò)不穩(wěn)定
  • 具體分層:
    • 應(yīng)用層:HTTP,F(xiàn)TP,DNS
    • 傳輸層:TCP,UDP
    • 網(wǎng)絡(luò)層:IP
    • 數(shù)據(jù)鏈路層:以太網(wǎng),WIFI
  • TCP連接
    • 三次握手...
  • 長連接:
    • 實(shí)現(xiàn)方式:心跳
      在類小區(qū)網(wǎng)絡(luò)環(huán)境下,防止長時(shí)間不連接端口關(guān)閉

HTTPS

  • HTTP OVER SSL
  • SSL:Secure Socket Layer====>TLS:Transport Layer Secure
  • 定義:在HTTP下增加一個(gè)安全層,用于保障HTTP的加密傳輸
  • 本質(zhì):在客戶端和服務(wù)器之間協(xié)商出一套對稱密鑰,每次發(fā)送信息之間將內(nèi)容加密,收到之后在進(jìn)行解密,達(dá)到內(nèi)容加密傳輸

HTTP 連接

  1. 客戶端請求建立TLS連接
  2. 服務(wù)器發(fā)回證明
  3. 客戶端驗(yàn)證服務(wù)器證書
  4. 客戶端信任服務(wù)器之后,和服務(wù)器協(xié)商對稱密鑰
  5. 使用對稱密鑰開始通信

在Android中使用

  • 正常情況下,直接使用
  • 什么時(shí)候不行:
    • 用的自簽名證書(例如用于內(nèi)網(wǎng)的Https)
    • 證書信息補(bǔ)全,缺乏證書機(jī)構(gòu)信息
    • 手機(jī)操作系統(tǒng)較舊,沒有安裝新加入的根證書
  • 如何處理:
    • 手寫驗(yàn)證過程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Web 頁面的實(shí)現(xiàn) Web 基于 HTTP 協(xié)議通信 客戶端(Client)的 Web 瀏覽器從 Web 服務(wù)器端...
    毛圈閱讀 1,316評論 0 2
  • 網(wǎng)絡(luò)基礎(chǔ)知識 URL和URI URI(Uniform Resource Idenifier)統(tǒng)一資源標(biāo)識符。即由某...
    d9fc24a0c9a9閱讀 1,275評論 0 6
  • 五、與HTTP協(xié)作的web服務(wù)器 HTTP/1.1 規(guī)范允許一臺HTTP服務(wù)器搭建多個(gè)web站點(diǎn),即在相同IP地址...
    BeckJiang閱讀 614評論 0 2
  • HTTP初識 HTTP協(xié)議是超文本傳輸協(xié)議(Hyper Text Transfer Protocol)的縮寫,是用...
    THQ的簡書閱讀 869評論 0 1
  • 投射:1投射盧鋒會留9天贏錢打600萬業(yè)績!2投射執(zhí)到大客打3000分!3投射會有勁多大客點(diǎn)來爆數(shù)業(yè)績!感恩:1感...
    謝奕鋒閱讀 89評論 0 0

友情鏈接更多精彩內(nèi)容