91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HTTP標頭有什么問題?

LiveVideoStack ? 來源:LiveVideoStack ? 作者:Mark Nottingham ? 2020-08-10 16:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在過去的十年中,HTTP社區(qū)一直忙于對Web協(xié)議現(xiàn)代化,對核心規(guī)范進行了多次修訂與擴展,從HTTP/2以及現(xiàn)在的 HTTP/3。不幸的是,從最初到現(xiàn)在我們定義和使用HTTP header的方式并沒有什么大的改變,由于未指定的Headers(以及處理方式的多樣性)引起的互通性問題,為開發(fā)人員帶來很多痛苦,甚至引發(fā)安全問題。

●HTTP標頭有什么問題?●

大多數(shù)Web開發(fā)人員都熟悉HTTP標頭;如Content-Length、Cache-Control和Cookie之類。它們會攜帶請求和響應(yīng)的元數(shù)據(jù),通常,這部分數(shù)據(jù)是消息發(fā)送者由于某種原因無法放入正文內(nèi)容的信息,或者是消息接收者無需查看正文內(nèi)容即可獲得的信息。 因為標頭需要由許多不同的客戶端和服務(wù)器,代理服務(wù)和CDN處理(通常在消息的生存期內(nèi)不止一次),所以大家希望它們易于處理,高效解析并且定義明確句法。 HTTP將頭值(更恰當?shù)恼f是字段值,因為它們也可能出現(xiàn)在主體后面的尾部字段中)定義為一個約束很少的“八進制序列”(即字節(jié)),盡管建議是ASCII字節(jié)。它還建議在ABNF中定義標題,如果用逗號分隔字段的值,則可以將同名的多個字段組合在同一行上。 因此,每個標題字段都有自己的唯一定義,需要知道它才能解析值。一些領(lǐng)域作者使用ABNF來做到這一點;另一些人使用示例。有些只是讓你根據(jù)你以前看到的價值觀來猜測。 例如,考慮年齡年限標題。它是核心HTTP規(guī)范的一部分,所以它應(yīng)該是定義明確的,而且它只是一個簡單的整數(shù)。

Age: 42

由此ABNF指定:

Age = delta-secondsdelta-seconds = 1*DIGITDIGIT = %x30-39 ; 0-9

起初這似乎很簡單——0到9之間數(shù)字的一個到多個實例。但在實際考慮中,如果一個實現(xiàn)遇到這些現(xiàn)實標題中的任何一個,它應(yīng)該做什么:

Age: 0, 60Age: 60, 0Age: 50mAge: abc234Age: 60;ms=212

它不是那么簡單,因為測試真正的緩存需要用年限顯示。 因此,當同一個人正在編寫生成和消耗消息頭的代碼而沒有其他人時,示例或ABNF可能是一個足夠的定義,但如果有多個實現(xiàn)生成和解析值,則互操作性是很糟的。 每個標題作者都必須記住要解決一個問題列表,這些問題涉及如何處理重復(fù)值、案例規(guī)范化、無論是單個項目還是列表等等。通常,他們不會處理這些問題,這意味著開發(fā)者通常以不同的方式自行選擇。 未充分指定的消息頭也是安全問題的來源;如果實現(xiàn)解析消息頭的方式不同,它們的行為可能會不同,從而導(dǎo)致Response Splitting這類的攻擊。 瀏覽器供應(yīng)商已經(jīng)足夠關(guān)注這些問題,開始像CSP算法那樣定義頭。也就是說,他們費力地定義解析和序列化算法,然后創(chuàng)建測試用例。這種方法對字段語法的模糊性較小,實現(xiàn)之間的差異較小。然而,它仍然是一次性的;它只有助于澄清特定標題的算法。對于規(guī)范的作者來說,去努力并確保它是正確的也是很累的-所以大多數(shù)標題作者都不會費心。它還為實現(xiàn)者創(chuàng)建了大量繁忙的工作,因為他們需要分別實現(xiàn)每個新的頭的解析器。

