观看麻豆影视文化有限公司-国产 高清 在线-国产 日韩 欧美 亚洲-国产 日韩 欧美 综合-日日夜夜免费精品视频-日日夜夜噜

e621(e621小馬)

  • 生活
  • 2023-04-26 14:15

文章將包含以下幾方面內容:

HTTP協議解讀與HTTP相關組件與HTTP相關協議HTTP組成HTTP協議優缺點HTTP協議解讀

HTTP是一種超文本傳輸協議(HypertextTransferProtocol),超文本傳輸協議可以進行文字分割:超文本(Hypertext)、傳輸(Transfer)、協議(Protocol),它們之間的關系如下:

分別對這三個名次做一個解釋:

超文本

兩臺電腦之間只能傳輸簡單文字,后面還想要傳輸圖片、音頻、視頻,甚至點擊文字或圖片能夠進行超鏈接的跳轉,那么文本的語義就被擴大了,這種語義擴大后的文本就被稱為超文本(Hypertext)。

傳輸

兩臺計算機之間會形成互聯關系進行通信,我們存儲的超文本會被解析成為二進制數據包,由傳輸載體(例如同軸電纜,***線,光纜)負責把二進制數據包由計算機終端傳輸到另一個終端的過程

協議

網絡協議就是網絡中(包括互聯網)傳遞、管理信息的一些規范

與HTTP相關組件

網絡設計者以分層(layer)的方式組織協議,每個協議屬于層次模型之一。每一層都是向它的上一層提供服務(service),即所謂的服務模型(servicemodel)。每個分層中所有的協議稱為協議棧(protocolstack)。因特網的協議棧由五個部分組成:物理層、鏈路層、網絡層、傳輸層和應用層。我們采用自上而下的***研究其原理,也就是應用層->物理層的方式(了解)。

應用層

應用層是網絡應用程序和網絡協議存放的分層,因特網的應用層包括許多協議。比如HTTP,電子郵件傳送協議SMTP、端系統文件上傳協議FTP、還有為我們進行域名解析的DNS協議

傳輸層

輸層在應用程序斷點之間傳送應用程序報文,在這一層主要有兩種傳輸協議TCP和UDP。

TCP是面向連接的,它能夠控制并確認報文是否到達,并提供了擁塞機制來控制網絡傳輸,因此當網絡擁塞時,會抑制其傳輸速率。

UDP協議向它的應用程序提供了無連接服務。它是不具備可靠性的,沒有流量控制,也沒有擁塞控制。我們把運輸層的分組稱為報文段(segment)

網絡層

網絡層負責將稱為數據報(datagram)的網絡分層從一臺主機移動到另一臺主機。網絡層一個非常重要的協議是IP協議,所有具有網絡層的因特網組件都必須運行IP協議。

鏈路層

為了將分組從一個節點(主機或路由器)運輸到另一個節點,網絡層必須依靠鏈路層提供服務。鏈路層的例子包括以太網、WiFi和電纜接入的DOCSIS協議,因為數據從源目的地傳送通常需要經過幾條鏈路,一個數據包可能被沿途不同的鏈路層協議處理,我們把鏈路層的分組稱為幀(frame)。

物理層

雖然鏈路層的作用是將幀從一個端系統運輸到另一個端系統,而物理層的作用是將幀中的一個個比特從一個節點運輸到另一個節點,,物理層的協議仍然使用鏈路層協議,這些協議與實際的物理傳輸介質有關,例如,以太網有很多物理層協議:關于雙絞銅線、關于同軸電纜、關于光纖等等。

五層網絡協議的示意圖如下:

與HTTP相關協議

HTTP屬于應用層的協議,需要其他層次協議的配合完成信息的交換,在完成一次HTTP請求和響應的過程中,需要以下協議的配合:

TCP/IP

TCP/IP我們一般稱之為協議簇,什么意思呢?就是TCP/IP協議簇中不僅僅只有TCP協議和IP協議,它是一系列網絡通信協議的統稱。而其中最核心的兩個協議就是TCP/IP協議,其他的還有UDP、ICMP、ARP等等,共同構成了一個復雜但有層次的協議棧。

