HTTP协议解析-实现超简单的多线程版本HTTP服务器

个人博客传送门

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的格式

URL

  • 使用HTTP协议我们的URL的协议方案名就需要是http,其次登陆信息通常是省略的。
  • 接下来就是域名或者IP地址,之后用:指定端口号,这个端口号跟使用的协议有关。当前使用的http协议对应端口号就是80,https使用的端口号就是443。
  • 在这之后通过/表示分隔,这里一直到?之前表示的是访问资源的绝对路径。如果不添加一般默认访问首页。
  • ?之后表示的传入的参数,每个参数用键值对的形式表示,同时用&进行分隔。

HTTP

HTTP协议格式(请求和响应)

通过telnet工具获取了百度的首页信息,这里得到的http响应格式,在图中我用方框圈了四个部分。截图如下:

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十倍的资源&#
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值