查看: 4788|回复: 5

【物联网学习系列分享】之HTTP协议介绍

[复制链接]
  • TA的每日心情

    2019-1-19 20:35
  • 签到天数: 300 天

    [LV.8]以坛为家I

    发表于 2017-4-23 18:32 | 显示全部楼层 |阅读模式
    本帖最后由 michael_llh 于 2017-4-23 18:44 编辑

           在我们介绍HTTP之前我们先大概来了解一下一个WEB的访问流程,从而对浏览器访问到WEB的一个流程有一个清晰的了解。

           首先,在访问一个WEB页面的时候,我们需要在浏览器中输入要访问的站点域名,比如说www.baidu.com,然后后面发生了什么呢?首先这请求会先去访问DNS服务器,DNS的全程是domain name system,翻译过来就是域名系统,它提供的功能是完成一个域名到IP地址的转化。这里有引出一个问题,IP地址是什么?

           IP地址,internet protocol address,网际协议地址,它就有点类似一个身份证,给每台电脑给定了一个标签,每个人都是唯一不同的(有歧义)。现在的IP地址分为两类,IPV4和IPV6,IPV4是用32位表示,而IPV6是用128位表示。目前还是以IPV4为主,慢慢向IPV6过渡。对于IPV4的表示形式基本都是以点分十进制的方式展现的,比如说10.3.232.121这样。那么对于每一台连接到互联网的电脑都有一个自己的IP地址。

            这里我们大概说一下为什么有IPV4和IPV6,IPV4是用点分十进制表示,每个一个点分之中的数字可以取从0~255中间的任意一个数值,假设我们将这些IP地址全部用于互联网的每一台电脑,最多互联网上面可以连接2564=4294967296台主机,大概是42亿,这是最理想的情况,但是其中我们还对这些地址进行了细分,私有IP地址段是不对外的,去掉说环路测试IP:127.0.0.1,等等,所以实际上只有25.68亿个地址是可以直接在互联网上使用的,再加上现在越来越多的互联网设备,以及智能家居设备的引入,IP地址资源越发匮乏,所以引入了IPV6来解决IP地址不够用的情况。这里也只是简单介绍一下关于IP地址的一些东西,想深入了解的话大家还需要多查阅些资料和书籍。

           现在我们明白了IP地址对于访问的WEB的重要性了,所以当我们从DNS服务器那边拿到了www.baidu.com的服务器地址,这个时候我们就可以去访问WEB服务器向它发起请求来获取baidu的页面。
    图片1.png
           现在大家可以大概理解一个WEB的访问流程了吧,但是这个又有一个问题,既然说IP地址是访问一个服务器的关键,但是浏览器第一次需要获取www.baidu.com的IP地址时需要访问DNS服务器,那DNS服务器的地址是哪里来的呢,这就需要引入DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)这个服务器可以帮你设置你电脑的IP啊,包括DNS的IP地址。

           上面我们是简化了WEB的访问流程,最初的WEB是以这样的形式,但是现在WEB访问是复杂非常多了。但中心思想是这样的方式。

           现在我们要引入今天要谈的http了。http的全称是HyperText Transfer Protocol,超文本传输协议,这个协议的提出就是为了提供和接收HTML界面,通过这个协议在互联网上面传出web的界面信息。

           那么具体什么是HTTP协议呢?
           下面我们看一个具体的例子,这里我们需要使用google的chrome浏览器,然后我们按F12进入chrome的开发者工具。
    图片2.png
           然后我们选择NetWork标签栏:
    图片3.png
           在这个选项卡中我们可以看到很多获取的文件信息
    图片4.png
           我们随便举个例子,比如我们选择www.baidu.com,那么在右侧我们可以看到向WEB服务器的请求和响应信息。
    图片5.png
           我们看一下请求头,这个已经是chrome帮我们分类整理过的的Request Header。
    图片6.png
           选择Request Headers旁边的view source按钮,就可以查看请求头的源码是什么了。
    图片7.png
           好了,到这里我们就可以看到HTTP协议的应用了,上面的请求源码就是按照HTTP协议来写的,同样的大家可以自己亲手试试,自己看下Response的返回源码是什么,这里我们先直接给大家贴出来了。
    图片8.png

           经过上面的时间我们知道了浏览器是通过HTTP协议来和WEB服务器进行通信的,当我们请求一个WEB页面的时候,由浏览器按照HTTP协议向服务器发送一个请求说,我要看这个界面,你发给我,然后服务器给浏览器返回一个Response,浏览器根据这个判断返回的页面对不对,对的话就显示出来。其中的HTTP协议就相当于一种语言,用于WEB服务器和浏览器之前的语言,没有这个语言,两个人就听不懂,不知道你要干什么,而我们就是定义了HTTP协议这个语言来解决双方的沟通问题。

           现在我们需要大概来谈一下HTTP协议的格式问题,因为我们可能后面是需要用到这个东西的。
           HTTP协议的两个过程,Request和Response,两个都有各自的语言格式,我们看下是什么。
    请求报文格式:(注意这里有个换行)
    <method> <request-URL> <version>
    <headers>

    <entity-body>
    响应报文格式:(注意这里有个换行)
    <version> <status> <reason-phrase>
    <headers>

    <entity-body>
           好了我们大概来解释一下:
    方法method:
           这个很重要,比如说GET和POST方法,这两个是很常用的,当然还有其他的,这里暂且不介绍,GET就是获取什么内容,而POST就是向服务器发送什么数据。
    请求URL:
           这个是什么意思呢,这里我们先说明一下,当我们访问WEB的时候是访问主机的什么内容。比如你有一个web服务器,那么这个服务器会设置一个你主机的本地目录地址,比如说D:/web这样,Linux底下可能是/usr/www/html或者其他的,那么这个对应的就是我们本地主机下一个目录,当我们在WEB设置了这个目录为WEB的地址,那么当我们去访问WEB的时候实际访问的就是这个地址,比如你在D:/web下面放一个index.html,你的IP地址(10.123.231.22)或者域名(www.myweb.com),我们在浏览器访问10.123.231.22/index.html或者www.myweb.com,对应的就是访问到这个目录下的index.html文件,可以明白了吗。那么这里填写的URL是不包含IP地址或者域名的,所以我们一般看到的就是“/”。
    版本version:
           格式是HTTP/<major>.<minor>这样的格式,比如说HTTP/1.1.这个版本代表的就是我们使用的HTTP协议的版本,现在使用的一般是HTTP/1.1
    状态码status:
           状态码是三个数字,代表的是请求过程中所发生的情况,比如说200代表的是成功,404代表的是找不到文件。
    原因短语reason-phrase:
           是状态码的可读版本,状态吗就是一个数字,如果你事先不知道这个数字什么意思,可以先查看一下原因短语。
    首部header:
           注意这里的header我们不是叫做头,而是叫做首部。可能有零个首部也可能有多个首部,每个首部包含一个名字后面跟着一个冒号,然后是一个可选的空格,接着是一个值,然后换行。
    实体的主体部分entity-body:
           实体的主体部分包含一个任意数据组成的数据块,并不是所有的报文都包含实体的主体部分,有时候只是一个空行加换行就结束了。

          这些内容大家作为了解,没有必要去死记,实在不记得可以记得去哪里查就可以了。

          下面我们举个简单的例子:

    请求报文:
    GET /index.html HTTP/1.1   
    Accept: text/*


    响应报文:
    HTTP/1.1 200 OK
    Content-type: text/plain
    Content-length: 3


    Hi!

           当然这里面还有很多的内容,如果大家想深入学习HTTP的话我在后面上传了一份HTTP权威指南,如果有耐心过一遍的话应该可以理解的比较深刻,如果可以的话。那么我们就先介绍到这里,如果有需要用到深入的知识,后续会补充这方面的知识的。Chrome的F12调出的调试工具对于WEB开发是非常好用的,建议大家自己尝试玩一玩。

    因为论坛上传限制。PDF文件有点大,所以放到网盘了:
    链接:http://pan.baidu.com/s/1ccTYwe 密码:3lef
    (有失效可以回复提醒更新)


    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2019-3-15 00:28
  • 签到天数: 630 天

    [LV.9]以坛为家II

    发表于 2017-4-23 19:37 | 显示全部楼层
    给楼主点赞
    打赏作者鼓励一下!
  • TA的每日心情

    2019-1-19 20:35
  • 签到天数: 300 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-4-23 21:39 | 显示全部楼层

    谢谢,多来逛逛呀!
    打赏作者鼓励一下!
  • TA的每日心情

    2019-1-19 20:35
  • 签到天数: 300 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-5-24 01:02 | 显示全部楼层
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    有没人做过把arduino跟生物结合起来做课题的
    有没人做过把arduino跟生
    我想做一些这方面的有没有人做过可以稍微指点一下
    跪求,nano读两个软串口传感器,写入sd卡,一个读不到数
    跪求,nano读两个软串口传
    dfrobot的nano板,两个软串口连接攀藤pm2.5传感器和GPS ublox m8n,SPI连sd卡模块。
    Arduino2560/MegaPi与ROS机器人操作系统的连接
    Arduino2560/MegaPi与ROS
    大家好,我因为需要更多时间维系琐碎平凡的工作和生活,一段时间没有上Arduino论坛。
    atmegu328p开发板怎么做流水灯啊
    atmegu328p开发板怎么做流
    我是白小 求指点
    BuddyBlock 1.0.0 测试版发布,一款面向Arduino的图形化开发工...
    BuddyBlock 1.0.0 测试版
    BuddyBlock是一款面向Arduino图形化编程开发的集成开发工具,开发者可以通过积木模块
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表