(Translated by https://www.hiragana.jp/)
超文本传输协议 - 维基百科,自由的百科全书 とべ转到内容ないよう

超文ちょうぶんほん传输协议

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
重定しげさだこうHTTP

超文ちょうぶんほんでん協定きょうてい英語えいごHyperText Transfer Protocol縮寫しゅくしゃHTTP一種用於分佈式、きょうさくしきちょう媒體ばいたいしんいき系統けいとうてき應用おうようそう協議きょうぎ[1]。HTTPぜんたま訊網てきすうよりどころ通信つうしんてき基礎きそ

设计HTTP最初さいしょてき目的もくてき为了提供ていきょういち种发ぬの接收せっしゅうHTML页面てき方法ほうほうつう过HTTPあるものHTTPS协议请求てき资源ゆかり统一资源标识符(Uniform Resource Identifiers,URI)らい标识。

HTTPてき发展ゆかりひさげ姆·かしわ內茲-於1989ねんざいおうしゅうかく研究けんきゅう組織そしき(CERN)しょ發起ほっき。HTTPてき標準ひょうじゅん制定せいていよしまん维网协会(World Wide Web Consortium,W3C)互联网工ほどにん务组(Internet Engineering Task Force,IETF)進行しんこう協調きょうちょうさい终发ぬのりょういち系列けいれつてきRFC,其中さい著名ちょめいてき1999ねん6がつおおやけ佈的 RFC 2616定義ていぎりょうHTTP協議きょうぎちゅう現今げんこんこう使用しようてきいち版本はんぽん——HTTP 1.1。

2014ねん12月,互联网工ほどにん务组(IETF)てきHypertext Transfer Protocol Bis(httpbis)工作こうさくしょう组将HTTP/2标准ひさげ议递交至IESGえいInternet Engineering Steering Group进行讨论[2],于2015ねん2がつ17にち批准ひじゅん[3] HTTP/2标准于2015ねん5がつ以RFC 7540正式せいしき发表,だいHTTP 1.1なり为HTTPてき实现标准。[4]

协议がいじゅつ[编辑]

HTTPいち个客户端(よう户)和服わふく务端(网站)间请もとめ应答てき标准,通常つうじょう使用しようTCP协议つう使用しようあみぺーじ浏览网络爬虫あるもの其它てき工具こうぐきゃく户端发起いち个HTTP请求いたふく务器じょう指定していはしこうだまはしこう为80)。わが们称这个きゃく户端为用户代理だいりほどしき(user agent)。应答てきふく务器じょうそん储着いち些资げん如HTMLぶんけん图像。わが们称这个应答ふく务器为源ふく务器(origin server)。ざいよう代理だいりげんふく务器ちゅう可能かのう存在そんざい个「ちゅう间层」,代理だいり伺服网关あるもの隧道すいどう(tunnel)。

つきかんTCP/IP协议互联网上さい流行りゅうこうてき应用,ただしざいHTTP协议ちゅう并没ゆう规定它必须使用しようある支持しじてき层。こと实上HTTP在任ざいにんなん互联网协议或其他网络じょう实现。HTTP假定かてい其下层协议提供ていきょうもたれてき传输。よし此,にんなんのう提供ていきょう这种证的协议以被其使用しよう所以ゆえん其在TCP/IP协议ぞく使用しようTCPさく为其传输层。

