本文主要是介绍HTTP基本知识扫盲,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.C/S结构与B/S结构
1 C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sql Server等。例如QQ就是基于C/S架构的,qq APP就是Client客户端,存放所有用户信息的地方就是qq的Server服务器。
2 B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,WEB浏览器(部分事务逻辑在前端实现)是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上(主要事务逻辑在服务器端实现,形成所谓3-tier结构),简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。
B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。随着Windows 98/Windows 2000将浏览器技术植入操作系统内部,这种结构更成为当今应用软件的首选体系结构。
例:我们经常访问的百度为例,当我访问百度时,我的电脑就是客户机之一,百度的代码存放的地方就是web服务器,而百度用户的信息及百度的一些基本数据信息就是数据库服务器。
3 对比区别:
C/S
1.优点:
(1)安全性:需要其特定的客户端,所以面向对象比较确定,将所进行的信息安全处于一个可控的范围
(2)效率:客户端与服务器直接相连,省却了中间环节,数据的传输比较快
(3)个性化:有特定的客户端,所以可以在较大程度上满足客户的个性化要求
(4)稳定性:结构比较稳定,有较强的事务处理能力,可以实现较复杂的业务逻辑
2.缺点:
(1)特定的客户端:对pc机有一定的要求,如:操作系统,并且它就像订在墙上的石头桌子,不可再利用
(2)中间环节:因为省却了中间环节,所以当客户端达到一定的量时,同时访问服务器,造成服务器的相应变慢,效率变低
B/S
1.优点:
(1)范围:零安装,拥有一个浏览器,即可访问,面向的范围更广
(2)维护性:维护简单,更新页面,即可实现面向所有用户的更新
(3)共享性:通过浏览器访问,共享性强,就像买来的餐桌,可以再利用
2.缺点:
(1)安全性:面向的范围广,所以安全性比较低
(2)个性化:因为面型的范围广,所以它是一种公共审美,无法满足个性化的需求
二.HTTP基础简介
正如上面所讨论的,其实通过发送请求获取服务器资源的web浏览器也可以看作一种客户端,也就是说B/S类似于C/S的一种通用化的子集实现。
HTTP(超文本转移协议)是建立在网络能够正常通信的基础上,即要想更好的了解和使用HTTP协议就需要了解TCP/IP协议簇。
<1>TCP/IP四层模型
TCP/IP协议簇从广义上来说其实是TCP/IP所涉及的相关协议的集合,从狭义上来说就是指TCP,IP两大协议。
1、应用层,用于向用户提供应用服务的通信活动
这一层TCP/IP协议族的组成部分协议有,HTTP(基于tcp协议,因为连接),FTP(文件传输协议),DNS(域名系统,就是IP与域名互相转换)等。
HTTP协议作为TCP/IP协议族应用层的重要成员,在通信过程中起着非常重要的角色
2、传输层,TCP(面向连接的,传输控制协议),UDP(面向无连接的,用户数据报协议)。主要用于提供两台计算机之间的数据传输。
3、网络层,IP协议。 该层规定了数据包该通过怎样的路径(传输路线)到达对方计算机。
4、数据链路层,即网络接口层,处理网络的硬件部分,比如,网卡,通信线路(光纤,电缆)。
如图所示的,这是整个通信过程中数据流的走向,同时经过每层协议时,都会加上相应的首部,每个首部都会有相应的功能。---------封装与解封装
分层的好处:各个分层之间相互协作,当一个部分出现问题,可以找到相应的层次来处理问题,而不是把整个协议都去检查一遍。
<2>各种协议与HTTP协议的关系
<3>URI与URL的关系
1 基础知识
URI:统一资源标志符(Uniform Resource Identifier),可以进一步被分为定位符(URL)、名字(URN),两者都是URI的子集, 除了确定一个资源,还提供一种定位该资源的主要访问机制(如其网络“位置”)。
URI一般由三部分组成:
访问资源的命名机制。
存放资源的主机名。
资源自身的名称。由路径表示。
URL:统一资源定位符(uniform resource location),即相当于地址信息。
URL的格式由下列三部分组成:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包含port号);
第三部分是主机资源的详细地址。
说白了,URL是URI的子集,URL提供资源在网络中的具体位置,如http://www.163.com就是一个URL。
而URI只是标识这个资源,但并不一定给出其具体位置。也就是说URI是网络资源的头衔,通过URI标记可以把网络世界里面的每一个事物都加以标记并区分开来(你的QQ邮箱就可以看作一个URI)。
例如:
files.hp.com. //这是一个URI,表示这个文件属性
tel:+1-816-555-1212 //URI但不是URL
http://files.hp.com //URI,也是URL(URL是URI子集),给出了资源的位置,即URL范围更严格
http://www.ietf.org/rfc/rfc2396.txt //这是一个URL,给出了资源的位置
PS:当我们替代web地址的时候,URI描述可能更准确,反正如今“URL”这个术语正在被弃用
2 URI格式
相应字段说明
字段 | 说明 |
协议 | http/https |
登录信息(认证) | user:pass@(一般没有) |
服务器地址 | 域名或IP |
服务器端口号 | 服务端口号,省略则取默认端口号 |
带层次的文件路径 | 指定服务器上的文件路径来定位特指的资源 |
查询字符串 | 使用查询字符串传入参数 |
片段标识符 | 标记以获取资源中的子资源(文档内的某个位置) |
3 单台虚拟主机实现多个域名
HTTP/1.1规范允许一个台HTTP服务器搭建多个web站点,但是通过域名服务器解析后就可能出现不同域名(www.baidu.com和www.hackr.com)解析成一个ip的情况。所以为了能够区分不同的虚拟机,就必须在HTTP的host首部内完整指定主机名或域名的URI.
三.HTTP相关知识点
<1>HTTP是不保存状态的协议
即不对请求和响之间的通信状态进行保存,即没有堆想要与保存做持久化处理。这一刻不知道之前做了哪些工作,为此引入了cookie等技术。
<2> 持久连接(keep-alive)减少tcp建立与消毁的消耗
因为在HTTP初始版本中,每进行一次HTTP通信都要断开一次TCP连接,所以对于文档包含大量图片的情况,频繁的建立断开连接非常耗费资源,所以在HTTP/1.1出现了持久连接,以减少频繁建立连接的消耗。
<3> 管线化
持久连接使得管线化成为可能,即相当于滑动窗口技术,一次性并行发送多个请求,而不需要一个接着一个等待响应。
<4>内容协商
服务器驱动协商
客户端驱动协商
透明协商:是上面两种方法的结合
<5>确认用户身份认证
1 常用的认证方式
密码
动态令牌:仅本人持有的设备内显示的动态密码
数字证书
生物认证:虹膜信息
IC卡
2 HTTP/1.1认证方式:
BASIC认证(基本认证)
DIGEST认证(摘要认证)
SSL客户端认证
FormBase认证(基于表单认证)
FormBase认证是在提供的用户界面输入账号密码等登录信息后,发送给Web应用程序,基于认证结果来判断认证是否成功。
四.HTTP工作涉及的应用程序
<1>CGI (通用网关接口)
CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信
Common Gateway Interface(公共网关接口),简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。例:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如评论之类的东西。接着用户按一下“发布或提交”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。
<2>通信数据转发程序
1 代理
作为一种中间人的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求URI,会直接发送给前方持有资源的目标服务器
持有资源实体的服务器称为源服务器,从源服务器返回的响应经过代理服务器后再传给客户端
使用代理服务器的理由有:利用缓存技术减少网络带宽 的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要 目的,等等。
代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一 种是是否会修改报文。
1.缓存代理
代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本 (缓存)保存在代理服务器上。 当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。
2.透明代理
转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理 (Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。
2 网关
能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全性。比如,网关可以连接数据库,使用SQL语句查询数据。另外,在Web购物网站上进行信用卡结算时,网关可以和信用卡结算系统流动。
3 隧道
可按要求建立一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。隧道本身不会解析HTTP请求,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。
部分图片来源于网上
这篇关于HTTP基本知识扫盲的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!