●引入結(jié)構(gòu)化領(lǐng)域●

HTTP工作組已經(jīng)非常清楚了這類問題,幾年前我們開始嘗試定義一些更好的方法,使人們可以使用這些東西來創(chuàng)建新的字段。經(jīng)過幾次嘗試后,我們確定了一種最初稱為結(jié)構(gòu)化標題的方法,但我們現(xiàn)在(更正確地)稱之為“結(jié)構(gòu)化字段”。 結(jié)構(gòu)化字段是一個定義良好的數(shù)據(jù)類型庫,在HTTP頭和拖車中可能有用,包括字符串、Tokens、布爾值、整數(shù)、小數(shù)和字節(jié)序列作為原子“Item”類型,以及這些項的列表和字典。重要的是,它定義了每種類型的精確解析和序列化算法,以及錯誤處理和詳細的測試套件-所有這些都有助于確?;ゲ僮餍?。 這允許新頭字段的作者根據(jù)這些類型定義它。例如,他們可以說“這是一個字符串列表”,人們將知道如何使用一個現(xiàn)成的庫來明確地解析和生成標頭,而不是編寫特定于頭的代碼。

Example-Header: "blue", "sort of red", "green"每個項目也可以有參數(shù),或鍵/值對的額外信息。參數(shù)是一種重要的可擴展性機制,它允許消息頭隨著時間的推移而演變。

Example-Header: "blue"; websafe, "sort of red"; author="sue", "green"

遞歸的形式也很有限;列表和字典值也可以包含列表,例如:

Example-Header: people=(joanna stacy), places=("new york" "rome") 內(nèi)部列表中的每個項目以及內(nèi)部列表本身都可以進行參數(shù)化。 你可能會注意到,這些消息頭看起來很像許多現(xiàn)有的HTTP字段。這是通過設(shè)計實現(xiàn)的;不僅對開發(fā)人員來說是舒適的,它還允許通過結(jié)構(gòu)化字段實現(xiàn)生成許多現(xiàn)有字段,并且通常它們也可以被解析。例如,許多Cache-Control報頭都是有效的“結(jié)構(gòu)化字段”,即使它沒有定義為一個:

Cache-Control: max-age=3600, immutable

很不幸你還不能將結(jié)構(gòu)化字段用于現(xiàn)有的標頭,也無法僅通過查看它來判斷給定字段是否是結(jié)構(gòu)化字段;你必須知道它的定義值,因為結(jié)構(gòu)化字段至少在現(xiàn)在才用于新字段。

●使用結(jié)構(gòu)化字段獲得更好的性能●

