HTTP分為URI澄步,HEADER冰蘑,Body三個部分

HTTP分為URI,HEADER村缸,Body三個部分祠肥。每個部分都可以包含請求信息,那么每個部分是否都有請求大小限制呢梯皿?剛開始以為這個問題很容易找到答案仇箱,后來發(fā)現(xiàn)這也是個挺復雜的問題。
URI
首先是URI东羹,我們知道剂桥,在GET請求中,請求參數(shù)是放在URL進行傳遞的属提,所以权逗,HTTP GET的請求最關心的一個問題:能有多長?我能放多少參數(shù)冤议?URI
從HTTP 1.1協(xié)議中開始找:(RFC 2616)
The HTTP protocol does not place any a priori limit on the length of a URI
所以明確一點的是HTTP協(xié)議是沒有顯式限制URI的長度的斟薇。理論上來說你在URI中傳遞多少參數(shù)都是可以的。

但是現(xiàn)實往往無法永遠照進陽光:
1 瀏覽器限制
所有主流瀏覽器都會對URI的長度進行限制恕酸。如果你在瀏覽器中輸入過長的URI堪滨,那么瀏覽器會自動進行截斷。各個瀏覽器對URI長度的限制各不相同蕊温,甚至不同版本也不一樣袱箱。大約一個概念,2000字符以內的URI都能符合所有主流瀏覽器的要求寿弱。
2 服務端限制
即使客戶端同意發(fā)送無限長度的URI犯眠,但是服務器一方一般都是有長度限制的。一般服務是沒有專門針對URI的參數(shù)限制的症革,但是由于URI是會包含在request header中的,所以對header的大小限制是會對URI起作用的鸯旁,比如nginx的(large_client_header_buffers)這個屬性噪矛,它默認是4k。

