参考书籍——《HTTP权威指南》

1、web客户端和服务器

http客户端发出请求,其中包含请求内容,发给服务器,服务器再返回内容中回送请求的数据,http客户端和服务器构成了万维网的基本组件

我们常说的客户端,就是web浏览器,比如微软的IE、Google的chrome,火狐的Firefox等,浏览器向服务器发送http请求对象,并将对象显示在你的屏幕上

2、资源

web服务器是web资源的宿主,源头;最简单的web资源就是服务器文件系统中的静态文件,其中可能包含很多内容:文本文件、HTML文件、word文件、图片文件、AVI电影文件、Adobe的acrobat文件等所有你可以想象到的文件

但资源不局限于静态文件,它还可以根据需要生成软件程序(比如照相机中活生生的照片、股票交易、房产交易的数据库、在线商店中的礼物等等)

总之,所有类型的内容都来源于资源。。。

2.1 媒体类型

互联网上有数千种不同的数据类型,http给每种需要通过http传输的对象都打上了MIME类型(MIME type)的数据格式标签

MIME:多用途英特网邮件扩展

web浏览器每次从服务器取回一个对象时,会先查看其MIME类型,看看能否处理该类型;大多数浏览器都可以处理数百种常见的对象类型

MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔,例如

HTML格式的文本文档:text/html

普通的ASCII文本文档:text/plain

图片类型:image/jpeg、image/gif

2.2 URI

每个服务器资源都有一个名字,这样客户端就可以说明它对什么资源感兴趣

服务器资源名称被称为:统一资源标识符(Uniform Resource Identifier,URI)

URI就像因特网上的邮政地址一样,在世界范围内唯一标识并且定位信息资源

2.3 URL

URL:统一资源定位符是资源最常见的形式,它描述了一台特定服务器上某资源的特定资源,明确说明了如何从一个精确、固定的位置获取资源

上图的URL说明了协议、服务器和本地资源

大部分URL遵循一种标准格式,该格式包含三个部分:

第一部分:方案;说明了访问资源所使用的协议类型,通常为http协议:hhtp://

第二部分:地址;比如:www.baidu.com

第三部分:指定服务器上某个资源,比如:specisal/saw-blade.gif

2.4 URN

URI的第二种方式就是URN:统一资源名;URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关,使用URN,可以将资源四处转移,还可用同一个名字通过多种网络协议来访问资源

URN还处于试验阶段,因为其有效的工作需要一个支撑架构来解析资源的位置。而此类架构比较缺乏,后面详解介绍

3、事务

一个事务由一条请求命令和一条响应结果构成,这种通信时通过http报文(HTTP message)的格式化数据块进行的

事务也可以理解为从客户端到服务器再到客户端,一次完整通信的过程

3.1方法

http支持八种不同的请求命令,被称为方法,每条请求报文都包含一个方法,告诉服务器要执行什么动作,之前有专门介绍过这几种方法,传送门:http://www.cnblogs.com/imyalost/p/5630940.html

3.2状态码

每条响应报文都会携带一个状态码,用以告知客户端,请求结果,或是否需要其他动作,之前也有介绍过这几种状态码,传送门:http://www.cnblogs.com/imyalost/p/5688169.html

3.3一个web界面中可以包含多个对象

通常并不是单个资源,而是一组资源的集合(一个事务获得一种资源,不同的资源【甚至分布在不同服务器上】组合构成一个界面)

4、报文

构成:一行行简单的字符串组成

特点:纯文本,方便读写

请求报文(request message):从客户端发往服务器

响应报文(response message):从服务器发往客户端

http报文包括以下三个部分:

起始行:报文第一行,用来说明要做什么,出现了什么情况

首部字段:位于起始行后面,有零个或者多个,每个首部字段都包含一个名字和一个值,便于解析,之间用冒号(:)隔开,以一个空行结束

主体:空行下面为报文主体,其中包含了所有类型的数据

5、连接协议

