HTTP請求 的相關事宜

HTTP請求

HTTP請求由三部分組成:html

  • 請求行:包含請求方法、地址和HTTP的協議版本
  • 消息報頭:包含一系列的鍵值對
  • 請求正文(可選):和消息報頭之間有一個空行

信息報頭中的主要信息有數據庫

  • Host 是請求報頭域,用於指定被請求資源的 Internet 主機和端口號,它一般從 HTTP URL 中提取出來;
  • Connection 表示鏈接狀態,keep-alive 表示該鏈接是持久連(persistent connection),即 TCP 鏈接默認不關閉,能夠被多個請求複用,若是客戶端和服務器發現對方有一段時間沒有活動,就能夠主動關閉鏈接;
  • Cache-Control 用於指定緩存指令,它的值有 no-cache, no-store, max-age 等,max-age=秒錶示資源在本地緩存多少秒;
  • User-Agent 用於標識請求者的一些信息,好比瀏覽器類型和版本,操做系統等; Accept
    用於指定客戶端但願接受哪些類型的信息,好比 text/html, image/gif 等;
  • Accept-Encoding 用於指定可接受的內容編碼;
  • Accept-Language 用於指定可接受的天然語言;
  • Cookie 用於維護狀態,可作用戶認證,服務器檢驗等,它是瀏覽器儲存在用戶電腦上的文本片斷;

HTTP的請求方式

HTTP請求方式一般有幾種方式瀏覽器

  • GET(SELECT):
    從服務器取出資源(一項或多項),從服務器獲取指定(請求地址)的資源信息,它一般只用於讀取數據,就像數據庫查詢同樣,不會對資源進行修改
  • POST(CREATE):在服務器新建一個資源。向指定資源提交數據(好比提交表單,上傳文件),請求服務器進行處理。數據被包含在請求正文中,這個請求可能會建立新的資源,或者更新現有的資源
  • PUT(UPDATE): 在服務器更新資源(客戶端提供改變後的完整資源)。經過指定資源的惟一標識(在服務器上的具體存放位置),請求服務器建立或更新資源。
  • PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
  • DELETE(DELETE):從服務器刪除資源。
  • HEAD:獲取資源的元數據
  • OPTIONS:獲取信息,關於資源的哪些屬性是客戶端能夠改變的。

GET和POST的區別:

  1. get的數據在url上,post在request body上
  2. get只能進行url編碼,post有多種編碼方式
  3. get是tcp/ip一次,post是兩次
  4. 對get的參數有字符限制,而post沒有(瀏覽器對URL的長度有限制,因此GET請求不能代替POST請求發送大量數據)
  5. get請求會被瀏覽器緩存,可是post不會,除非手動設置
  6. 當瀏覽器回退時,get是沒有影響的,可是post會再次提交請求
  7. 對參數的數據類型,get只能是ASCII字符,可是post沒有限制
  8. 對於第三點中的:get只產生一個TCP數據包,post是兩個數據包。get請求中會把header和data一併發送,可是post會先發送header,瀏覽器響應100 continue以後,再發送data。
  9. GET請求是冪等的

舉個例子:
GET只須要汽車跑一趟就能把貨送到,而POST要跑兩趟。第一趟先去和服務器打個招呼「hi,我等下要送一批貨,大家打開門迎接我」,而後再回頭把貨送過去。緩存

由於POST須要兩步,時間上消耗的要多一點,看起來GET比POST更有效,可是不能隨便改變兩種請求方式
1.get和post都有本身的語義,不能隨便混用
2.網絡環境好的時候,發一次包的時間和發兩次寶的時間基本能夠忽略。可是在網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢
3.並非全部瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。安全

HTTP特色

  • 客戶端/服務端模式
  • 簡單快速:客戶端向服務器請求服務時,經過傳送請求方式、請求地址和數據體(可選)便可
  • 靈活:容許傳輸任意類型的數據對象,經過Content-Type標識
  • 無狀態:對事物處理沒有記憶能力

小結

  • HTTP 是在網絡上傳輸 HTML 的協議,用於瀏覽器和服務器的通訊,默認使用 80 端口。
  • URL 地址用於定位資源,HTTP 中的 GET, POST, PUT, DELETE 用於操做資源,好比查詢,增長,更新等
  • GET, PUT, DELETE 是冪等的,POST 是不冪等的。
  • POST VS PUT服務器

    - 使用 PUT 建立資源須要提供資源的惟一標識(具體存放位置),POST 不須要,POST 的數據存放位置由服務器本身決定
    
    - 使用 PUT 更新某一資源,須要更新資源的所有屬性;而使用 POST,能夠更新所有或一部分值
    
    - POST 是不冪等的,PUT 是冪等的,這是一個很重要的區別
  • GET 可提交的數據量受到 URL 長度的限制,HTTP 協議規範沒有對 URL 長度進行限制,這個限制是特定的瀏覽器及服務器對它的限制。
  • 理論上講,POST 是沒有大小限制的,HTTP 協議規範也沒有進行大小限制,出於安全考慮,服務器軟件在實現時會作必定限制

    參考連接:網絡

99%的人都理解錯了HTTP中GET與POST的區別併發

相關文章
相關標籤/搜索