这篇文章算是正式开始学习的第一篇技术文章,在阅读搜集到的几篇博客文章后,对 HTTP 协议的相关知识作一下总结。html
HTTP 是互联网中最基础的网络协议,日常咱们上网浏览网页、听音乐、玩游戏等行为都离不开这个协议。对于开发者来讲,在开发应用程序时,都少不了须要网络功能。所以,了解 HTTP 协议是颇有必要的。编程
HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是一个基于 TCP/IP 的应用层网络协议,它不涉及数据包的传输,规定了客户端与服务器端的通讯格式。用于从万维网(WWW)服务器传输超文本到本地客户端。HTTP 从1991年发布0.9版开始,通过20多年的发展,不断完善和扩展。浏览器
HTTP 协议的工做原理缓存
HTTP 协议是基于 C/S(客户端/服务端)架构模型来实现的。浏览器做为客户端向Web服务器发送请求,Web服务器收到请求后,向客户端发送响应信息。常见的Web服务器有 Apache 服务器、IIS 服务器等。服务器
HTTP 协议的特色网络
HTTP URL 格式架构
http 表示使用 HTTP 协议来发送网络请求;host 表示合法的 Internet 主机域名或者IP地址;port 表示端口号,HTTP 协议默认使用 80 端口,也能够另外指定;abs_path 表示指定的 Web 服务器上可用资源的 URI。app
接下来介绍 HTTP 协议中的报文,包含两种类型,请求报文和响应报文,分别对应客户端向服务器发送请求以及服务器响应请求这两个过程。curl
HTTP 请求报文的通常格式如图所示:
请求报文包含请求行、请求报头、空行和请求数据 4 个部分。
请求行
请求行由请求方法、URL 字段和 HTTP 协议的版本组成,如示例:
GET www.runoob.com/http/http-t… HTTP/1.1
HTTP 的请求方法共有 8 个,HTTP 协议 1.0 版本中定义了GET、POST、HEAD 这 3 个方法,1.1 版本时又新增了PUT、DELETE、TRACE、CONNECT、OPTION 这 5 个方法。其中最经常使用的是 GET 和 POST。
请求报头(header)
请求行以后会有 0 个或多个请求报头,若是有请求报头,则每行有 1 个请求头,都是以键值对的形式表示,包括头部域的名字和值,中间用 “:” 分隔。
空行
协议中用空行来表示请求报头的结束,空行以后就是请求数据。
请求数据
请求数据是客户端向服务器发送的数据,GET 请求中没有请求数据,出如今使用 POST 方法来向服务器提交表单等情景中。和请求数据相关的最经常使用的请求头是 Content-Type 和 Content-Length。
如下是一个完整的请求报文实例:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
HTTP 响应报文的通常格式以下图所示:
响应报文包含状态行、响应报头、空行和响应正文 4 个部分。空行表示响应头部和正文的分隔,相应正文则表示服务器返回的资源的内容,主要介绍一下状态行和 HTTP 协议中的消息报头(请求报头和响应报头都属于它的一个分类,因此放在一块儿介绍)。
状态行
状态行依次包括 HTTP 版本、状态码以及该状态码对应的缘由短语,示例以下:
HTTP/1.1 200 OK
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的做用。HTTP状态码共分为5种类型:
常见的HTTP状态码有:
消息报头能够分为通用报头、请求报头、响应报头和实体报头。以键值对的形式存在,每行一对,名字和值之间用 “:” 来进行分隔。
通用报头
通用报头既能出如今请求报头也能出如今响应报头中。
请求报头
请求报头容许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
常见的请求报头有:
响应报头
响应报头用于服务器向客户端发送信息。
常见的响应报头有:
实体报头
请求和响应消息均可以传送一个实体。实体报头定义了关于实体正文和请求所标识的资源的元信息。
常见的实体报头有:
如下是一个响应报文的实例:
HTTP/1.1 304 Not Modified
Date: Thu, 12 Oct 2017 09:20:27 GMT
Via: 1.1 varnish
Cache-Control: max-age=600
Expires: Thu, 12 Oct 2017 09:02:02 GMT
Age: 0
Connection: keep-alive
X-Served-By: cache-hkg17934-HKG
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1507800028.883579,VS0,VE164
Vary: Accept-Encoding
X-Fastly-Request-ID: 17fc09b064ce9669f38931c159ec01384cc3f8de
HTTP 协议的有关知识暂时就到这里,大体上梳理了 HTTP 协议的总体工做流程,掌握了大部分的内容,其中的一些细节仍是没有把握好,好比消息报头、Content-Type 没有深刻的去理解。(本文图片转载自菜鸟教程与刘望舒博客,侵删)
下一篇文章,将是有关 Android 中 WebView 的使用。
下次见。
参考文章
学习过程当中阅读了以下几篇文章和教程,感谢这些做者辛勤付出。
刘望舒: Android网络编程(一)HTTP协议原理
liuwangshu.cn/application…
Jeffrey : HTTP协议详解
www.cnblogs.com/li0803/arch…
阮一峰: HTTP 协议入门
www.ruanyifeng.com/blog/2016/0…
菜鸟教程: HTTP 教程
www.runoob.com/http/http-t…