5.1 TCP/IP

http协议是位于整个数据传输通信的最上层应用层协议,不关注细节,负责通信细节的协议为传输层控制协议(Transmission Control Protocl,TCP)

TCP特点:1)无差错的数据传输

2)按序传输(按照数据发送顺序到达服务器)

3)未分段的数据流(任意时刻任何大小将数据发出去)

英特网是全世界计算机和网络设备最常用的层次化分组交换网络协议集,其隐藏了网络和硬件的特点和弱点,使各类型的计算机和网络都能进行可靠的通信

下面是互联网协议的五层协议栈

5.2 连接、IP地址及端口号

客户端向服务器发送请求报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接通道

URL是资源的地址,自然能够为我们提供储存资源的机器的地址,看下面几个URL:

http://207.200.83.29:80/index.html

http://www.netscape.com:80/index.html

http://www.netscape.com/index.html

第一个使用了机器的IP地址207.200.83.29,以及端口号80

第二个使用了文本形式的域名(主机名:IP地址比较人性化的别称)。通过域名服务(Domain Name Service,DNS)机制对主机名进行转换,后面详细介绍这一部分

第三个没有端口号,这种情况一般默认端口号为80。

下图为浏览器通过http显示服务器中某个简单HTML资源的流程导图

步骤如下:

1)浏览器从URL中解析出服务器主机名;

2)浏览器将主机名转换为服务器的IP地址;

3)浏览器将端口号(如果有)从URL中解析出来;

4)浏览器建立一条与服务器的连接TCP连接通道;

5)浏览器向服务器发送一条http请求报文;

6)服务器向浏览器发送一条http响应报文;

7)结束通信,关闭连接,浏览器显示具体资源;

说到这里,我很想写写关于数据通信时候所谓的“三次握手”,但之前的http协议基础中已经介绍过,还不懂的可以去里面找找,其实就是数据的封装

6、协议版本

目前我们使用的http协议版本是http1.1,其重点关注的是校正http设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除一些不好的特性

HTTP-NG(http2.0):是http1.1后继结构的原型建议,重点关注性能的大幅优化,以及更强大的服务逻辑远程执行框架

目前http2.0还在不断商议中,可能被应用到的新技术预计有以下7种,不排除有重大更改的可能性

7、web的结构组件

web的应用程序,除了浏览器和服务器之外,还有其他几个很重要的组件(以前的博客中有介绍,所以这里就大致说下,后面具体解释他们的功能用处)

7.1 代理:位于客户端和服务器之间的http中间实体

web安全、应用集成以及性能优化的重要组成模块

出于通信安全考虑,会将代理做为转发所有web数据流的可信任中间节点使用,还可对请求响应进行过滤,后面详细介绍

7.2 缓存:http仓库,使常用页面资源可以保存在离客户端更近的地方

web缓存或者代理缓存,可以将经过代理传送的常用的允许缓存的资源保存下来,下一个请求若有相同的资源,可直接享受该资源

http对缓存定义了很多功能,使缓存更高效,并规范了缓存资源的有效期和隐私性,后面详细介绍

7.3 网关:连接其他应用程序的特殊web服务器

网关通常将http数据流转换成其他的协议,接受请求时就好像自己是资源的源服务器,例如

一个http/ftp网关会http请求接受对ftp-URL的请求,但通过ftp协议来获取资源,得到的资源被封装成一条http报文,发送给客户端

关于具体的网关的内容,后面详细介绍

7.4 隧道:对http通信报文进行盲转发的特殊http应用程序

隧道常用的方式是通过http连接承载加密的安全套接层(Secure Scokets Layer,SSL)数据流,这样SSL数据流可以穿过只允许web数据流通过的防火墙

隧道可以在非http网络上转发数据(显示的是HTTP/SSL隧道)

7.5 Agent代理:代表用户发起自动http请求的半智能web客户端程序

