HTTP协议是一个应用层的协议。本文讲述HTTP你协议的格式、方法属性以及实现一个简单的HTTP服务器,该服务器在网页上显示一句Hello World。以下总结了一些HTTP的特点:
- 通常采用客户服务器端的模式
- HTTP服务器的程序规模小,通信速度很快
- HTTP可以通过Content-Type字段指定文本类型,所以灵活
- 无连接,每次连接只处理一个请求,服务器处理完客户的请求,并且收到了客户端的应答之后,断开连接。采用这种方式可以节省传输时间。
- 无状态,HTTP协议每当有新的请求产生,就会产生新的响应。协议本身不保留之前的请求或响应,这样是为了更快的处理大量的事务,保证协议的可伸缩性。但是随着网络的发展,业务逻辑变得复杂,无状态处理起来便的麻烦,在1.1版本的HTTP协议中,虽然还是无状态的,但是采用了cookie技术,用来保存用户的部分信息。
URL
URI和URL
在认识HTTP之前,我们有必要认识URL。我们常说的网址就是一类URL。URL的全称为统一资源定位符。其实还有一个叫做URI的名词,URI指的是统一资源标识符。
两者有什么区别呢?其实URL包含了URL。URI指的是网络上的一种资源,通过它不一定能够找该资源。URL指的是具体的资源,通过它一定可以找到该资源。URL是URI的子集。举个例子,URI就像是身份证上的名字张三,通过张三这个名字我们不一定能找到张三;URL就是身份证上的地址,我们通过这个地址可以找到张三这个人。
URL的格式
- 使用HTTP协议我们的URL的协议方案名就需要是http,其次登陆信息通常是省略的。
- 接下来就是域名或者IP地址,之后用
:
指定端口号,这个端口号跟使用的协议有关。当前使用的http协议对应端口号就是80,https使用的端口号就是443。 - 在这之后通过
/
表示分隔,这里一直到?
之前表示的是访问资源的绝对路径。如果不添加一般默认访问首页。 ?
之后表示的传入的参数,每个参数用键值对的形式表示,同时用&
进行分隔。
HTTP
HTTP协议格式(请求和响应)
通过telnet工具获取了百度的首页信息,这里得到的http响应格式,在图中我用方框圈了四个部分。截图如下:
HTTP请求格式
上图中有一个简单的请求格式,就是我输入的GET / HTTP/1.0
,现在具体说一下浏览器通过域名或IP访问资源的时候的HTTP格式。
- 第一行称为请求行,其中按照顺序包含了:请求方法:通常是GET或POST方法;请求URL:也就是我们在地址栏中输入的信息;HTTP版本信息。这三个元素通过空格分隔开来。
- 第二行一直到空行为止,称为请求报文:这里有若干行,他们以行为单位。每一行的格式都是
属性名: 属性类型
,在冒号之后有一个空格。他们的作用是指定了报文的属性,请求连接的属性。 - 接下来是空行:空行是必须存在的,他用来分隔请求正文和报文。就算请求没有正文空行也是必须存在。
- 最后一个部分是报文正文:通常我们使用GET请求方式是没有正文的。一般来说POST请求的时候会在报文正文中写入传入的参数。
HTTP响应格式
- 第一行是响应行,其中按照顺序包括了:HTTP版本:指定了使用的版本信息;响应状态码:是一个三位数字,成功是200,通常还有3xx、4xx、5xx;状态描述语:这个跟状态码是一起的,用语言进行描述给用户看。这三个用空格分开。
- 第二行一直到空行为止,称为响应报文。跟请求报文一致
- 必有的空行,用来分隔。
- 最后部分响应正文:这里带回的就是我们请求的资源,通常是HTML格式,用于浏览器解析展示或者是一个下载资源等。
HTTP常见的请求方法
我们进行HTTP请求的时候,需要指定方法,常用的有GET、POST、HEAD等。
- GET:获取资源方法;该方法用来请求访问已被URI十倍的资源&#