HTTP簡(jiǎn)介

主要內(nèi)容:

  • Web客戶端與服務(wù)端是如何通信的
  • HTTP報(bào)文格式
  • 底層TCP網(wǎng)絡(luò)傳輸

1.1 Web客戶端和服務(wù)端

Web資源都是存儲(chǔ)在Web服務(wù)器上的,因?yàn)閃eb服務(wù)器使用HTTP通信,以此也成為HTTP服務(wù)器。HTTP客戶端發(fā)出HTTP請(qǐng)求,服務(wù)端會(huì)根據(jù)客戶端傳輸?shù)臄?shù)據(jù),作出HTTP響應(yīng)發(fā)送請(qǐng)求的數(shù)據(jù)。如圖 1-1 所示,HTTP客戶端和HTTP服務(wù)端工作原理:


image.png
  • Web服務(wù)器是Web資源的倉(cāng)庫(kù),資源包含任意內(nèi)容:文本文件、HTML文檔、Word文件、圖片、視頻等。但是資源不一定非得是像前面提高的靜態(tài)文件,也可以是根據(jù)Web應(yīng)用程序生成的動(dòng)態(tài)內(nèi)容,比如數(shù)據(jù)庫(kù)中里的數(shù)據(jù)。
  • Web客戶端,瀏覽器是一種我們經(jīng)常使用到的Web客戶端,其中還可以是手機(jī)原生應(yīng)用、小程序等。也可以說(shuō)能實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的程序都可以是Web客戶端。

1.2 URI

每一個(gè)Web服務(wù)器資源都有一個(gè)名字,這樣客戶端才可以說(shuō)明它想要的是什么資源。服務(wù)器資源名稱被稱為統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifier, URI)。

  • URI的一般格式:
<方案名稱>:<分層部分>[? <查詢參數(shù)>] [# <片段>]

統(tǒng)一資源定位符(URL)是資源標(biāo)識(shí)符最常見的形式。如圖 1-2 為URL實(shí)例:

image.png

1.3 HTTP報(bào)文

HTTP是一種請(qǐng)求-響應(yīng)協(xié)議,HTTP報(bào)文是由一行一行的簡(jiǎn)單字符串組成的,都是純文本,易讀。HTTP報(bào)文格式:

  • 起始行
    報(bào)文的第一行,在請(qǐng)求報(bào)文中用來(lái)說(shuō)明要做什么,在響應(yīng)報(bào)文中說(shuō)明出現(xiàn)了什么。
  • 首部字段
    起始行后面有零個(gè)或者多個(gè)首部字段。每個(gè)字段都包括一個(gè)名字和值。兩者之間用冒號(hào)(:)分隔。首部以空行結(jié)束。
  • 主體
    空行之后就是可選的報(bào)文主體,其中包含了所有類型的數(shù)據(jù)。

HTTP報(bào)文實(shí)例:

  • 請(qǐng)求報(bào)文
GET /index.html HTTP/1.0                       起始行
Accept: text/*                                 首部
Accept-Language: en, fr
  • 響應(yīng)報(bào)文
HTTP/1.0 200 OK                                  起始行
Content-type: text/plain                         首部
Content-length: 19

Hi, I am index                                   主體

1.4 事務(wù)

1.4.1 HTTP請(qǐng)求方法

請(qǐng)求方法是起始行中的第一個(gè)單詞,指明了客戶端要對(duì)資源進(jìn)行的操作。
常見的HTTP方法:

  • GET:命令服務(wù)器返回指定資源
  • POST:命令服務(wù)器將報(bào)文主體中的數(shù)據(jù)傳遞給URI指定的資源。
  • PUT:命令服務(wù)器將報(bào)文主體中的數(shù)據(jù)設(shè)置為URI指定的資源。
  • DELETE:命令服務(wù)器刪除URI指定資源

1.4.2 HTTP響應(yīng)

HTTP響應(yīng)報(bào)文是對(duì)HTTP請(qǐng)求報(bào)文的回復(fù)。跟HTTP請(qǐng)求報(bào)文一樣,也是一些列的文本組成。
狀態(tài)碼:

  • 1xx:情報(bào)狀態(tài)碼。
  • 2xx: 成功狀態(tài)碼。
  • 3xx:重定向狀態(tài)碼。
  • 4xx:客戶端錯(cuò)誤狀態(tài)碼。
  • 5xx:服務(wù)端錯(cuò)誤狀態(tài)碼。

一個(gè)Telnet實(shí)例

GET /index.html HTTP/1.1 

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 14615
Content-Type: text/html
Date: Mon, 19 Aug 2019 08:57:08 GMT
Etag: "5d54da0d-3917"
Last-Modified: Thu, 15 Aug 2019 04:05:33 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=668FD107459E334256837E510A760274:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=668FD107459E334256837E510A760274; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1566205028; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1

<!DOCTYPE html><!--STATUS OK-->
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <link rel="dns-prefetch" />
    <title>百度一下,你就知道</title>
    <link  rel="stylesheet" type="text/css" />
    <!--[if lte IE 8]><style index="index" >#content{height:480px\9}#m{top:260px\9}</style><![endif]-->
    <!--[if IE 8]><style index="index" >#u1 a.mnav,#u1 a.mnav:visited{font-family:simsun}</style><![endif]-->
    <script>var hashMatch = document.location.href.match(/#+(.*wd=[^&].+)/);if (hashMatch && hashMatch[0] && hashMatch[1]) {document.location.replace("http://"+location.host+"/s?"+hashMatch[1]);}var ns_c = function(){};</script>
    <script>function h(obj){obj.style.behavior='url(#default#homepage)';var a = obj.setHomePage('//www.baidu.com/');}</script>
    <noscript><meta http-equiv="refresh" content="0; url=/baidu.html?from=noscript"/></noscript>
    <script>window._ASYNC_START=new Date().getTime();</script>
</head>

參考文獻(xiàn):

  • 《HTTP權(quán)威指南》
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬(wàn)維網(wǎng)(W...
    空口言_1d2e閱讀 427評(píng)論 0 0
  • 去2345面試的時(shí)候,說(shuō)到接口測(cè)試,結(jié)果什么都是糊弄過(guò)去了,面試官?zèng)]有當(dāng)面揭穿,把我趕出去已經(jīng)覺得是萬(wàn)幸的,回家就...
    留滬小廝閱讀 530評(píng)論 0 0
  • HTTP簡(jiǎn)介 HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用...
    一個(gè)_快樂的人閱讀 335評(píng)論 0 0
  • HTTP簡(jiǎn)介 HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用...
    Carl_TSNE閱讀 641評(píng)論 0 0
  • HTTP簡(jiǎn)介 HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用...
    lhg_serven閱讀 283評(píng)論 0 0

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