超文本传输协议(HyperText Transfer Protocol,HTTP)是从服务器传输数据到客户端的传输协议。
一个请求消息是由请求行、请求头字段、一个空行和消息主体构成。如
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
请求消息的第一行就是请求行。它指明使用的请求方法、资源标示符、和 HTTP 版本。如
GET /hello.htm HTTP/1.1
请求方法用来定义操作资源的方式,HTTP/1.1 协议中定义了八种请求方法:
此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
URI、URL和URN是用来识别、定位和命名互联网上的资源。
因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别WWW资源的途径。为了满足这种需要,Tim Berners-Lee 引入了标准的识别、定位和命名的途径:URI、URL和URN。
URL 和 URN 都属于 URI。
URI 和 URL 的区别是:URL 更具体。URI 和 URL 都定义了什么是资源。但 URL 还定义了如何获得资源。
关于 URL 的具体描述见这里。
用来传递客户端的更多信息,以及传递解析消息主体的必要信息。如
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
常见请求头字段有
Accept: text/html
gzip, deflate, sdch
en-US,en;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/38.0.2125.101 Safari/537.36
sessionid=c8422b97-98e2-4bc6-aa31-9b667d6ca4a5; theme=4;
指示头字段区完成,消息主体开始(如果有消息主体的话)。
消息主体是请求消息的承载数据。比如在提交POST表单,并且表单方法不是GET时,表单数据就是打包在消息主体内的。消息主体是可选的。
响应消息由一个状态行、响应头字段、一个空行、消息主体构成。如
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
由http版本、状态码、状态描述文字构成。如
HTTP/1.1 200 OK
HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的3位数字代码。
所有的状态码的第一个数字代表了响应的五种状态之一:
常见状态码有:
和请求消息类似,首部字段会包括服务器本身的一些信息指示、以及响应消息本身的元数据。如
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
常见响应头有:
Content-Encoding: gzip
Server:thin 1.5.0 codename Knife
Location: http://www.github.com/login
Content-Type:text/html; charset=UTF-8
gzip
。客户端会根据该值对响应内容解码。消息主体是响应消息的承载数据。
HTTPie 类似 cURL,但其 api 相比 cURL 更友好。
HTTPie 示例
本文遵守创作共享CC BY-NC-SA 4.0协议 网络平台如需转载必须与本人联系确认。