第41章      HTTP超文本传输协议基础知识

本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习。

(本章的知识点主要整理自网络)

41.1  初学者重要提示

41.2  HTTP基础知识参考资料

41.3  HTTP基础知识点

41.4  HTTP通信实例

41.5  总结

41.2  HTTP基础知识参考资料

大家可以从以下地址获得HTTP基础知识:

对于初学者来说,学习上面四个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍。

41.4 HTTP通信实例

为了帮助大家更好的理解HTTP的请求消息和响应消息,我们这里举一个例子。请求消息如下(注意,下面代码有4行,第3行和第4行都是回车换行):

GET /index.html HTTP/1.1

Host: www.example.com
  • GET /index.html HTTP/1.1

这个是请求行,请求方法使用GET,请求的URL是/index.html,即获取此网页内容,协议版本是HTTP/1.1。特别注意,这三个部分之间一定要有空格,且末尾一定要带回车换行。回车换行在这里的表现形式就是切换到了下一行Host。

这个是请求头域,Host头域必须要有,这里是访问网站www.example.com。特别注意,末尾也要有回车和换行符,反映在这里就是空白的第3行,由回车和换行符切换到这一行的。

  • 空行

空行也是必不可少的,反映在这里就是空白的第4行,也是由回车和换行符切换到这一行的。

为了让大家看到回车换行的效果,将请求消息整理到记事本里面,然后用winhex软件打开这个记事本就可以看到回车换行的数值了。

下面我们测试HTTP请求消息,测试方法也比较简单,依然使用我们TCP通信章节用的网络调试助手。

  1. 第1步:创建客户端。
  2. 第2步:填写请求信息。
  3. 第3步:点击发送就可以看到返回的响应消息了。

返回的完整消息内容如下:

HTTP/1.1  OK

Cache-Control: max-age=

Content-Type: text/html

Date: Sun,  Aug  :: GMT

Etag: "359670651+ident"

Expires: Sun,  Aug  :: GMT

Last-Modified: Fri,  Aug  :: GMT

Server: ECS (rhv/)

Vary: Accept-Encoding

X-Cache: HIT

Content-Length: 

<!doctype html>

<html>

<head>

    <title>Example Domain</title>

    <meta charset="utf-8" />

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <style type="text/css">

    body {

        background-color: #f0f0f2;

        margin: ;

        padding: ;

        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

    }

    div {

        width: 600px;

        margin: 5em auto;

        padding: 50px;

        background-color: #fff;

        border-radius: 1em;

    }

    a:link, a:visited {

        color: #38488f;

        text-decoration: none;

    }

    @media (max-width: 700px) {

        body {

            background-color: #fff;

        }

        div {

            width: auto;

            margin:  auto;

            border-radius: ;

            padding: 1em;

        }

    }

    </style>   

</head>

<body>

<div>

    <h1>Example Domain</h1>

    <p>This domain is established to be used for illustrative examples in documents. You may use this

    domain in examples without prior coordination or asking for permission.</p>

    <p><a href="http://www.iana.org/domains/example">More information...</a></p>

</div>

</body>

</html>
  • HTTP/1.1 200 OK

这个是状态行,协议版本HTTP/1.1,状态码200,状态码描述OK,表示响应消息返回成功。

  • Cache-Control

这个是响应头域,表示缓冲控制,无论是否可以缓存此对象,都要告诉服务器到客户端的所有缓存机制。这里表示604800秒后缓冲的内容失效。

  • Content-Type

属于响应头域,内容类型用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件。这里返回的内容类型是TEXT/HTML。

  • Date

属于响应头域,表示此条消息被发送时的日期和时间。

  • Etag

属于响应头域,表示对于某个资源的某个特定版本的一个标识符,通常是一个消息散列。ETag是HTTP协议提供的若干机制中的一种Web缓存验证机制,并且允许客户端进行缓存协商。

  • Expires

属于响应头域,表示指定一个日期/时间,超过该时间则认为此回应已经过期。

  • Last-Modified

属于响应头域,表示所请求对象的最后修改日期。

  • Server

属于响应头域,表示服务器名字。

  • Vary

属于响应头域,用于告知下游的代理服务器,应当如何对未来的请求协议头进行匹配,以决定是否可使用已缓存的回应内容而不是重新从原始服务器请求新的内容。

  • X-Cache

属于响应头域,表示HTTP请求是由代理服务器回应的,HIT表示代理直接回应。

  • Content-Length

属于响应头域,表示回应消息体的长度,即实际内容,单位字节。这里是1270字节的数据。

  • 剩下的内容就是HTML格式的消息实体了。