TCP協議的全稱是Tran***issionControlProtocol的縮寫,意思是傳輸控制協議,HTTP使用TCP作為通信協議,這是因為TCP是一種可靠的協議,而可靠能保證數據不丟失。

IP協議的全稱是InternetProtocol的縮寫,它主要解決的是通信雙方尋址的問題。IP協議使用IP地址來標識互聯網上的每一臺計算機。

DNS

DNS的全稱是域名系統(DomainNameSystem,縮寫:DNS),它作為將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便地訪問互聯網。比如:www.google.com->193.XXX.XXX.XXX

URI/URL

可以通過輸入www.google.com地址來訪問谷歌的官網,輸入的地址格式必須要滿足URI的規范。

URI的全稱是(UniformResourceIdentifier),中文名稱是統一資源標識符,使用它就能夠唯一地標記互聯網上資源。

URL的全稱是(UniformResourceLocator),中文名稱是統一資源定位符,也就是我們俗稱的網址,它實際上是URI的一個子集。

HTTP報文起始行(startline):描述請求或響應的基本信息;頭部字段(header):使用key-value形式更詳細地說明報文;消息正文(entity):實際傳輸的數據,它不一定是純文本,可以是圖片、視頻等二進制數據。

起始行和頭部字段并成為請求頭或者響應頭,統稱為Header;消息正文也叫做實體,稱為body。HTTP協議規定每次發送的報文必須要有Header,但是可以沒有body,在header和body之間必須要有一個空行(CRLF)。

舉個例子:http://www.someSchool.edu/someDepartment/home.index請求的請求頭:

報文的起始行都是由三個字段組成:***、URL字段和HTTP版本字段。

HTTP請求***GET獲取資源,GET***用來請求訪問已被URI識別的資源。指定的資源經服務器端解析后返回響應內容。POST傳輸實體,使用POST傳輸實體信息,提交表格內容。PUT傳輸文件,PUT***用來傳輸文件。就像FTP協議的文件上傳一樣,要求在請求報文的主體中包含文件內容,然后保存到請求URI指定的位置。但是,鑒于HTTP的PUT***自身不帶驗證機制,任何人都可以上傳文件,存在安全性問題,因此一般的Web網站不使用該***。若配合Web應用程序的驗證機制,或架構設計采用REST(REpresentationalStateTransfer,表征狀態轉移)標準的同類Web網站,就可能會***使用PUT***。HEAD獲得響應首部,HEAD***和GET***一樣,只是不返回報文主體部分。用于確認URI的有效性及資源更新的日期時間等。DELETE刪除文件,DELETE***用來刪除文件,是與PUT相反的***。DELETE***按請求URI刪除指定的資源。OPTIONS詢問支持的***,OPTIONS***用來查詢針對請求URI指定的資源支持的***。TRACE追蹤路徑,TRACE***是讓Web服務器端將之前的請求通信環回給客戶端的***。CONNECT要求用隧道協議連接代理,CONNECT***要求在與代理服務器通信時建立隧道,實現用隧道協議進行TCP通信。主要使用SSL(SecureSocketsLayer,安全套接層)和TLS(TransportLayerSecurity,傳輸層安全)協議把通信內容加密后經網絡隧道傳輸。

一般最常用的***也就是GET***和POST***,其他***暫時了解即可。

HTTP請求URL

完整的域名解析一下URL:http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument

http://告訴瀏覽器使用何種協議。www.example.com是域名、主機,指示了需要向網絡上的哪一臺主機發起請求。也可以直接向主機的ip發起請求。端口兩個主機之間要發起TCP連接需要兩個條件,主機+端口,表示用于訪問Web服務器上資源的入口,如果訪問的該Web服務器使用HTTP協議的標準端口(HTTP為80,HTTPS為443)授予對其資源的訪問權限,則通常省略此部分。否則端口就是URI必須的部分。路徑/path/to/myfile.html是Web服務器上資源的路徑。以端口后面的第一個/開始,到?號之前結束,中間的每一個/都代表了層級(上下級)關系。查詢參數

?key1=value1&key2=value2是提供給Web服務器的額外參數。如果是GET請求,一般帶有請求URL參數,如果是POST請求,則不會在路徑后面直接加參數。

