Web 页面(Web page,也叫文档)是由对象组成的。
对象:HTML文件、JPEG图片、视频文件、动态脚本等,通过一个URL地址寻址。每个URL地址由存放对象的服务器主机名和对象的路径名组成。
多数Web页面含有一个HTML基本文件以及几个引用对象。HTML基本文件通过对象的URL地址引用页面中的其他对象。
Web浏览器(Web browser)实现了HTTP的客户端;Web 服务器(Web server)实现了HTTP的服务器端,用于存储Web对象,每个对象由URL寻址,目前最流行的Web服务器是Apache
当浏览器收到Web页面后,显示给用户。不同的浏览器也可能会以不同的方式解释页面。HTTP与客户如何解释一个Web页面毫无关系。
 
HTTP 使用TCP 作为它的支撑运输协议 。
(1)服务器在某端口等待客户的请求
(2)浏览器发起到服务器的TCP连接(创建套接字Socket)
TCP 为HTTP 提供可靠数据传输服务。一个客户进程发出的每个HTTP请求报文和服务器进程发出的每个HTTP 响应报文最终能完整地到达服务器和客户。
(3)服务器接受来自浏览器的TCP连接
(4)浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
HTTP 协议不用担心数据丢失,也不关注TCP 从网络的数据丢失和乱序故障中恢复的细节。那是TCP 以及协议栈较低层协议的工作。
HTTP 是一个无状态协议:HTTP 服务器并不保存关于客户的任何信息
(5)关闭TCP连接
 
HTTP连接分为:
非持续连接并不为其他的对象而持续下来。每个TCP 连接只传输一个请求报文和一个响应报文:
(1)HTTP 客户进程向HTTP的默认端口号80 发起一个到服务器的TCP 连接,在客户和服务器上分别有一个套接字与该连接相关联。
(2)HTTP 客户经它的套接字向该服务器发送一个HTTP 请求报文。请求报文中包含了路径名
(3)HTTP 服务器进程经它的套接字接收该请求报文,从其存储器中检索出对象,在一个HTTP 响应报文中封装对象,并通过其套接字向客户发送响应报文。
(4)HTTP 服务器进程通知TCP 断开该TCP 连接。(但是直到TCP 确认客户巳经完整地收到响应报文为止,它才会实际中断连接)
(5)HTTP 客户接收响应报文, TCP 连接关闭。
假设报文指出封装的对象是一个HTML 文件,客户从响应报文中提取出该文件,检查该HTML 文件,得到对10 个JPEG 图
形的引用。则需要对每个引用的JPEG 图形对象重复前4 个步骤(可以使用并行连接)。
缺点:必须为每一个请求的对象建立和维护一个全新的连接。对于每个这样的连接,在客户和服务器中都要分配TCP 的缓冲区和保持TCP 变量,给Web 服务器带来了严直的负担;总的响应时间就是两个RTT 加上服务器传输HTML 文件的时间,每一个对象经受两倍RTT 的交付时延,即一个RTT 用于创建TCP, 另一个RTT 用于请求和接收一个对象。
持续连接,服务器在发送响应后保持该TCP 连接打开。
在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。甚至位于同一台服务器的多个Web 页面在从该服务器发送给同一个客户时,可以在单个持续TCP 连接上进行。
一般来说,如果一条连接经过一定一个可配置的超时间隔仍未被使用,HTTP服务器就关闭该连接。
无流水(pipelining)的持久性连接
客户端只有收到前一个响应后才发送新的请求
每个被引用的对象耗时1个RTT
带有流水机制的持久性连接
HTTP 1.1的默认选项
客户端只要遇到一个引用对象,就尽快一个接一个地发出对对象的这些请求,而不必等待对未决请求(流水线)的回答。
理想情况下,收到所有的引用对象只需耗时1RTT
HTTP 的默认模式是使用带流水线的持续连接。
 
HTTP 报文是用普通的ASCII文本书写的,分为:
HTTP请求报文如图所示:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
(extra carriage return, line feed)
  • 请求行:
