本文共 3649 字,大约阅读时间需要 12 分钟。
HTTP(Hyper Text Transfer Protocol 超文本传输协议), 是基于 TCP/IP 通信协议来实现数据传递的应用层协议. 用于 www 万维网服务器(Server-Side) 与 本地浏览器(Client-Side) 之间传输超文本的传输协议.
又因为 TCP/IP 协议是一个端到端的面向连接的协议, 所谓的端到端可以理解为进程到进程之间的连接, 所以 HTTP 协议在开始传输数据之前, 首先需要建立一个 TCP 连接, 而 TCP 连接的过程需要 三次握手. 在 TCP 三次握手之后, 成功建立了 TCP 连接, 此后 HTTP 协议就可以进行数据传输了.
HTTP Request 请求行 + Request_Header + Body 组成:
用于说明请求类型, 要访问的资源以及所使用的HTTP版本.
格式:Method Request-URI HTTP-Version <CR><LF>
\r\n
), 请求行必须由换行符结尾其中 HTTP Method 有下列几种类型:
因为这些 HTTP 协议提供了多种 Method, 所以 HTTP 协议除了作为传输协议之外, 还被作为应用协议.
Request Header(请求报头) 是 HTTP Header 的其中一种类型, 用于指定服务器接受的附加信息, 由由若干个请求报头域键值对组成, 报头域的格式为 报头域名: 值
. 下面列出常用的请求报头域:
Host: 指定服务器的主机和端口号信息, 发送请求时, 该请求报头域是必需的
Authorization: 请求服务器鉴权, 如果服务器的响应代码为 401 未授权, 那么可以发送一个含有 Authorization 请求报头域的请求, 要求服务器对客户端进行鉴权验证.
Accept: 指定客户端接受的响应信息数据类型, E.G. 'Accept': 'application/json'
指定接受 JSON 格式数据
Accept-Charset: 指定客户端接受的响应信息字符集类型, E.G. Accept-Charset:iso-8859-1,gb2312,utf8
Accept-Encoding: 指定客户端接受的内容压缩类型, E.G. Accept-Encoding:gzip.deflate
Accept-Language: 指定客户端接受的自然语言类型, E.G. eg:Accept-Language:zh-cn
User-Agent: 将客户端操作系统、浏览器和其它本地属性传入服务器
Cache-Control:指定请求和响应遵循的缓存机制
Connection: 指定 TCP 连接模式
Cookie: 最重要的请求头之一, 将 cookie 发送给服务器
EXAMPLE:
GET /562f25980001b1b106000338.jpg HTTP/1.1Host img.mukewang.comUser-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36Accept image/webp,image/*,*/*;q=0.8Referer http://www.imooc.com/Accept-Encoding gzip, deflate, sdchAccept-Language zh-CN,zh;q=0.8
HTTP Response 由 状态行 + Response_Header + Body 组成:
格式: HTTP-Version Status-Code Reason-Phrase <CR><LF>
其中由服务器响应的状态码分为 5 大类型:
用来指定客户端接收的的附加信息.
Server: 包含了服务器处理请求的软件环境信息
Allow: 服务器支持哪些 HTTP Method
Set-Cookie:最重要的响应报头域之一, 用于把 cookie 发送到客户端, 每一个写入 cookie 都会生成一个 Set-Cookie, E.G. Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com
Location: 用于重定向到一个新的位置, 包含新的URL地址
EXAMPLE 1:
EXAMPLE 2:
HTTP/1.0 200 OK Content-Type: text/plainContent-Length: 137582Expires: Thu, 05 Dec 1997 16:00:00 GMTLast-Modified: Wed, 5 August 1996 15:55:28 GMTServer: Apache 0.84 Hello World
在客户端发送 Request 或服务器响应 Response 时都可以传输一个 Body(实体), 其由 实体报头域 + 实体正文[可选]组成, 其中实体报头域用于定义了实体正文. 常用的实体报头域有下列几种类型:
'Content-Type': 'application/json'
/Content-Type:text/html;charset=GB2312
Content-Length: 指定了实体正文的长度, 以十进制数字表示
Content-Encoding: 指定了附加在实体正文上的附加内容的压缩类型, E.G. Content-Encoding:gzip
Content-Language: 描述了资源所使用的自然语言
Expires: 指定了响应过期的日期和时间, 以此更新缓存数据, E.G. Expires:Thu,15 Sep 2006 16:23:12 GMT
Last-Modified: 描述了资源的最后修改日期和时间
NOTE: 因为无论 Request 或者 Response 都可能发送 Body, 所以上述的实体报头域是通用的.