写在前面:

第一次想写系列文章,学习了一些web知识后,发现自己还有很大的不足,但又不知道该学习些什么来完善自己的知识体系,偶然在网上看到了一篇介绍http的文章,觉得对自己有一些帮助,于是想要开始学习http,我担心自己不能够坚持下去,所以希望能通过这种方式督促自己学习。

http概览

  HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

——百度百科

  首先,http是一种可靠的数据传输协议,因为它必须是可靠的,假设http是不可靠的,传输的数据总是丢三落四,这样不是很糟糕,你想上网看一篇新闻,结果只显示了第一段和第三段,那不是很崩溃。关于可靠性,在后面的文章再介绍。,即使数据来自很遥远的地方,依旧可以完整的传输过来,不会丢失。

 

http又是无状态的,也就是每次发出的请求都是独立的,和上次的请求是没有关系的。这样的好处是服务器响应的速度会很快,但是很难保持用户的状态,现在一般都是通过cookie和session来保持用户上网时的状态的。关于这个问题,以后的笔记中还会再谈。

Web服务器

   接下来说说web。谈到http,必须要说到web了,因为http协议最广泛的应用就是web了。Web服务器使用的基本都是http协议,所以web服务器也被称为是http服务器,在RedHat中apache在service中使用名字就是httpd。它们在http传输过程中为客户端提供内容,让我们可以看到精彩的内容。

报文初探

我们每天都会用chrome等浏览器向web服务器发送http请求,然后服务器给我们返回一个http响应信息。以上的这个过程被称为事务,也就是一个http请求命令和一个http响应命令组成的一个完整的响应过程。

  这样的解释可能还是不够直观,我们可以使用telnet工具(关于telnet linux用户可以通过yum或者apt-get安装,win用户可以在控制面板中的添加telnet功能)来看看http到底长得是怎么样的吧。

  假设这里有一个web服务器的IP地址是192.168.170.171 端口是默认的80端口,我尝试用telnet去访问它。

 telnet> open 192.168.170.171
Trying 192.168.170.171...
Connected to 192.168.170.171.
Escape character is '^]'.
Get /index.html HTTP/1.1
Host: 192.168.170.171
Accept: *

以上信息中,GET开始到最后就是一次简单的http请求。

我发送完http消息后,立即得到了以下响应:

 HTTP/1.1  OK
Date: Thu, Jun :: GMT
Server: Apache/2.2. (CentOS)
Last-Modified: Thu, Jun :: GMT
ETag: "c01c3-3f-4df03c3a2d5c3"
Accept-Ranges: bytes
Content-Length:
Connection: close
Content-Type: text/html; charset=UTF-
<html>
<body>
<h1>
hello world!
</h1>
</body>
</html>

Html标签前面的就是http响应信息了。

这就是一次简单的http事务了。

它们长得貌似有点吓人。这里面到底有什么东西呢?

 现在让我们看下请求中有什么信息

 GET /index.html HTTP/1.1
Host: 192.168.170.171
Accept: *

首先是GET /index.html HTTP/1.1

这句话定义了客户端是通过GET方法 发送一个获取index.html的页面,在传输中使用的是http1.1协议。

第二句定义了目标主机的地址,当然如果有dns服务器的话,这里写域名地址也是可以的。

第三句话写了客户端期待接受的MINE类型,也就是客户端希望得到的资源是什么类型。*在这里表示接受任何类型。

接下来我们看响应信息。

 HTTP/1.1  OK
Date: Thu, Jun :: GMT
Server: Apache/2.2. (CentOS)
Last-Modified: Thu, Jun :: GMT
ETag: "c01c3-3f-4df03c3a2d5c3"
Accept-Ranges: bytes
Content-Length:
Connection: close
Content-Type: text/html; charset=UTF-
<html>
<body>
<h1>
hello world!
</h1>
</body>
</html>

首句HTTP/1.1 200 OK表示服务器采用http1.1协议传输这段响应报文,状态码200表示响应成功。OK是给管理员看的,也是表示响应成功。

第二句中Date: Thu, 13 Jun 2013 07:14:43 GMT显示了响应发生的时间。

第三句给出了服务器的一些信息。

第四句中Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT,给出了页面上次修改的时间。

第五句中ETag: "c01c3-3f-4df03c3a2d5c3" 这相当于一个版本号,这个和web缓存机制有关。

第六句Accept-Ranges: bytes表示对这个页面资源而言,服务器可以接受的范围类型

第七句Content-Length: 63表示了这个页面的长度

第八句Connection: close表示连接被关闭。

第九句Content-Type: text/html; charset=UTF-8这里表示页面的文本格式,和字符编码。

到这里为止,我对http事务有一个大概的了解,上面的一些信息也许暂时还看不明白,我会在后面的学习中逐步完善。今天就到这里。休息!

http学习笔记(一)的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. andorid frameanimation

    Android中的逐帧动画 先来说说什么是逐帧动画,逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使 ...

  2. Windows下 maven3.3.1的安装步骤+maven配置本地仓库

    简单讲下maven的安装步骤: 1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量. 2.下载maven3,最新版本是Maven3.3.1 ,下载地址:http://m ...

  3. SharePoint 2013开发入门探索(二)- 列表操作

    我们如何用代码对SharePoint列表做些例如增删改查的操作呢?如果您的程序可以部署到服务器上,就可以使用 服务器对象模型,因为服务器对象模型提供的功能最多,限制最少:否则可能要选择客户对象模型等其 ...

  4. 第一个c++程序

    #include <iostream> using namespace std; int main(int argc, const char * argv[]) { //cin接收键盘输入 ...

  5. Unity加载模块深度解析(纹理篇)

    在游戏和VR项目的研发过程中,加载模块所带来的效率开销和内存占用(即“加载效率”.“场景切换速度”等)经常是开发团队非常头疼的问题,它不仅包括资源的加载耗时,同时也包含场景物件的实例化和资源卸载等.在 ...

  6. java连接Oracle数据库

    Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...

  7. Linux cp一个文件夹时提示cp: omitting directory `test/'

    将一个文件夹test 复制到地址/opt/tmp下,提示出错: cp: omitting directory `test/' 原因: test 目录下还有目录,不能直接进行拷贝. 我们先找下cp 的命 ...

  8. c#闭包(转)

    出处:http://www.cnblogs.com/birdwudi/archive/2010/08/20/1804342.html --------------------------------- ...

  9. 【分块打表】bzoj3758 数数

    验证一个数是不是优美的:设数位之和为sum,若sum mod 2 != 0,则不优美.否则考虑枚举这个数的每一位,将之前所有位任意相加产生的所有 数字和 和 当前位 的和塞到集合里,最终判断集合中是否 ...

  10. CodeForces 743A Vladik and flights (水题)

    题意:sb要从a到b,然后要乘坐飞机,只有两家有飞机,如果乘坐同一家的,就免费,如果不是就收到abs(j-i) 的费用,问你最少花费是多少. 析:直接考虑a和b是不是同一家的,如果是,花费为0,如果不 ...