方法字段 :
(1)当浏览器请求一个对象时,使用GET 方法。 此时实体主体为空。也可以用来提交表单,此时在所请求的URL中包括输入的数据?XXX&XXX
(2)填写表格时使用POST方法,在请求消息的消息体(entity body)中上传客户端的输入。也可以用来向服务器请求一个Web 页面,此时Web 页面的特定内容依赖于用户在表单字段中输入的内容
(3)HEAD 方法类似于GET 方法。当服务器收到使用HEAD 方法的请求时,将会用一个HTTP 报文进行响应,但是并不返回请求对象。
(4)PUT 方法常与Web 发行工具联合使用,它允许用户上传对象到指定的Web 服务器上指定的路径(目录)。PUT 方法也被那些需要向Web 服务器上传对象的应用程序使用。
(5)DELETE 方法允许用户或者应用程序删除Web 服务器上的对象。
URL字段带有请求对象的标识。
HTTP 版本字段表明浏览器实现的是HTTP/1. I 版本。
  • 首部行:
Host指明了对象所在的主机。不使用Web缓存器的时候,该首部行没用,因为已经建立了TCP连接
Connection指明了浏览器告诉服务器不希望使用持续连接,它要求服务器在发送完被请求的对象后就关闭这条连接。
User- agent指明用户代理,即向服务器发送请求的浏览器的类型。服务器可以有效地为不同类型的用户代理发送相同对象的不同版本(由相同的URL 寻址)
Accept- language仅是HTTP 中可用的众多内容协商首部之一,表示用户想得到该对象的语言版本(如果服务器中有这样的对象的话),否则服务器发送它的默认版本。
HTTP响应报文如图所示:
HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
  • 初始状态行:
协议版本字段
状态码和相应状态信息。
200 OK
301 Moved Permanently
400 Bad Request
404 Not Found
505 HTTP Version Not Supported
  • 首部行:
Connection首部行告诉客户,发送完报文后将关闭该TCP 连接。
Date首部行指示服务器产生并发送该响应报文的日期和时间。
Server:首部行指示该报文是由一台Apache Web 服务器产生的
Last- Modified首部行指示了对象创建或者最后修改的日期和时间。
Content-Length首部行指示了被发送对象中的字节数。
Content- Type首部行指示该对象类型为html文件(不通过文件扩展名正式指示)
 
Cookie的组件
(1)HTTP请求消息的cookie首部行
(2)HTTP响应消息的cookie首部行
在通常HTTP请求报文和HTTP响应报文中加上首部行Set-cookie: 识别码
(3)保存在客户端主机上的cookie文件,由浏览器管理
浏览器收到带cookie的HTTP响应报文时,会在它管理的特定cookie文件中添加一行,该行包含服务器的主机名和识别码。
此后浏览器每请求一个Web页面,就会从该cookie文件中获取对这个网站的识别码,并放到HTTP请求报文中。
(4)Web服务器端的后台数据库
服务器可以把用户1678的活动记录在数据库
如果是注册用户,可以将数据库中包括的身份信息与识别码相关联
 
Web缓存器/代理服务器,通常由ISP购买安装。
(1)浏览器建立一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求。
(2)Web缓存器进行检查,看看本地是否存储了该对象副本。如果有就向客户浏览器用HTTP响应报文返回该对象;如果没有,就打开一个与该对象的初始服务器的TCP连接,在这个TCP连接上发送一个对该对象的HTTP请求。在收到该请求后,初始服务器向该Web缓存器发送具有该对象的HTTP响应。
(3)当Web 缓存器接收到该对象时,它在本地存储空间存储一份副本,并通过现有的客户浏览器和Web缓存器之间的TCP连接,向客户的浏览器用HTTP响应报文发送该副本。
因此,Web缓存区既是客户端又是服务器。
优点:
(1)可以大大减少对客户请求的响应时间,特别是当客户与初始服务器之间的瓶颈带宽远低于客户与Web 缓存器之间的瓶颈带宽时。
(2)能够大大减少一个机构的接入链路到因特网的通信量。
(3)在大范围(Internet)内实现有效的内容分发网络(CDN),从而减低Internet上的Web流量,改善所有应用的性能。
HTTP 协议有一种机制,允许缓存器证实它的对象是最新的,即条件GET方法:
代理缓存器代表一个请求浏览器,向Web服务器发送HTTP请求报文,在报文中添加If-Modified-Since:首部行 
如果缓存的版本是最新的,则响应消息中不包含对象, 直接把状态码和相应状态信息设为304 Not Modified即可;否则HTTP响应报文正常携带对象,状态码和相应状态信息仍为200 OK。