其他类型:对web上闲逛的自动用户采用Agent代理,无人监视下发布http事务并获取内容,比如:“网络蜘蛛”、“网络机器人”等

自动搜索引擎“网络蜘蛛”就是Agent代理,可以全世界范围内获取web页面

http协议进阶(一)http概述的更多相关文章

  1. SSL/TLS协议运行机制的概述_转

    转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和 ...

  2. LoRaWAN协议(四)--入网方式概述

    前言 在LoRaWAN中,node最终和服务器能够正常数据交互,需要先入网,入网的本质,也就是获得一些通信相关的参数,有以下几个: NwkSKey AppSKey DevAddr DevEui 其中 ...

  3. http协议进阶(三)http报文

    一.报文流 http报文是在http应用程序之间发送的数据块(也可称为数据包).这些数据块以一些文本的元信息(meta-information)开头,描述了报文的内容及含义,后面跟着 可选的数据部分, ...

  4. http协议进阶(二)URL与资源

    一.URL的语法  URL是互联网资源的标准化名称 URL提供了一种定位互联网上任意资源的手段,但这些资源要通过不同方案(协议:比如http.ftp.smtp)来访问,因此URL语法会略有差异 大部分 ...

  5. SSL/TLS协议运行机制的概述

    互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...

  6. 【转】SSL/TLS协议运行机制的概述

    互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...

  7. TCP/IP 协议:链路层概述

    我们以一个常见的查看IP指令为出发点(ifconfig -a):   1.链路层是什么 链路层是指硬件层协议.也即网络所使用的硬件,比如:以太网(后文主要讨论对象),令牌环网,FDDI已经RS-232 ...

  8. SSL/TLS协议运行机制的概述(转)

    互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...

  9. HTTP协议扫盲(四)HTTP协议进阶 - MIME类型

    一.概念和原理 1.什么是MIME类型? MIME类型,即多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器. 服务器会将它们发送的多媒体数据的类型告诉 ...

随机推荐

  1. Oracle 数据库基础学习 (七) SQL语句综合练习

    一.多表查询综合练习 1.  列出高于在30部门工作的所有人员的薪金的员工的姓名.部门名称.部门编号.部门人数 分析: 需要的员工信息: |-emp表:姓名.部门编号 |-dept表:部门名称.部门编 ...

  2. SqlServer灾备方案(本地)

    如果你曾经有那么一个不经意的心跳来自于数据库数据损坏:错误的新增.更新.删除 .那么下面的方案一定能抚平你的创伤! 对于一个数据库小白来说,数据库的任何闪失带来的打击可说都是致命的.最初,我们让一个叫 ...

  3. js事件浅析

    js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...

  4. 原生JS:Function对象(apply、call、bind)详解

    Function对象(apply.call.bind) 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5850180.html 本文参考MDN做的 ...

  5. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上

    本文是gtest高级测试指南的译文,由于文章太长,分上下两部分. 一.简介 本文档将向您展示更多的断言,以及如何构造复杂的失败消息,传播致命的故障,重用和加速您的测试夹具,并在您的测试使用各种标志. ...

  6. Android 自定义线程池的实战

    前言:在上一篇文章中我们讲到了AsyncTask的基本使用.AsyncTask的封装.AsyncTask 的串行/并行线程队列.自定义线程池.线程池的快速创建方式. 对线程池不了解的同学可以先看 An ...

  7. javascript 实现des解密加密

    //Paul Tero, July 2001 //http://www.tero.co.uk/des/ // //Optimised for performance with large blocks ...

  8. AES 加密工具类

    /** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化: */public class AESOperator { /* * 加密用的 ...

  9. Symantec Backup Exec 2012 Agent for Linux 卸载

    本文介绍一下如何卸载Symantec Backup Exec 2012 Agent for Linx.首先我们来看看Symantec_Backup_Exec2012管理员手册的文档介绍: 卸载 Age ...

  10. W3School-CSS 分类 (Classification) 实例

    CSS 分类 (Classification) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) ...