http协议
HTTP协议是互联网的基石,被广泛用于互联网中,我们所访问的网页都是通过HTTP协议传输的。
不管是直接在浏览器里输入url,还是通过页面点击跳转,还或是通过JS等客户端发送请求,都会将这一请求封装成HTTP协议,发送到web服务器上。web服务器收到HTTP请求,再进行相应的处理,将返回数据封装程HTTP协议,发送回去。
因此,如果要开发一个web站点,至少要做两件事:1、HTTP协议的解析,2、HTTP协议的封装。
首先,HTTP 是一个协议。不过,协议又是什么呢?其实“协议”并不仅限于计算机世界,现实生活中也随处可见。例如,你在刚毕业时会签一个“三方协议”,找房子时会签一个“租房协议”,公司入职时还可能会签一个“保密协议”,工作中使用的各种软件也都带着各自的“许可协议”。刚才说的这几个都是“协议”,本质上与 HTTP 是相同的,那么“协议”有什么特点呢?
第一点,协议必须要有两个或多个参与者,也就是“协”。如果只有你一个人,那你自然可以想干什么就干什么,想怎么玩就怎么玩,不会干涉其他人,其他人也不会干涉你,也就不需要所谓的“协议”。但是,一旦有了两个以上的参与者出现,为了保证最基本的顺畅交流,协议就自然而然地出现了。
第二点,协议是对参与者的一种行为约定和规范,也就是“议”。协议意味着有多个参与者为了达成某个共同的目的而站在了一起,除了要无疑义地沟通交流之外,还必须明确地规定各方的“责、权、利”,约定该做什么不该做什么,先做什么后做什么,做错了怎么办,有没有补救措施等等。
接下来我们来看 HTTP 字面里的第二部分:“传输”。计算机和网络世界里有数不清的各种角色:CPU、内存、总线、磁盘、操作系统、浏览器、网关、服务器等等,这些角色之间相互通信也必然会有各式各样、五花八门的协议,用处也各不相同,例如广播协议、寻址协议、路由协议、隧道协议、选举协议等等。HTTP 是一个“传输协议”,所谓的“传输”(Transfer)其实很好理解,就是把一堆东西从 A 点搬到 B 点,或者从 B 点搬到 A 点,即“A<===>B”。别小看了这个简单的动作,它也至少包含了两项重要的信息。
第一点,HTTP 协议是一个“双向协议”。也就是说,有两个最基本的参与者 A 和 B,从 A 开始到 B 结束,数据在 A 和 B 之间双向而不是单向流动。通常我们把先发起传输动作的 A 叫做请求方,把后接到传输的 B 叫做应答方或者响应方。拿我们最常见的上网冲浪来举例子,浏览器就是请求方 A,博客、百度这些网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把一些数据发送给网站,网站再把一些数据发回给浏览器,最后展现在屏幕上,你就可以看到各种有意思的新闻、视频了。
第二点,数据虽然是在 A 和 B 之间传输,但并没有限制只有 A 和 B 这两个角色,允许中间有“中转”或者“接力”。这样,传输方式就从“A<===>B”,变成了“A<=>X<=>Y<=>Z<=>B”,A 到 B 的传输过程中可以存在任意多个“中间人”,而这些中间人也都遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意的额外功能,例如安全认证、数据压缩、编码转换等等,优化整个传输过程。
最后我们终于可以看到 HTTP 字面里的第三部分:“超文本”。既然 HTTP 是一个“传输协议”,那么它传输的“超文本”到底是什么呢?我还是用两点来进一步解释。所谓“文本”(Text),就表示 HTTP 传输的不是 TCP/UDP 这些底层协议里被切分的杂乱无章的二进制包(datagram),而是完整的、有意义的数据,可以被浏览器、服务器这样的上层应用程序处理。在互联网早期,“文本”只是简单的字符文字,但发展到现在,“文本”的涵义已经被大大地扩展了,图片、音频、视频、甚至是压缩包,在 HTTP 眼里都可以算做是“文本”。所谓“超文本”,就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。对于“超文本”,我们最熟悉的就应该是 HTML 了,它本身只是纯文字文件,但内部用很多标签定义了对图片、音频、视频等的链接,再经过浏览器的解释,呈现在我们面前的就是一个含有多种视听信息的页面。
下面从HTTP协议出发,解析一些HTTP常见字段的意义和作用
客户端发送一个HTTP请求到服务器的请求消息包括:请求行、请求头部、空行、请求正文
一、HTTP请求,例如:
1、请求行:包括协议和请求类型,最常用的是GET和POST,还有一些不常用的类型DELETE、PUT、TRACE等
2、消息头:即request header
1).指定host
2).content-type和content-length
3).也有的会在header里面存放请求参数的
3、请求正文,即request body
1).请求报文,随content-type的不同,而使用不同的格式
服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息包括:状态行、消息报头、空行和响应正文
二、HTTP响应,例如:
1、状态行
1). 1**:信息,服务器收到请求,需要请求者继续执行操作
2). 2**:成功,操作被成功接收并处理
3). 3**:重定向,需要进一步的操作以完成请求
4). 4**:客户端错误,请求包含语法错误或无法完成请求
5). 5**:服务器错误,服务器在处理请求的过程中发生了错误
2、消息头,即response header,经常用于
1).指定content-type,比如:json
2).指定content-length,一般不需要指定,会自动计算
3).返回一些表单字段
3、响应正文,即response body,经常用于返回响应结果,比如:
1).JSON
2).HTML
3).文件输入输出流