通常つうじょうゆかりHTTPきゃく户端发起いち个请もとめ建立こんりゅう一个到服务器指定端口(だま认是80はしこうてきTCP连接。HTTPふく务器则在个端こう监听きゃく户端てき请求。一旦收到请求,ふく务器かいこうきゃく户端かえしかいいち个状态,如"HTTP/1.1 200 OK",以及かえしかいてき内容ないよう,如请もとめてきぶんけん、错误消息しょうそくあるもの其它しんいき

请求方法ほうほう[编辑]

HTTP/1.1协议中共ちゅうきょうてい义了はち种方ほう(也叫“动作”)らい以不どう方式ほうしき操作そうさ指定していてき资源:

GET
こう指定していてき资源发出「顯示けんじ」请求。使用しようGET方法ほうほうおう該只ようざい讀取よみと資料しりょう,而不应当よう于产せい副作用ふくさようてき操作そうさちゅうれい如在网络应用ほどじょなか。其中いち原因げんいんGET可能かのうかいあみ爬蟲ひとし随意ずいい访问。まいり安全あんぜん方法ほうほう。浏览直接ちょくせつ发出てきGETただのうよしいち个urlさわ发。GETじょうようざいurlそと带一些参数就只能依靠urlじょう带querystring。
HEAD
あずかGET方法ほうほういちようみやこただしこうふく务器发出指定してい资源てき请求。ただ过服务器はたつてかい資源しげんてき本文ほんぶん份。它的こうしょざい於,使用しよう这個方法ほうほう以在必传输全内容ないようてきじょう况下,就可以获取其中「せき於該資源しげんてきy訊」(もと訊或たたえもと資料しりょう)。
POST
こう指定してい资源ひさげ交数すえ,请求ふく务器进行处理(れい如提交表单或しゃじょう传檔あん)。かずすえ包含ほうがんざい请求本文ほんぶんちゅう。這個請求せいきゅう可能かのうかい建立こんりゅうしんてき资源あるおさむあらため現有げんゆう资源,あるしゃみなゆう每次まいじひさげ交,おもて单的すうすえ浏览器用きよう编码到HTTP请求てきbodyさと。浏览发出てきPOST请求てきbody主要しゅようゆう两种格式かくしきいち种是application/x-www-form-urlencodedようらい传输简单てきすうすえ大概たいがい就是"key1=value1&key2=value2"这样てき格式かくしき。另外一种是传文件,かいさいようmultipart/form-data格式かくしきさいようきさきしゃいん为application/x-www-form-urlencodedてき编码方式ほうしき对于ぶんけん这种二进制的数据非常低效。
PUT
こう指定してい资源位置いちじょう传其最新さいしん内容ないよう
DELETE
请求ふく务器删除Request-URIしょ标识てき资源。
TRACE
かい显服务器おさむいたてき请求,主要しゅようよう于测试或诊断。
OPTIONS
這個方法ほうほう使つかいふく务器でんかい該资げんしょ支持しじてき所有しょゆうHTTP请求方法ほうほうよう'*'らい代替だいたい資源しげん名稱めいしょうこうWebふく务器发送OPTIONS请求,以测试服务器こうのう正常せいじょううんさく
CONNECT
HTTP/1.1协议ちゅう预留给能够将连接あらため隧道すいどう方式ほうしきてき代理だいりふく务器。通常つうじょうよう於SSLみつ伺服てき連結れんけつ經由けいゆみつてきHTTP代理だいり伺服)。

方法ほうほう名称めいしょう区分くぶん大小だいしょううつしてきとうぼう个请もとめしょ针对てき资源支持しじ对应てき请求方法ほうほうてき时候,ふく务器应当かえしかいじょう态码405(Method Not Allowed),とうふく务器认识あるもの支持しじ对应てき请求方法ほうほうてき时候,应当かえしかいじょう态码501(Not Implemented)。

HTTPふく务器いたりしょう应该实现GETHEAD方法ほうほう,其他方法ほうほう选的。当然とうぜん所有しょゆうてき方法ほうほう支持しじてき实现应当符合ふごうじゅつてき方法ほうほう各自かくじてき语义てい义。

此外,特定とくていてきHTTPふく务器还能够扩てんてい义的方法ほうほうれい如:

PATCH(ゆかり RFC 5789 指定していてき方法ほうほう
よう于将局部きょくぶおさむあらため应用いた资源。

安全あんぜん方法ほうほう[编辑]

对于GETHEAD方法ほうほう而言,じょりょう进行获取资源しんいきがい,这些请求应当さいゆう他意たい义。也就说,这些方法ほうほう应当认为安全あんぜんてき”。 きゃく户端可能かのうかい使用しよう其他“安全あんぜん方法ほうほうれい如POST,PUT及DELETE,应该以特ことてき方式ほうしき通常つうじょう按钮而不ちょう链接告知こくちきゃく可能かのうてききさきはてれい如一个按钮控制的资金交易),ある请求てき操作そうさ可能かのう不安ふあん全的ぜんてきれい如某个文けんはたうえ传或删除)。

ただし不能ふのうそう当然とうぜん认为ふく务器ざい处理ぼう个GET请求时不かい产生にんなん副作用ふくさようこと实上,很多动态资源かい这作为其特性とくせい。这里重要じゅうようてき别在于用户并ぼつゆう请求这一副作用ふくさよういん此不应由よう户为这些副作用ふくさよううけたまわ担责にん

副作用ふくさよう[编辑]

かり如在こう虑诸如错误或しゃ过期とう问题てきじょう况下,若干じゃっかん请求てき副作用ふくさようあずか单次请求しょうどうあるもの根本こんぽんぼつゆう副作用ふくさよう么这些请もとめ方法ほうほう就能够被视作“べきとう(idempotence)てき。GET,HEAD,PUTDELETE方法ほうほうゆう这样てき幂等属性ぞくせいどう样由于根すえ协议,OPTIONS,TRACE应有副作用ふくさよういん此也しょ当然とうぜん也是幂等てき