錨點#SomewhereInTheDocument是資源本身的某一部分的一個錨點。錨點代表資源內的一種“書簽”。請求頭部

比如http://www.someSchool.edu/someDepartment/home.index,來看一下它的請求頭部

Host:www.someschool.eduConnection:closeUser-agent:Mozilla/5.0Accept-language:fr復制代碼Host:表示的是對象所在的主機Connection:close表示的是瀏覽器需要告訴服務器使用的是非持久連接。它要求服務器在發送完響應的對象后就關閉連接。User-agent:這是請求頭用來告訴Web服務器,瀏覽器使用的類型是Mozilla/5.0,即Firefox瀏覽器。Accept-language告訴Web服務器,瀏覽器想要得到對象的法語版本。

HTTP的請求標頭分為四種:通用標頭、請求標頭、響應標頭和實體標頭

通用標頭

通用標頭主要有三個,分別是Date、Cache-Control和ConnectionDate

Date出現在請求標頭和響應標頭中,它的基本表示如下

Date:Wed,21Oct201507:28:00GMT復制代碼

Cache-Control

Cache-Control可以出現在請求標頭和響應標頭中,Cache-Control的種類比較多,雖然說這是一個通用標頭,但是又一些特性是請求標頭具有的,有一些是響應標頭才有的。主要大類有可緩存性、閾值性、重新驗證并重新加載和其他特性

Connection

Connection決定當前事務(一次三次握手和四次揮手)完成后,是否會關閉網絡連接。Connection有兩種,一種是持久性連接,即一次事務完成后不關閉網絡連接

Connection:keep-alive復制代碼復制代碼

另一種是非持久性連接,即一次事務完成后關閉網絡連接

Connection:close復制代碼實體標頭

實體標頭是描述消息正文內容的HTTP標頭。實體標頭用于HTTP請求和響應中。頭部Content-Length、Content-Language、Content-Encoding是實體頭。

Content-Length實體報頭指示實體主體的大小,以字節為單位,發送到接收方。Content-Language實體報頭描述了客戶端或者服務端能夠接受的語言,例如Content-Language:de-DEContent-Language:en-USContent-Language:de-DE,en-CA復制代碼復制代碼Content-Encoding這又是一個比較麻煩的屬性,這個實體報頭用來壓縮媒體類型。Content-Encoding指示對實體應用了何種編碼。常見的內容編碼有這幾種:gzip、compress、deflate、identity,這個屬性可以應用在請求報文和響應報文中Accept-Encoding:gzip,deflate//請求頭Content-Encoding:gzip//響應頭復制代碼請求標頭GET/home.htmlHTTP/1.1Host:developer.mozilla.orgUser-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10.9;rv:50.0)Gecko/20100101Firefox/50.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:en-US,en;q=0.5Accept-Encoding:gzip,deflate,brReferer:https://developer.mozilla.org/testpage.htmlConnection:keep-aliveUpgrade-Insecure-Requests:1If-Modified-Since:Mon,18Jul201602:36:04GMTIf-None-Match:"c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"Cache-Control:max-age=0復制代碼

Host

Host請求頭指明了服務器的域名,以及(可選的)服務器監聽的TCP端口號

Referer

HTTPReferer屬性是請求標頭的一部分,告訴服務器該網頁是從哪個頁面鏈接過來的

If-Modified-Since

HTTP的If-Modified-Since使其成為條件請求:

返回200,只有在給定日期的最后一次修改資源后,服務器才會以200狀態發送回請求的資源。如果請求從開始以來沒有被修改過,響應會返回304并且沒有任何響應體

If-Modified-Since通常會與If-None-Match搭配使用,If-Modified-Since用于確認代理或客戶端擁有的本地資源的有效性。獲取資源的更新日期時間,可通過確認首部字段Last-Modified來確定。

大白話說就是如果在Last-Modified之后更新了服務器資源,那么服務器會響應200,如果在Last-Modified之后沒有更新過資源,則返回304。

If-Modified-Since:Mon,18Jul201602:36:04GMT復制代碼復制代碼

If-None-Match

If-None-MatchHTTP請求標頭使請求成為條件請求。對于GET和HEAD***,僅當服務器沒有與給定資源匹配的ETag時,服務器才會以200狀態發送回請求的資源。對于其他***,僅當最終現有資源的ETag與列出的任何值都不匹配時,才會處理請求。