題外話
這里的“URI是包含在request header中的” 這句話其實是有問題的。URI在HTTP協(xié)議中是叫做request-Line的朝刊,如果具體看協(xié)議负懦,是會發(fā)現(xiàn)request-Line和request-header是兩個不一樣的,就是說request的請求其實該分為request-line, request-header, request-body三個部分的(具體可以看http://www.ietf.org/rfc/rfc2616.txt 第4和5章)缩滨。但是好像使用的時候都默認將header中理解為包含了request-line(比如這篇文章http://trafficserver.apache.org/docs/v2/sdk/HTTPHeaders.html)势就。這里估計是概念和使用的時候導致問題,不必深究了脉漏,所以我們不妨將request-line理解為包含在header中就好苞冯。

不管如何,綜上所述侧巨,這里的URI不論是客戶端還是服務端舅锄,基本是被默認限制住的。
Header
header中存放的信息非常多司忱,比如request-line皇忿,cookie,還有各種key-value的特定header字段和值坦仍。有點時候鳍烁,我們也會往header中添加一些自定義的屬性。header的長度和URI的情況是一樣的繁扎。協(xié)議中并沒有顯示限制header的大小幔荒。理論上在header中放多少屬性都是可以的。
但是實際上:
1 瀏覽器限制
各個主流瀏覽器限制幾十k~幾百M不等的限制锻离∑糖停基本上能滿足平時的需求了。但是如果這個長度對你業(yè)務有很大影響的話汽纠,建議還是親自測試下卫键。
2 服務端限制
比如nginx的large_client_header_buffers就限制了header的長度。你也可以自己設置虱朵。

可能會影響header的參數(shù)還有:
client_header_buffer_size
client_header_timeout
各參數(shù)可以參考:http://wiki.nginx.org/HttpCoreModule
Body
body和URI莉炉,header非常不一樣,不一樣的地方原因在于文件上傳碴犬。HTTP是支持request中帶文件的絮宁,那么文件的二進制數(shù)據(jù)不會放在URI或者header里面,它是放在body里面的服协。那么這個body的大小就一定不能默認限制太小绍昂,尤其是客戶端。

首先理論上,協(xié)議是沒有對body大小做任何限制的窘游。
其次唠椭,瀏覽器也沒有對body做任何大小限制,因為如果瀏覽器做了大小限制就意味著它直接影響了你的服務功能忍饰。
所以對body的限制的任務就放在了服務器上了贪嫂。這里就我最熟悉的nginx+php-fpm來看下有哪些地方可以對body進行限制:
1 nginx有一些設置會對body大小產生影響
client_max_body_size,這個參數(shù)可以限制body的大小艾蓝,默認是1m
client_body_timeout力崇,當body太大,或者網(wǎng)絡太差的時候赢织,這個也有可能會影響請求的成功率的亮靴。
2 php.ini也有一些設置會對上傳的body數(shù)據(jù)產生影響
upload_max_filesize,限制最大上傳文件大小
post_max_size 敌厘,限制post的大小
memory_limit台猴,限制內存使用大小
max_execution_time,這個是php最大執(zhí)行時間俱两,也有可能影響請求成功率的饱狂。
HTTP請求大小有什么影響
首先是安全因素考慮。
試想一下一個網(wǎng)站的服務器是不限制body大小的宪彩,那么它就是可以被黑客利用攻擊的地方了休讳。黑客利用這一點往HTTP POST的body中傳遞非常大(比如幾M)的請求。那么比如像nginx+php-fpm這樣的尿孔,就會占用了服務器一個php進程專門處理這個請求俊柔,就會導致你對外無法提供其他的服務了,你的服務就癱瘓了活合,這就是DDOS攻擊雏婶。
其次是文件上傳服務考慮。
文件上傳有兩種情況:
你可能經(jīng)常遇到為什么文件上傳失敯字浮留晚?那么大多是上文說的幾個設置沒有設置對。
其次告嘲,文件上傳大小是不是設置越大越好错维?答案必須是否定的,理由也是安全考慮橄唬。滿足需求的大小限制就夠了赋焕。
這里就可以理解為什么大都把文件上傳和業(yè)務接口分開來提供了吧。如果你的文件上傳服務和業(yè)務接口是同一個機器的話仰楚,那么就說明你的業(yè)務接口可以允許的body大小一定是很大的隆判。換句話說犬庇,在這種情境下,你的業(yè)務中的所有POST請求都是不安全的C郯薄械筛!只要進行DDOS攻擊捎泻,業(yè)務就會癱瘓飒炎。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笆豁,隨后出現(xiàn)的幾起案子郎汪,更是在濱河造成了極大的恐慌,老刑警劉巖闯狱,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煞赢,死亡現(xiàn)場離奇詭異,居然都是意外死亡哄孤,警方通過查閱死者的電腦和手機照筑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘦陈,“玉大人凝危,你說我怎么就攤上這事〕渴牛” “怎么了蛾默?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捉貌。 經(jīng)常有香客問我支鸡,道長,這世上最難降的妖魔是什么趁窃? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任牧挣,我火速辦了婚禮,結果婚禮上醒陆,老公的妹妹穿的比我還像新娘瀑构。我一直安慰自己,他們只是感情好统求,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布检碗。 她就那樣靜靜地躺著,像睡著了一般码邻。 火紅的嫁衣襯著肌膚如雪折剃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天像屋,我揣著相機與錄音怕犁,去河邊找鬼。 笑死,一個胖子當著我的面吹牛奏甫,可吹牛的內容都是我干的戈轿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼阵子,長吁一口氣:“原來是場噩夢啊……” “哼思杯!你這毒婦竟也來了?” 一聲冷哼從身側響起挠进,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤色乾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后领突,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暖璧,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年君旦,在試婚紗的時候發(fā)現(xiàn)自己被綠了澎办。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡金砍,死狀恐怖局蚀,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情捞魁,我是刑警寧澤至会,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站谱俭,受9級特大地震影響奉件,放射性物質發(fā)生泄漏。R本人自食惡果不足惜昆著,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一县貌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凑懂,春花似錦煤痕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脓豪,卻和暖如春巷帝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扫夜。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工楞泼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驰徊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓堕阔,卻偏偏與公主長得像棍厂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子超陆,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理牺弹,服務發(fā)現(xiàn),斷路器侥猬,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 組織:中國互動出版網(wǎng)(http://www.china-pub.com/) RFC文檔中文翻譯計劃(http://...
    Palomar閱讀 1,574評論 0 6
  • 一例驹、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,372評論 6 152
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡相關這一塊基礎很是欠缺,所以準備花時間了解一下退唠,本文主要是講http協(xié)議的一些基礎,和一些...
    justCode_閱讀 2,094評論 0 23
  • 試想一下荤胁,一個科班出身瞧预,擁有豐富開發(fā)經(jīng)驗的程序員對于HTTP協(xié)議卻不甚了解?還是很尷尬的仅政!這么一個可以說是常識的問...
    一個人在路上走下去閱讀 91,841評論 18 189