小白笔记
应用层--Web 和 HTTP
1.一些术语
·web页:由一些对象组成,一个对象只是一个文件,可以是一个HTML文件,一个JPFG图像,一个Java小程序,一个声音剪辑文件等,而且它们可以通过一个URL地址寻址。
·web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)
·通过URL对每个对象进行引用,访问协议、用户名、口令字、端口等
·URL格式:Prot://user:psw@www.some School.edu/someDept/pic.gif:port 分别是协议名,用户:口令,主机名,路径名,端口
互联网中的所有的这些对象都可以采用对象当中的链接来指向另一个对象,web对象当中还包括了一些链接,这些链接是由URL的形式来标识的,那么可以告诉你采用什么协议什么用户名口令什么主机的域名什么文件名和端口号来访问这样的一个对象,那这样的话,我拿到这个文件就可以把相应的对象的链接找到,然后找到相应的服务器把对象拉过来,互联网当中所有的对象都是采用这种方式来指向的,所以互联网中的web对象就像一个蜘蛛网一样,把所有的知识体系和信息采用这种网状的结构完成的一个指向。
2.HTTP概括
HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,提供交换HTTP报文进行会话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。
HTTP:超文本传输协议
·Web的应用层协议,是Web的核心
·客户、服务器模式
·客户:请求,接收和显示Web对象的浏览器
·服务器:对请求进行响应,发送对象的web服务器
·HTTP 1.0:RFC 1945
·HTTP 1.1:RFC 2068
HTTP是跑在TCP之上,使用TCP:
·客户发起一个与服务器的TCP连接(建立套接字即socket),端口号为80
·服务器接收客户的TCP连接
·在浏览器(HTTP客户端)与Web服务器(HTTP服务器server)交换HTTP报文(应用层协议报文)
·TCP连接关闭。
HTTP是无状态的,服务器并不维护关于客户的任何信息(维护状态的协议很复杂!·必须维护历史信息(状态比如之前有没有过联系)·如果服务器或者客户端司机,它们的状态信息可能不一致,二者的信息必须要一致 ·无状态的服务器能够支持更多的客户端)
3.HTTP连接
非持久HTTP:
·最多只有一个对象在TCP连接上发送 ·下载多个对象需要多个TCP连接 ·HTTP/1.0使用非持久连接。
首先TCP连接请求由客户端发给服务器,然后服务器TCP连接确认发给客户端,然后客户端发送http请求报文给服务器,然后服务器发送http响应报文回来(有一定的响应时间)给客户端,之后连接就关掉了,客户端发送连接拆除给服务器,服务器发送连接拆除的确认给客户端。
持久HTTP:
·多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输 ·HTTP/1.1默认使用持久连接。
前面TCP和http过程和非持久的一样,但是不一样的是发送完一个对象后连接不关,在这个连接上如果还有其他的请求,可以在这个连接上再发请求,对方再把对象响应回来。
4.响应时间模型
往返时间RTT:一个小的封装从客户端到服务器,再回到客户端的时间(传输时间忽略)
响应时间:·一个RTT用来发起TCP连接 ·一个RTT用来HTTP请求并且等待HTTP响应 ·文件传输时间
共:2RTT+传输时间
5.持久HTTP
非持久HTTP的缺点:·每个对象要2各RTT ·操作系统必须为每个TCP连接分配资源 ·但浏览器通常打开并行TCP连接,以获取引用对象
持久HTTP:·服务器再发送响应后,仍然保持TCP连接 ·在系统客户端和服务器之间的后续请求和响应报文通过相同的连接进行传达 ·客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求
非流水方式的持久HTTP:·客户端只能在收到一个响应后才能发出新的请求 ·每个引用对象花费一个RTT
假如有十个对象都在一个服务器当中,非流水方式是请求一个对象,然后这个对象回来之后再请求另一个对象,如此到第十个对象。
流水方式的持久HTTP:·HTTP/1.1的默认模式 ·客户端遇到一个引用对象就立即产生一个请求 ·所有引用(小)对象之花费一个RTT是可能的
比如我发现有十个对象要请求,这十个对象都在那个主机中,流水方式就是前面一个对象发送出去还没回来的时候我又接着发第二个对象的请求再接着发第三个对象一直到第十个对象的请求,对象依次回来,这样的话我的时间就会节省一些。
6.HTTP请求报
·两种类型的HTTP报文:请求,响应
·HTTP请求报文:·ASCII(人能阅读):有请求行(GET,POST,HEAD命令)、首部行、换行回车符,标识报文结束
提交表单输入
·Post方式:·网页通常包括表单输入 ·包含在实体主体中的输入被提交到服务器
·URL方式:·方法:GET ·输入通过请求行的URL字段上载
方法类型
·HTTP/1.0:·GET ·POST ·HEAD要求服务器在响应报文中不包含请求对象->故障跟踪
·HTTP/1.1: ·GET,POST,HEAD ·PUT将实体主体中的文件上载到URL字段规定的路径 ·DELETE输出URL字段规定的文件
7.HTTP响应报文
有状态行(协议版本、状态码和相应状态信息)、首部行、数据,如请求的HTML文件
HTTP响应状态码
位于服务器->客户端的响应报文中的首行一些状态码的例子:
·200 OK表示请求成功 ,请求对象包含在响应报文的后续部分
·301 表示永久的被移除,·请求的对象硬件被永久的转移了:新的URL在响应报文的Location:首部行中规定 ·客户端软件自动用新的URL去获取对象
·400 表示不能被解读,一个通用的差错代码,表示该请求不能被服务器解读
·404 表示找不到,请求的文档在该服务器上没有找到
·505 表示这个版本号不支持
8.用户-服务器状态:cookies:维护状态
大多数主要的门户网站使用cookies,之前的HTTP是无状态的,不管你之前有没有请求过等等即不维护,那比如淘宝它要维护比如你以前买过什么从而以后给你推荐什么,那怎样才能使得无状态的HTTP变成能维护呢?就需要cookies。
客户端在第一次发送请求时通常不带cookie,然后服务器说哎来了个新的家伙第一次请求我,然后服务器会给它分配一个cookie同时在响应报文的头部给个cookie,同时服务器还会在自己的数据库保留这个cookie,然后客户端拿到服务器给的cookie后会把cookie存起来,然后这个客户端下次再访问这个服务器的时候它就会带上这个cookie去访问服务器,然后服务器会把它带上的这个cookie和自己之前保留的cookie关联起来,这次服务器就可以知道了这个客户端你是谁你目前处在什么样的状态你有没有登录有没有购物车上次买了什么都可以知道。这样的话就可以把HTTP协议从无状态变成有状态的协议,从而支撑更多应用
4给组成部分:
1)在HTTP响应报文中有一个cookie的首部行
2)在HTTP请求报文含有一个cookie的首部行
3)在用户端系统中保留有一个cookie文件,由用户的浏览器管理
4)在web网站由一个后端数据库
cookie能带来什么:
·用户验证 ·购物车 ·推荐 ·用户状态(web e-mail)
如何维持状态:
·协议端节点:在多个事务上,发送端和接收端维持状态
·cookies:http报文携带状态信息
cookies与隐私:
·cookies允许站点知道许多关于用户的信息
·可能将它知道的对象卖给第三方
·使用重定向和cookie的搜索引擎还能知道用户更多的信息
9.Web缓存(代理服务器)
目标:不访问原始服务器,就满足客户的请求,带来服务器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本
·用户设置浏览器:通过缓存访问web
·浏览器将所有的HTTP请求发给缓存
·在缓存中的对象:缓存直接返回对象
·如对象不在缓存,缓存请求原始服务器,如何再将对象返回给客户端
Web缓存
·缓存既是客户端又是服务器
·通常缓存是由ISP(大学、公司、居民区ISP)购买并安装
为什么要使用Web缓存?
·降低客户端的请求响应时间
·可以大大减少一个机构内部网络与Internet接入链路上的流量
·互联网大量采用了缓存:可以使较弱的ICP也能够有效提供内容
10.条件GET方法
有可能会遇到这种情况:访问的对象本地缓存下来了,但是服务器那边变了,那怎么办?那http也要做一个升级,这个升级叫条件式获取,缓存处不知道这个对象在服务器那端有没有修改,那缓存处就向服务器发出一个请求,发出一个条件式获取的请求,就是在请求报文的时候呢加上一个头部,这个头部的名称叫做If-modified-since,就是如果这个对象在那个时刻之后得到了修改那就让服务器重传一遍,响应报文中包含对象,如果在那之后并没有修改即原来的缓存是有用的那你就不用给我啦,即如果缓存拷贝陈旧,则响应没包含对象:HTTP/1。0 304 Not Modified,这样就能解决代理服务器与原始服务器对象版本一致性的问题。