计算机网络-应用层(1)Web应用与HTTP协议的更多相关文章

  1. web应用与http协议

    web应用 Web应用程序是一种可以通过web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户端/ ...

  2. 08.Web服务器-2.HTTP协议介绍

    HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF ...

  3. Web基础之http协议

    第6章 Web基础之http协议 第6章 Web基础之http协议一.http协议介绍 1.1)什么是超文本 1.2)什么是URL 1.3)什么是超文本传输协议二.访问网站分析三.页面请求信息解析(仅 ...

  4. #WEB安全基础 : HTTP协议 | 文章索引

    本系列讲解WEB安全所需要的HTTP协议 #WEB安全基础 : HTTP协议 | 0x0 TCP/IP四层结构 #WEB安全基础 : HTTP协议 | 0x1 TCP/IP通信 #WEB安全基础 : ...

  5. 网络爬虫与web之间的访问授权协议——Robots

    网站的管理者们通常会有这样一种心态:一方面期待百度.Google这样的搜索引擎来抓取网站的内容,另一方面又很厌恶其他来路不明的网络爬虫抓取自己的信息.正是因为这样,才有“好爬虫”.“坏爬虫”这样的说法 ...

  6. 12.web基础与HTTP协议

    web基础与HTTP协议 目录 web基础与HTTP协议 web基础 域名概述 HTML概述 HTML基本标签 HTML语法规则 HTML文件结构 头标签中常用标签 内容标签中常用标签 静态网页与动态 ...

  7. 计算机网络-应用层之HTTP协议

    1.概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). ...

  8. [计算机网络-应用层] HTTP协议

    1.HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心. HTTP由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行对话. ...

  9. 计算机网络-应用层(4)DNS协议

    域名系统(Domain Name System, DNS):一个分层的由DNS服务器实现的分布式数据库+一个使得主机能够查询分布式数据库的应用层协议 DNS服务器通常是运行BIND (Berkeley ...

随机推荐

  1. 大家是怎么做APP接口的版本控制的?欢迎进来看看我的方案。升级版的Versioning

    背景 APP不同于网站,网站程序一发版,所有用户看到的都是最新的页面.调用最新的接口,没有新老版本一说.APP一旦下载到用户手机上,用户不更新你拿他一点办法都没有,但是随着业务的调整,同一个接口的请求 ...

  2. redis启动报错:The Windows version of Redis allocates a memory mapped heap for sharing with

    windows系统下通过cmd命令:redis-server.exe redis.windows.conf 启动redis报错,控制台报错如下: The Windows version of Redi ...

  3. 自制廉价的LED+LCD型投影仪

    文档标识符:PROJECTOR_T-D-P6 作者:DLHC 最后修改日期:2020.7.30 本文链接:https://www.cnblogs.com/DLHC-TECH/p/PROJECTOR_T ...

  4. HTML <html> 标签

    HTML <html> 标签 实例 简单的 HTML5 文档: <!DOCTYPE html><html>高佣联盟 www.cgewang.com<head& ...

  5. [草稿]基于 Virtuoso 环境比较便捷的项目文件及权限管理方案

    https://www.cnblogs.com/yeungchie/ 假设如下情况: 1 项目名称 Project_01 2 包含 4 名研发用户,user01 和 user02 为前端工程师,use ...

  6. Guava基本工具--常见Object方法

    在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法.每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这 ...

  7. Spring学习总结(1)-注入方式

    Spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个 ...

  8. maven个人配置

    settings.xml 文件修改一下内容 本地 <localRepository>D:\maven\repository</localRepository> 远程:修改成国内 ...

  9. 00-java语言概述

    1.基础常识软件:即一系列按照特定顺序组织的计算机数据和指令的集合.分为:系统软件 和 应用软件 系统软件:windows , mac os , linux ,unix,android,ios,... ...

  10. 使用MPI进行分布式内存编程(2)

    MPI的英文全称为message passing interface,中文名为消息传递接口,他不是一种新的语言,而是一个可以被C,C++,Fortran程序调用的库. 预备知识 1.编译与执行 使用类 ...