具体大家可以实际操作下,有个感性的认识,另外就是换个其它的网址也操作下,加深理解。

【安富莱TCPnet网络教程】HTTP通信实例的更多相关文章

  1. 【安富莱二代示波器教程】第19章 附件E---参考资料

    第19章      附件E---参考资料 DSP教程 http://forum.armfly.com/forum.php?mod=viewthread&tid=3886 . FreeRTOS教 ...

  2. 【安富莱二代示波器教程】第18章 附件C---波形拟合

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第18章      附件C---波形拟合 emWin5. ...

  3. 【安富莱二代示波器教程】第17章 附件B---功能扩展和改进方向

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第17章      附件B---功能扩展和改进方向   ...

  4. 【安富莱二代示波器教程】第16章 附件A---电阻屏触摸校准

    第16章      附件A---电阻屏触摸校准 二代示波器的触摸校准比较简单,随时随地都可以做触摸校准,按下K1按键即可校准.有时候我们做触摸校准界面,需要在特定的界面才可以进入触摸校准状态,非常繁琐 ...

  5. 【安富莱二代示波器教程】第6章 示波器设计—双通道ADC驱动

    第6章        示波器设计—双通道ADC驱动 本章节为大家讲解示波器的ADC驱动,采用STM32自带ADC实现.关于STM32F429的ADC,可以说处处有地雷,不小心就踩上了,如果简单的使用, ...

  6. 【安富莱STM32H7教程】第1章 初学STM32H7的准备工作

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第1章   初学STM32H7的准备工作 俗话说万事开头 ...

  7. 【安富莱】RTX嵌入式操作系统教程发布,支持F103,F407和F429,含81个配套例程(2017-10-17)

    前言说明:1. 首先感谢大家对我们安富莱电子一年来的支持,2016年我们会再接再厉推出更好的教程. 2. 估计也有网友会问RTX的优势在那里,针对这个问题,教程中第一章分为6条专门回答了这个问题,有兴 ...

  8. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

  9. 【安富莱专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控

    说明:1.  开发板Web服务器的设计可以看我们之前发布的史诗级网络教程:链接.2.  需要复杂些的Web设计模板,可以使用我们V6开发板发布的综合Demo:链接.3.  教程中使用的是花生壳免费版, ...

随机推荐

  1. FPGA学习笔记(一)——初识FPGA

    ###### [该随笔部分内容转载自小梅哥]       ######### FPGA(Field-Programmable Gate Array,现场可编程门阵列),正如其名,FPGA内部有大量的可 ...

  2. Jmeter运行后出现乱码

    1.响应结果出现乱码一般是编码的问题,汉子乱码在编码处编码写成utf-8 2.如果还不行,对jmeter的文件进行修改.具体修改方法参考https://blog.csdn.net/liu5781821 ...

  3. 你不知道的JavaScript--Item18 JScript的Bug与内存管理

    1.JScript的Bug IE的ECMAScript实现JScript严重混淆了命名函数表达式,搞得现很多人都出来反对命名函数表达式,而且即便是现在还一直在用的一版(IE8中使用的5.8版)仍然存在 ...

  4. Canvas的基本用法

    canvas没有设置宽度和高度的时候,会初始化宽度:300像素和高度:150像素.可以使用CSS来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果CSS的尺寸与初始画布的比例不一致,它会出现扭曲 ...

  5. Python爬虫利器四之PhantomJS的用法

    前言 大家有没有发现之前我们写的爬虫都有一个共性,就是只能爬取单纯的html代码,如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了. ...

  6. Dubbo中编码和解码的解析

    (这里做的解析不是很详细,等到走完整个流程再来解析)Dubbo中编解码的工作由Codec2接口的实现来处理,回想一下第一次接触到Codec2相关的内容是在服务端暴露服务的时候,根据具体的协议去暴露服务 ...

  7. baseFileWriter.go

    package blog4go import ( "fmt" "os" "sync" "time" ) const ( ...

  8. 从构建分布式秒杀系统聊聊Disruptor高性能队列

    前言 秒杀架构持续优化中,基于自身认知不足之处在所难免,也请大家指正,共同进步.文章标题来自码友 简介 LMAX Disruptor是一个高性能的线程间消息库.它源于LMAX对并发性,性能和非阻塞算法 ...

  9. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

  10. RocketMQ源码 — 十一、 RocketMQ事务消息

    分布式事务是一个复杂的问题,rmq实现了事务的最终一致性,rmq保证本地事务成功消息一定会发送成功并被成功消费,如果本地事务失败了,消息不会被发送. rmq事务消息的实现过程为: producer发送 ...