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去访问它。

1 telnet> open 192.168.170.171 80
2 Trying 192.168.170.171...
3 Connected to 192.168.170.171.
4 Escape character is '^]'.
5 Get /index.html HTTP/1.1
6 Host: 192.168.170.171
7 Accept: *

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

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

 1 HTTP/1.1 200 OK
2 Date: Thu, 13 Jun 2013 07:14:43 GMT
3 Server: Apache/2.2.15 (CentOS)
4 Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT
5 ETag: "c01c3-3f-4df03c3a2d5c3"
6 Accept-Ranges: bytes
7 Content-Length: 63
8 Connection: close
9 Content-Type: text/html; charset=UTF-8
10 <html>
11 <body>
12 <h1>
13 hello world!
14 </h1>
15 </body>
16 </html>

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

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

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

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

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

首先是GET /index.html HTTP/1.1

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

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

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

接下来我们看响应信息。

 1 HTTP/1.1 200 OK
2 Date: Thu, 13 Jun 2013 07:14:43 GMT
3 Server: Apache/2.2.15 (CentOS)
4 Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT
5 ETag: "c01c3-3f-4df03c3a2d5c3"
6 Accept-Ranges: bytes
7 Content-Length: 63
8 Connection: close
9 Content-Type: text/html; charset=UTF-8
10 <html>
11 <body>
12 <h1>
13 hello world!
14 </h1>
15 </body>
16 </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. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

  2. Atitit 软件工程概览attilax总结

    Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...

  3. iOS开发系列—Objective-C之基础概览

    概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会 ...

  4. iOS开发系列--IOS程序开发概览

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  5. Azure SQL Database (19) Stretch Database 概览

    <Windows Azure Platform 系列文章目录>  Azure SQL Database (19) Stretch Database 概览      Azure SQL Da ...

  6. Web前端开发大系概览 (前端开发技术栈)

    前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...

  7. Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx

    Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx 1. 摘要算法的大概流程2 2. 旧约圣经 (39卷)2 2.1. 与古兰经的对 ...

  8. 【WPF系列】基础学习-WPF架构概览

    引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...

  9. jQuery1.11源码分析(1)-----Sizzle源码概览[原创]

    最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的. 本文面向的阅读对象:正在学习 ...

  10. Quartz2D 编程指南(一)概览、图形上下文、路径、颜色与颜色空间

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 0.说明 本篇博客主要是对官方文档 ...

随机推荐

  1. post与get,这两人到底神马区别??

    甲曰:“1. GET使用URL或Cookie传参.而POST将数据放在BODY中. 2. GET的URL会有长度上的限制,则POST的数据则可以非常大. 3. POST比GET安全,因为数据在地址栏上 ...

  2. Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要

    Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要 作者:Eric.Zhang(花名:穿越者7号) 日期:2015年1 ...

  3. Erlang运行中的错误

    Erlang运行时发生错误时,会返回一些错误信息,理解这些信息,对于学好.用好Erlang来说是必要. Erlang中的运行错误包括:badarg, badarith, badmatch, funct ...

  4. C#在outlook里创建一封邮件到草稿箱

    原文:C#在outlook里创建一封邮件到草稿箱 1.引用Microsoft.Office.Interop.Outlook.dll 2.  实现代码 public static int SendToD ...

  5. SQLServer通过链接服务器远程删除数据性能问题解决

    原文:SQLServer通过链接服务器远程删除数据性能问题解决 在上一遍文章中介绍了SQLServer通过链接服务器访问Oracle性能问题的解决方法,本文介绍链接服务器下远程删除SQLServer数 ...

  6. 解决Shockwave flash在chrome该浏览器崩溃

    越来越多的人开始使用chrome浏览器,很多用户都遇到过flash崩溃.有时重启chrome为了解决,有时不可能使用chrome无论打开什么网站是什么flash.这个问题是非常小的Firefox或IE ...

  7. 【值得收藏】绘图工具Origin的学习资料汇编【可免费下载】

    Origin使用教程 Origin为OriginLab公司出品的较流行的专业函数绘图软件,是公认的简单易学.操作灵活.功能强大的软件,既可以满足一般用户的制图需要,也可以满足高级用户数据分析.函数拟合 ...

  8. C#Console程序使用Ninject

    本来想使用一下Ninject的,然后搜索了很久,都没找到比较详细的关于Ninject的使用方法等内容.于是乎干脆自己来写几篇介绍Ninject的内容. 1.      依赖注入和IOC 依赖注入和IO ...

  9. Scientific Toolworks Understand for linux安装方法

    1.首先从官网http://www.scitools.com/download/index.php下载Linux版本 2.解压到安装目录下: 32位:gzip -cd Understand-3.1.6 ...

  10. 使用Repository模式构建数据库访问层

    使用Repository模式构建数据库访问层 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[二]——使用Repository模式构建数据库访问层 系列导航地址http:// ...