If-None-Match:"c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"復制代碼復制代碼內容協商

內容協商機制是指客戶端和服務器端就響應的資源內容進行交涉,然后提供給客戶端最為適合的資源。內容協商會以響應資源的語言、字符集、編碼方式等作為判斷的標準。

內容協商主要有以下3種類型:

服務器驅動協商(Server-drivenNegotiation)

這種協商方式是由服務器端進行內容協商。服務器端會根據請求首部字段進行自動處理

客戶端驅動協商(Agent-drivenNegotiation)

這種協商方式是由客戶端來進行內容協商。

透明協商(TransparentNegotiation)

是服務器驅動和客戶端驅動的結合體,是由服務器端和客戶端各自進行內容協商的一種***。

內容協商的分類有很多種,主要的幾種類型是Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。

Accept

接受請求HTTP標頭會通告客戶端其能夠理解的MIME類型

MIME:MIME(MultipurposeInternetMailExtensions)是描述消息內容類型的因特網標準。MIME消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據。復制代碼

文本文件:text/html、text/plain、text/css、application/xhtml+xml、application/xml

圖片文件:image/jpeg、image/gif、image/png

視頻文件:video/mpeg、video/quicktime

應用程序二進制文件:application/octet-stream、application/zip

比如,如果瀏覽器不支持PNG圖片的顯示,那Accept就不指定image/png,而指定可處理的image/gif和image/jpeg等圖片類型。

一般MIME類型也會和q這個屬性一起使用,q是什么?q表示的是權重,來看一個例子

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8復制代碼

若想要給顯示的媒體類型增加優先級,則使用q=來額外表示權重值,沒有顯示權重的時候默認值是1.0。

q

MIME

1.0

text/html

1.0

application/xhtml+xml

0.9

application/xml

0.8

