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

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

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

超文ちょうぶんほん传输协议えい语: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). 

外部がいぶ链接

[编辑]