かり如一个由若干请求组成的请求序列产生的结果,ざいじゅう复执ぎょう这个请求序列じょれつあるもの其中にんなん一个或多个请求后仍没有发生变化,则这个请もとめ序列じょれつ便びん“幂等”てきただし可能かのう现一个由若干请求组成的请求序列是“幂等”てきそく使つかい这个请求序列じょれつちゅう所有しょゆう执行てき请求方法ほうほう幂等てきれい如,这个请求序列じょれつてき结果赖于ぼう个会ざいした执行这个序列じょれつてき过程ちゅうおさむあらためてき变量。

對照たいしょうひょう[编辑]

請求せいきゅう方法ほうほうてき屬性ぞくせい
請求せいきゅう方法ほうほう RFC 請求せいきゅうゆうpayload body responseゆうpayload body 安全あんぜんてき べきとうてき かい取的とりてき
GET RFC 9110 これ これ これ これ
HEAD RFC 9110 いや これ これ これ
POST RFC 9110 これ これ いや いや これ
PUT RFC 9110 これ これ いや これ いや
DELETE RFC 9110 これ いや これ いや
CONNECT RFC 9110 これ いや いや いや
OPTIONS RFC 9110 これ これ これ いや
TRACE RFC 9110 いや これ これ これ いや
PATCH RFC 5789 これ これ いや いや いや

版本はんぽん[编辑]

超文ちょうぶんほん传输协议やめ经演りょう很多版本はんぽん,它们ちゅうてきだい部分ぶぶんこうしたけんようてきざいRFC 2145ちゅう描述りょうHTTP版本はんぽんごうてき用法ようほうきゃく户端ざい请求てき开始つげ诉服务器它采ようてき协议版本はんぽんごう,而后しゃ则在响应ちゅうさいようしょうどうあるものさらはやてき协议版本はんぽん

HTTP/0.9[编辑]

やめ过时。ただ接受せつじゅGETいち种请もとめ方法ほうほうぼつゆうざいどおり讯中指定してい版本はんぽんごう,且不支持しじ请求头。よし于该版本はんぽん支持しじPOST方法ほうほういん此客户端无法こうふく务器传递ふとしんいき

HTTP/1.0[编辑]

这是だい一个在通讯中指定版本号的HTTP协议版本はんぽん

HTTP/1.1[编辑]

だま认采よう续连せっ(Connection: keep-alive),のう很好配合はいごう代理だいりふく务器工作こうさく。还支持しじかんどう方式ほうしきざいどう时发おく个请もとめ,以便くだてい线路负载,ひさげだか传输速度そくど

HTTP/1.1そう较于HTTP/1.0协议てき别主ようからだ现在:

  • 缓存处理
  • 带宽优化及网络连せってき使用しよう
  • 错误通知つうちてき管理かんり
  • 消息しょうそくざい网络ちゅうてき发送
  • 互联网地てき维护
  • 安全あんぜんせい及完せいせい

HTTP/2[编辑]

とうぜん版本はんぽん,于2015ねん5がつさく为互联网标准正式せいしき发布。[5]

HTTP/3[编辑]

最新さいしん版本はんぽん,于2022ねん6がつ6にち标准为RFC9114。[6]かいほう使用しようTCP,つう过UDPじょう使用しようQUICらいうけたまわ载应よう层数すえ

じょう态码[编辑]

所有しょゆうHTTP响应てきだいいちぎょうみやこただしじょう态行とうぜんHTTP版本はんぽんごう,3数字すうじ组成てきじょう态代码,以及描述じょう态的たん语,彼此ひしよしそらかくぶんへだた

じょう态代码的だい一个数字代表当前响应的类型:

  • 1xx消息しょうそく——请求やめ被服ひふく务器接收せっしゅう,继续处理
  • 2xx成功せいこう——请求やめ成功せいこう被服ひふく务器接收せっしゅう理解りかい、并接受せつじゅ
  • 3xx重定しげさだむかい——需要じゅようきさき操作そうさ才能さいのう完成かんせい这一请求
  • 4xx请求错误——请求含有がんゆう词法错误あるもの无法执行
  • 5xxふく务器错误——ふく务器ざい处理ぼう个正确请もとめ时发せい错误

虽然 RFC 2616 ちゅうやめ经推荐了描述じょう态的たん语,れい如"200 OK","404 Not Found",ただしWEB开发しゃ仍然のう够自ぎょう决定さいようなん种短语,よう以显しめせ本地ほんじてきじょう态描じゅつあるものてい义信いき

持續じぞくれんせん[编辑]

使用多個連結和使用持久連結的對比