指定新字段更容易,并使它們更安全和更可互操作,這對HTTP來說是一個顯著的改進。如果結(jié)構(gòu)化字段也能幫助HTTP性能呢?他們有兩種方法可以幫助你。顯然,這些都是投機性的好處,但它們?nèi)匀皇怯腥さ恼務(wù)摗? 首先是解析效率。由于傳統(tǒng)的HTTP消息頭是文本形式的,解析器必須接觸字符串中的每個字節(jié),有時需要多次,有時會將其復(fù)制并重新復(fù)制到內(nèi)存的不同部分。這是一個固有的低效過程,HTTP/2和HTTP/3是二進制協(xié)議而不是文本協(xié)議的原因之一。 在結(jié)構(gòu)化字段之前,我們對此無能為力,因為HTTP消息頭的定義非常松散。結(jié)構(gòu)化字段中定義良好的數(shù)據(jù)類型會改變這一點?,F(xiàn)在,我們可以定義一個新的,二進制序列化的任何頭使用他們。 二元結(jié)構(gòu)化字段是定義這種序列化的草案建議,以定義這樣的序列化。它使用HTTP/2(和/3)SETTINGS機制來協(xié)商對替代序列化的支持,并利用結(jié)構(gòu)化字段與許多現(xiàn)有標題字段的語法的相似性將其返回到一組已經(jīng)廣泛使用的標題字段上,如果它們無法解析,則返回到不透明的文本。 二進制序列化將幫助性能多少?由于預(yù)期會減少CPU負載,因此它應(yīng)該減少請求處理的延遲并提高可伸縮性。我們還沒有真實的統(tǒng)計,但是如果你考慮許多標題所采取的路徑-從JavaScript到瀏覽器,然后再到CDN,通過多個CDN節(jié)點到源服務(wù)器,再到應(yīng)用程序代碼本身。累積節(jié)省的潛力是有吸引力的。 結(jié)構(gòu)化字段可能有助于性能的第二種方法是通過提高壓縮效。HTTP/2為頭和拖車字段引入了HPACK壓縮。雖然它的前身SPDY使用GZIP,但由于CRIME攻擊,它被發(fā)現(xiàn)是不安全的。因此,HPACK(及其繼承者QPACK)通過引用整個字段值來壓縮字段;如果它的任何一部分發(fā)生變化,它就不能使用以前的引用(有時會對壓縮效率產(chǎn)生令人驚人的影響)。 之所以選擇整值粒度,是因為通用解析器無法理解字段值的結(jié)構(gòu);為了安全起見,我們必須確保攻擊者無法通過猜測部分字段值來探測加密。 對于結(jié)構(gòu)化字段,現(xiàn)在有一種潛在的方法可以使壓縮算法對字段中的單個數(shù)據(jù)類型而不是整個值進行操作。

Cache-Control: max-age=3600, s-maxage=7200, must-revalidate

例如,考慮以下Cache-Control字段: 使用HPACK和QPACK,整個字段值存儲在動態(tài)表中,并且只能由具有完全相同值的未來消息引用。如果我們將其解析為結(jié)構(gòu)化字段并存儲單個數(shù)據(jù)類型,我們可以存儲:

lmax-age

l3600

ls-maxage

l7200

lmust-revalidate

這些變量中的每一個都可以在將來的標頭中出現(xiàn)時分別引用,從而使壓縮算法更精細,而且效率更高。 早期的原型表明,使用這種技術(shù)的提升對于Web瀏覽器連接來說效率非常低的,因為它們的標題往往是高度重復(fù)的,用多個字節(jié)(字段值中的每種類型都有一個字節(jié))替換HPACK中的1字節(jié)引用實際上會造成傷害。 對于從多個客戶端攜帶流量的連接——例如反向代理和源服務(wù)器上游的CDN所看到的流量——好處可能更明顯;需要更多的實驗。

●長期改善HTTP●

如果上面描述的反向?qū)爰夹g(shù)被捕獲,未來版本的HTTP(或HTTP/2和HTTP/3的擴展)可以大大減少使用中的非結(jié)構(gòu)化消息頭的數(shù)量。 二進制結(jié)構(gòu)化字段草案描述了兩種實現(xiàn)方法。如果字段的語法與結(jié)構(gòu)化字段兼容-至少在大多數(shù)情況下-它可以作為一個發(fā)送,當失敗時返回到明文標題。 沒有兼容語法的標題需要另一種方法。例如,Date、Last-Modified、Expires和類似的消息頭永遠不可能是有效的結(jié)構(gòu)化字段。但是,可以將日期表示為整數(shù),結(jié)構(gòu)化字段可以傳遞整數(shù)。 所以,就有這樣的標題:

Date: Thu, 09 Apr 2020 09:06:50 GMT

可能會在適當?shù)霓D(zhuǎn)譯跳點上表示為:

SF-Date: 1586423210

這為我們提供了一種方法,可以將所有通用消息頭和額外的元信息作為結(jié)構(gòu)化字段發(fā)送。

●立即使用結(jié)構(gòu)化字段●