*/*

Accept-Charset

accept-charset屬性規定服務器處理表單數據所接受的字符集。

accept-charset屬性允許您指定一系列字符集,服務器必須支持這些字符集,從而得以正確解釋表單中的數據。

Accept-Language

首部字段Accept-Language用來告知服務器用戶代理能夠處理的自然語言集(指中文或英文等),以及自然語言集的相對優先級。

Accept-Language:en-US,en;q=0.5復制代碼響應標頭

響應標頭是可以在HTTP響應中使用的HTTP標頭。并不是所有出現在響應中的標頭都是響應標頭。還有一些特殊的我們上面說過,有通用標頭和實體標頭也會出現在響應標頭中,比如Content-Length就是一個實體標頭,但是,在這種情況下,這些實體請求通常稱為響應頭。下面以一個例子為例和你探討一下響應頭

200OKAccess-Control-Allow-Origin:*Connection:Keep-AliveContent-Encoding:gzipContent-Type:text/html;charset=utf-8Date:Mon,18Jul201616:06:00GMTEtag:"c561c68d0ba92bbeb8b0f612a9199f722e3a621a"Keep-Alive:timeout=5,max=997Last-Modified:Mon,18Jul201602:36:04GMTServer:ApacheSet-Cookie:mykey=myvalue;expires=Mon,17-Jul-201716:06:00GMT;Max-Age=31449600;Path=/;secureTransfer-Encoding:chunkedVary:Cookie,Accept-Encodingx-frame-options:DENY復制代碼

響應狀態碼

以2xx為開頭的都表示請求成功響應。

狀態碼

含義

200

成功響應

204

請求處理成功,但是沒有資源可以返回

206

對資源某一部分進行響應,由Content-Range指定范圍的實體內容。

以3xx為開頭的都表示需要進行附加操作以完成請求

狀態碼

含義

301

永久性重定向,該狀態碼表示請求的資源已經重新分配URI,以后應該使用資源現有的URI

302

臨時性重定向。該狀態碼表示請求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。

303

該狀態碼表示由于請求對應的資源存在著另一個URI,應使用GET***定向獲取請求的資源。

304

該狀態碼表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但未滿足條件的情況。

307

臨時重定向。該狀態碼與302Found有著相同的含義。

以4xx的響應結果表明客戶端是發生錯誤的原因所在。

狀態碼

含義

400

該狀態碼表示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容后再次發送請求。

401

該狀態碼表示發送的請求需要有通過HTTP認證(BASIC認證、DIGEST認證)的認證信息。

403

該狀態碼表明對請求資源的訪問被服務器拒絕了。

404

該狀態碼表明服務器上無法找到請求的資源。

以5xx為開頭的響應標頭都表示服務器本身發生錯誤

狀態碼

含義

500

該狀態碼表明服務器端在執行請求時發生了錯誤。

503

該狀態碼表明服務器暫時處于超負載或正在進行停機維護,現在無法處理請求。

HTTP協議優缺點HTTP的優點簡單靈活易擴展

HTTP的協議比較簡單,它的主要組成就是header+body,頭部信息也是簡單的文本格式

HTTP協議又多了靈活和易擴展的優點。

HTTP協議里的請求***、URI、狀態碼、原因短語、頭字段等每一個核心組成要素都沒有被制定死,允許開發者任意定制、擴充或解釋,給予了瀏覽器和服務器最大程度的信任和自由。

應用廣泛、環境成熟

天然具有跨語言、跨平臺的優越性,而且,因為本身的簡單特性很容易實現,所以幾乎所有的編程語言都有HTTP調用庫和外圍的開發測試工具

無狀態

既是優點又是缺點。因為服務器沒有記憶能力,所以就不需要額外的資源來記錄狀態信息,不僅實現上會簡單一些,而且還能減輕服務器的負擔,能夠把更多的CPU和內存用來對外提供服務。

HTTP的缺點無狀態

服務器沒有記憶能力,它就無法支持需要連續多個步驟的事務操作。每次都得問一遍身份信息,需要增加了不必要的數據傳輸量。由此出現了Cookie技術。

安全性

明文傳輸,協議里的報文(準確地說是header部分)不使用二進制數據,而是用簡單可閱讀的文本形式。

對比TCP、UDP這樣的二進制協議,它的優點顯而易見,不需要借助任何外部工具,用瀏覽器、Wireshark或者tcpdump抓包后,直接用肉眼就可以很容易地查看或者修改,為我們的開發調試工作帶來極大的便利。

當然缺點也是顯而易見的,就是不安全,可以被監聽和被窺探。因為無法判斷通信雙方的身份,不能判斷報文是否被更改過。

總結起來即:

明文,請求報文未加密;未hash,即使報文被修改過也不知道;未驗證身份,容易導致中間人攻擊;

作者:captain_p鏈接:https://juejin.cn/post/7041744237905346568

如果本文對你有幫助,麻煩轉發關注支持一下

猜你喜歡

主站蜘蛛池模板: 国产精品热久久毛片 | 欧美一级特黄做 | 久色一区 | 窝窝午夜看片七次郎青草视频 | 久久亚洲天堂 | 成人在线观看一区 | 午夜国产精品久久久久 | 亚洲精品中文字幕一区 | 国产精品成人网 | 国产亚洲综合在线 | 狠狠色丁香婷婷综合久久来 | 午夜影院黄| 美女又黄又免费视频 | 亚洲久久在线观看 | 欧美国产日韩在线播放 | 妖精www成人动漫在线观看 | 国产成人免费片在线观看 | 免费精品久久久视频 | 日韩一级欧美一级毛片在 | 日韩国产午夜一区二区三区 | 草草久久97超级碰碰碰免费 | 精品久久看 | 永久黄网站色视频免费观看99 | 久久亚洲国产视频 | 国产一级毛片亚洲久留木玲 | 国产欧美日韩另类 | ccyycom草草影院成人91 | 日本免费毛片 | 国产激情一区二区三区四区 | 日本午夜三级 | 国产日韩精品一区在线不卡 | 日本巨乳中文字幕 | 欧美国产三级 | 欧美成人看片黄a免费看 | 国产欧美一区二区三区精品 | 韩国在线精品福利视频在线观看 | 国产精品激情丝袜美女 | 天堂8中文在线最新版在线 天堂8资源8在线 | 亚洲无线一二三区2021 | 亚洲天堂成人 | 在线观看欧美一区 |