ざいHTTP 0.91.0ちゅうTCPれんせんざいまいいち請求せいきゅう/かい應對おうたいこうせき閉。ざいHTTP 1.1ちゅう,引入りょう保持ほじれんせんてきせい,一個連接可以重複在多個請求/かいおう使用しよう持續じぞくれんせんてき方式ほうしき以大だい減少げんしょうとうまち時間じかんいんためざい發出はっしゅつだいいち請求せいきゅう雙方そうほう需要じゅようおもしん執行しっこうTCP交握ほどじょ

HTTP 1.1かえあらためしんりょうHTTP 1.0てきしきひろしれい如,HTTP 1.1引入りょうぶん块传输编码,以允許いんきょでん遞內よう以在持續じぞくれん線上せんじょうくし流傳りゅうでん輸而使用しよういた緩衝かんしょう。HTTPかんどう允許いんきょきゃくはしざいおさむいたまいかいおうぜん發送はっそう請求せいきゅうしんいち減少げんしょうようかん受到てきとどこおのち時間じかん協議きょうぎてき另一個補充是字節服務,允許いんきょきゃくはし請求せいきゅう資源しげんてきぼう一部いちぶ份,伺服僅回おうぼう資源しげんてきゆびあかり部分ぶぶん

协议れい[编辑]

下面かめんいち个HTTPきゃく户端あずかふく务器间会话的れい,运行于www.google.com,はしこう80

请求しんいき[编辑]

发出てき请求しんいき(message request)包括ほうかつ以下いか几个:

  • 请求ぎょうれい如GET /images/logo.gif HTTP/1.1,表示ひょうじ从/images录下请求logo.gif这个ぶんけん
  • 请求头れい如Accept-Language: en)
  • 空行くうぎょう
  • 其他消息しょうそくたい

请求ぎょう标题必须以<CR><LF>さく为结空行くうぎょうない必须ただゆう<CR><LF>而无其他そらかくざいHTTP/1.1协议ちゅう所有しょゆうてき请求头,じょHostがいみやこただし选的。

きゃく户端请求[编辑]

GET / HTTP/1.1
Host: www.google.com

末尾まつびゆういち空行くうぎょうだいいちぎょう指定してい方法ほうほう、资源みち、协议版本はんぽんだいぎょうざい1.1はんさと必带てきいち个header作用さよう指定していぬしつくえ

ふく务器应答[编辑]

HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive

(紧跟いち空行くうぎょう,并且よしHTML格式かくしきてきぶんほん组成りょうGoogleてきしゅ页)

ざいHTTP1.0,单一TCP连接ない仅执ぎょういち个“きゃく户端发送请求—ふく务器发送应答”周期しゅうきこれきさき释放TCP连接。ざいHTTP1.1优化支持しじ续活跃连せっきゃく户端连续つぎ发送请求、接收せっしゅう应答;批次请求时,どういちTCP连接ざいかつ跃(Keep-Live)间期ない复用,避免じゅう复TCPはつはじめ握手あくしゅかつ动,减少网络负荷响应周期しゅうき。此外支持しじ应答いた达前继续发送请求(通常つうじょう两个),しょう为「ながれ线化」(stream)。

類似るいじ協議きょうぎ[编辑]

Gopher1990年代ねんだい早期そうきHTTPだいてき內容でん協議きょうぎSPDYこれGoogle開發かいはつてきHTTPてきがえだい方案ほうあん,它被しん版本はんぽんてきHTTP協議きょうぎHTTP/2ところだい

まいり[编辑]

参考さんこう[编辑]

  1. ^ Fielding, Roy T.; Gettys, James; Mogul, Jeffrey C.; Nielsen, Henrik Frystyk; Masinter, Larry; Leach, Paul J.; Berners-Lee, Tim. Hypertext Transfer Protocol – HTTP/1.1. IETF. June 1999. RFC 2616. 
  2. ^ Raymor, Brian. Wait for it – HTTP/2 begins Working Group Last Call!. Microsoft Open Technologies. 2014-08-07 [2014-09-08]. (原始げんし内容ないようそん档于2014-10-06). 
  3. ^ Mark Nottingham. HTTP/2 Approved. www.ietf.org. Internet Engineering Task Force. 2015-02-18 [2017-01-04]. (原始げんし内容ないようそん档于2015-02-20). 
  4. ^ RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2). IETF. May 2015 [14 May 2015]. (原始げんし内容ないようそん档于2015-06-23). 
  5. ^ RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2). IETF. May 2015 [14 May 2015]. (原始げんし内容ないようそん档于2015-06-23). 
  6. ^ HTTP/3. [2022-06-07]. (原始げんし内容ないようそん于2022-06-06). 

外部がいぶ链接[编辑]