結(jié)構(gòu)化字段規(guī)范正處于標準化的最后階段,這意味著它很快會成為一個RFC。目前我們已經(jīng)有多個實例,包括在Chrome中,許多新的安全頭(例如Fetch元數(shù)據(jù))都是結(jié)構(gòu)化的。 同時,可以通過具體實現(xiàn)來了解它們是如何工作的。例如,Python http_sfv庫允許從命令行解析它們。 如果你定義了新的消息頭(無論它們是針對整個的Web還是僅針對HTTP API)都可以在RFC發(fā)布后開始使用結(jié)構(gòu)化字段。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10266

    瀏覽量

    91532
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    537

    瀏覽量

    35403
  • 結(jié)構(gòu)化
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    10466

原文標題:使用結(jié)構(gòu)化的標頭字段改善HTTP

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    光電雙測 測量原理

    關(guān)鍵字: 光電測,光電測量儀,光電測徑儀,光電鏡頭,國產(chǎn)光電測徑儀, 雙測由兩組測構(gòu)成,兩組測以凈間距B平行設(shè)置。 當被測物通過2束平行光視場時,將在兩個接收鏡頭的CCD芯片上
    發(fā)表于 01-15 15:06

    HTTP物聯(lián)網(wǎng)網(wǎng)關(guān)是什么?什么功能?

    HTTP物聯(lián)網(wǎng)網(wǎng)關(guān)是連接物聯(lián)網(wǎng)設(shè)備與云端平臺的核心設(shè)備,它以HTTP協(xié)議為基礎(chǔ),實現(xiàn)設(shè)備與云端之間的數(shù)據(jù)交互,并具備協(xié)議轉(zhuǎn)換、數(shù)據(jù)預(yù)處理、安全管理和設(shè)備管理等功能 。以下是詳細介紹: 一、核心定義
    的頭像 發(fā)表于 12-24 11:33 ?337次閱讀
    <b class='flag-5'>HTTP</b>物聯(lián)網(wǎng)網(wǎng)關(guān)是什么?<b class='flag-5'>有</b>什么功能?

    HTTP通信網(wǎng)關(guān)是什么?什么功能?

    HTTP通信網(wǎng)關(guān)是連接不同網(wǎng)絡(luò)或協(xié)議的關(guān)鍵設(shè)備/服務(wù)器,在HTTP通信中扮演著協(xié)議轉(zhuǎn)換、安全加固、性能優(yōu)化等核心角色,其本質(zhì)是 實現(xiàn)不同協(xié)議或網(wǎng)絡(luò)間的數(shù)據(jù)轉(zhuǎn)發(fā)與處理 。以下是其核心功能與工作機制
    的頭像 發(fā)表于 12-23 11:14 ?442次閱讀

    貼片電阻的法與誤差解析

    貼片電阻作為電子電路的核心元件,其表面微小的標識和復(fù)雜的參數(shù)體系常讓工程師感到困惑。本文將從 法規(guī)則 和 誤差特性 兩個維度,系統(tǒng)解析貼片電阻的標識方法與誤差分類,為電路設(shè)計提供實用參考。 一
    的頭像 發(fā)表于 12-19 14:51 ?712次閱讀
    貼片電阻的<b class='flag-5'>標</b>法與誤差解析

    自動駕駛既然雙目攝像了,為什么還要三目攝像?

    視覺系統(tǒng)中。 但在實地落地時,有些廠商并未止步于雙目,而是選擇了三目攝像的方案。為什么了雙目,還要選擇三目攝像? 雙目攝像怎么“看出”深度? 雖然雙目攝像
    的頭像 發(fā)表于 12-09 08:59 ?999次閱讀
    自動駕駛既然<b class='flag-5'>有</b>雙目攝像<b class='flag-5'>頭</b>了,為什么還要三目攝像<b class='flag-5'>頭</b>?

    國產(chǎn)測與雷尼紹測的差距到底在哪里

    走回頭路,開始換回進口品牌。因為最終使用的用戶發(fā)現(xiàn),不少產(chǎn)品,比如機床測,不是說替代就能替代的。在一些高精密測量領(lǐng)域,國產(chǎn)虛問題嚴重。有些“遙遙領(lǐng)先”的國產(chǎn)品牌,甚至根本不知道自己差在哪里。今天小編
    發(fā)表于 10-29 23:52

    求助:請高手指點浙江風向智能攝像如何恢復(fù)使用?

    以前買的浙江風向智能攝像,正常使用,后來廠家跑路App不能用了,家里的幾個攝像成了孤兒。家里裝了??抵谴娴腘AS,支持視頻監(jiān)控,想著把這幾個攝像利用上。沒有app鏈接,選其他O
    發(fā)表于 10-07 11:36

    allegro 反原理圖報錯

    allegro 反原理圖報錯。如圖 這種是什么問題他,如何解決
    發(fā)表于 08-19 20:10

    廬山派K230可以直接使用usb攝像嗎,可以的話攝像啥要求嗎?

    廬山派K230可以直接使用usb攝像嗎,可以的話攝像啥要求嗎
    發(fā)表于 06-24 07:07

    FC光纖什么作用

    FC光纖在光纖通信系統(tǒng)中扮演著至關(guān)重要的角色,其核心作用主要體現(xiàn)在以下幾個方面: 一、實現(xiàn)光纖的物理連接 FC光纖通過其圓形設(shè)計和螺紋緊固方式,能夠與對應(yīng)的FC耦合器或適配器實現(xiàn)穩(wěn)固的物理連接
    的頭像 發(fā)表于 06-16 10:14 ?1143次閱讀

    FC光纖和SC光纖什么區(qū)別

    FC光纖和SC光纖在多個方面存在顯著區(qū)別,以下是對兩者的詳細比較: 一、外形與結(jié)構(gòu) FC光纖: 外形為圓形。 接頭內(nèi)部帶有螺紋,通過旋轉(zhuǎn)與FC耦合器相連接,緊固方式為螺絲扣。 通常配有金屬或
    的頭像 發(fā)表于 06-16 10:06 ?3080次閱讀

    在KaihongOS應(yīng)用開發(fā)中,如何通過HTTP發(fā)起一個數(shù)據(jù)請求

    個HttpRequest對象。 調(diào)用該對象的on()方法,訂閱http響應(yīng)事件,此接口會比request請求先返回??梢愿鶕?jù)業(yè)務(wù)需要訂閱此消息。 調(diào)用該對象的request()方法,傳入http請求
    發(fā)表于 05-08 06:44

    GNSS馴服銣原子頻基準頻率源介紹

    。具體的檢定項目:外觀及工作正常性、輸出信號、諧波與非諧波、開機特性、頻率穩(wěn)定度、相位噪聲、日頻率漂移率、頻率復(fù)現(xiàn)性、頻率調(diào)整范圍和頻率準確度。 4、銣原子頻產(chǎn)品推薦SYN3204型GNSS馴服銣原子
    發(fā)表于 05-07 10:26

    社區(qū)安裝IPC攝像,跟安裝一般安防監(jiān)控攝像什么區(qū)別?

    為了保護社區(qū)或其他公共場所的安全,往往需要安裝監(jiān)控攝像。但隨著越來越多的公共安全事件發(fā)生,傳統(tǒng)只單純拍攝和記錄畫面的監(jiān)控攝像已不能滿足社區(qū)安防的需求,需要更多功能的安防監(jiān)控攝像來進行更智能化
    的頭像 發(fā)表于 04-03 10:00 ?2336次閱讀
    社區(qū)安裝IPC攝像<b class='flag-5'>頭</b>,跟安裝一般安防監(jiān)控攝像<b class='flag-5'>頭</b><b class='flag-5'>有</b>什么區(qū)別?

    S32G399ardb3版本中缺少WIC文件IVT,怎么解決?

    = “ wic.xz wic.bmap wic” 但是,我觀察到生成的 .sdcard 文件包含一個 IVT ,但 .wic 文件中缺少 IVT 。 您能否就如何生成帶有 I
    發(fā)表于 04-03 07:52