HTTP 协议基础.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

面向侧面的程序设计 方林博士 本文下载地址:
高级服务器设计和实现 1 —— 基础与进阶 余锋
NAT与ICMP交互.
动态网站开发 【HTTP与网络基础】 李博杰
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
提升应用内HTML5 的开发和使用体验
计算机网络(第 6 版) 第 6 章 应用层 青岛理工大学通信与电子工程学院.
汇报大纲 一、报送系统总体介绍 二、自查及检查评分报送流程 三、自查及检查方法及关键点 四、建议及注意事项.
济贵金属艺术品交易中心 JIGUIJINSHUYISHUPINJIAOYIZHONGXIN 入金操作流程
在PHP和MYSQL中实现完美的中文显示
Lab312.
移动开发的灵便迭代之道 黄凯.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
SVN的基本概念 柳峰
第二讲 搭建Java Web开发环境 主讲人:孙娜
存储系统.
SOA – Experiment 3: Web Services Composition Challenge
大学计算机基础 典型案例之一 构建FPT服务器.
走进编程 程序的顺序结构(二).
网络常用常用命令 课件制作人:谢希仁.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
探究式示范建设课程汇报 计算机网络 宁波大学信息科学与工程学院 王晓东/周宇
第一讲 J2EE基础 博和利初级培训 —开发技能.
第2讲: 应用层 本讲目标: 深层次目标 网络应用层的概念和实现 特定协议: 客户端-服务器范式 服务模型
PaPaPa项目架构 By:Listen 我在这.
供应商登录CJLR SRM系统入口 CJLR供应商仅可以在互联网上访问SRM系统,无法在CJLR内网登录SRM系统.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
DevDays ’99 The aim of this mission is knowledge..
任务1-3 使用Dreamweaver创建ASP网页
Web前端开发 第23章:网站发布 阮晓龙 / 河南中医药大学管理科学与工程学科
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
第4章 TCP/IP应用层常用协议 4.1 Telnet 协 议 4.2 文件传输协议FTP 4.3 电子邮件的工作原理及其协议
Lab312.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第四章 团队音乐会序幕: 团队协作平台的快速创建
DQMClientDim.cxx及双光子练习
HTTP入门 骆承秀 马红.
VB与Access数据库的连接.
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
W3C标准网页制作 主讲教师:张 涛.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
ES 索引入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
解决“最后1公里”问题.
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
常见的网络交流方式 QQ、MSN 电子邮件 BBS类(电子公告栏) 聊天室类 网络电话 博客 ……
数据报分片.
Visual Basic程序设计 第13章 访问数据库
Touch Github = Touch the World
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
Python 环境搭建 基于Anaconda和VSCode.
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
GDP设计协同在线配置产品线公网访问权限操作手册
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
基于列存储的RDF数据管理 朱敏
第四章 UNIX文件系统.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第7章 Internet的应用.
1 Web基础知识 1.1 HTTP协议 1.2 Web服务器和浏览器 1.3 C/S模式与B/S模式 1.4 Web的访问原理
Presentation transcript:

HTTP 协议基础

1、HTTP与WEB服务 HTTP应用层协议是Web的核心。 HTTP协议运行在客户程序和服务器程序中。不同端系统上的客户程序和服务器程序通过交换HTTP消息彼此交流。 HTTP定义Web客户(即浏览器)如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户。

Web页面(web page,也称为文档)由多个对象构成。对象(object)仅仅是可由单个URL寻址的文件,例如HTML文件、JPG图像、GIF图像、JAVA小应用程序、语音片段等。 例如,如果一个Web页面包含HTML文本和5个JPEG图像,那么它由6个对象构成,即基本H1ML文件加5个图像。

浏览器是web的用户代理,它显示所请求的Web页面,并提供大量的导航与配置特性。Web浏览器还实现HTTP的客户端 Web服务器存放可由URL寻址的Web对象,web服务器还实现HTTP的服务器端。

2、Http工作流程 HTTP客户端启动TCP连接(创建插口) 到服务器, 端口 80。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问。 http 报文(应用层协议报文) 在浏览器 (http client) 和Web服务器(http server)之间进行交换。 客户端套接字。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。

服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。 关闭TCP 连接 注意:在向客户发送所请求文件的同时,服务器并没有存储关于该客户的任何状态信息。即便某个客户在几秒钟内再次请求同一个对象,服务器也不会响应说:自己刚刚给它发送了这个对象。    所以http 是 “无状态(stateless)”的服务,不保留任何访问过的请求信息 HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP。如前所述,客户端套接字是客户进程和TCP连接之间的“门”,服务器端套接字是服务器进程和同一TCP连接之间的“门”。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似地,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或服务器一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务;这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。我们可从中看到分层网络体系结构的一个明显优势——HTTP不必担心数据会丢失,也无需关心TCP如何从数据的丢失和错序中恢复出来的细节。这些是TCP和协议栈中更低协议层的任务。

当用户请求一个Web页面(譬如说点击某个超链接)时,浏览器把请求该页面中各个对象的HTTP请求消息发送给服务器。服务器收到请求后,以运送含有这些对象HTTP响应消息作为响应。

3、HTTP连接的类型 非持久连接和持久连接      HTTP既可以使用非持久连接(nonpersistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。

3.1 非持久连接      非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该贝面由1个基本HTML文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。 再假设该基本HTML文件的URL为:www.chinaitlab.com/somepath/index.html。

下面是具体步骡: 1. HTTP客户初始化一个与服务器主机www. chinaitlab 下面是具体步骡:      1.HTTP客户初始化一个与服务器主机www.chinaitlab.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。      2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/somepath/index.html。

3. HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index 3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。    4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。

5.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。    6.给每一个引用到的JPEG对象重复步骡1-4。

3.2持久连接 持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。 通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。 持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。 持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。

HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。

3.3 流水线和非流水线方式 流水线方式指没有收到上一个请求的对象就发送新的对象的请求 非流水线方式指必须要等到上一个请求的对象到达之后再发送新的对象的请求

4、HTTP消息格式 HTTP规范1.0[RPcl945]和HTTP1.1 [RFC 2616]定义了HTTP消息的格式。HTTP消息分为请求消息和响应稍息两类。

4.1 HTTP请求消息   下面是一个典型的HTTP请求消息:      GET /somedir/page.html HTTP/1.1   Host:www.chinaitlab.com   Connection:close   User-agent:Mozilla/4.0   Accept-language:zh-cn   (额外的回车符和换行符)

首先,这个消息是用普通的ASCII文本书写的。 其次,这个消息共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车特和换行符。 请求行有3个宁段:方法字段、URL字段、HTTP版本宇段。

方法字段有若干个值可供选择,包括GET、POST和HEAD。HTTP请求消息绝大多数使用GET方法, 头部行Host:www.chinaitlab.com定存放所请求对象的主机。 请求消息中包含头部Connection:close是在告知服务器本浏览器不想使用持久连接;服务器发出所请求的对象后应关闭连接。

User-agent头部行指定用户代理,也就是产生当前请求的浏览器的类型。本例的用户代理是Mozilla/4 User-agent头部行指定用户代理,也就是产生当前请求的浏览器的类型。本例的用户代理是Mozilla/4.0,它是Nelscape浏览器的一个版本。

请求报文的类型是由它所采用的方法决定的。 HTTP请求标准格式 Request 方 法 URL 版 本 首部字段名 首部行 : 值 … 实体主体 (通常不用) 请求行 空格 回车换行 CRLF 请求报文的类型是由它所采用的方法决定的。

附属体不在GET方法中使用,而是在POST方法中使用。 POST方法适用于需由用户填写表单的场合,如往google搜索引擎中填入待搜索的词。用户提交表单后, HEAD方法与GET方法类似,两者的差别只是服务器在对HEAD方法的响应消息中去掉了所请求的对象,其他内容则与对GET方法的响应消息一样。HEAD方法通常用于HTTP服务器软件开发人员进行调试。

4.2 HTTP响应消息      下面是一个典型的HTTP响应消息:      HTTP/1.1 200 0K   Connectlon:close   Date: Thu, 13 Oct 2005 03:17:33 GMT   Server: Apache/2.0.54 (Unix)   Last—Nodified:Mon,22 Jun 1998 09;23;24 GMT   Content—Length:682l   Content—Type:text/html      (数据 数据 数据 数据 数据…………)

HTTP响应标准格式 Response 开始行 响应报文的开始行是状态行。 空格 回车换行 开始行 版 本 状态码 短 语 CRLF 状态行 首部字段名 : 值 CRLF … 首部行 首部字段名 : 值 CRLF CRLF : 实体主体 (有些响应报文不用) 响应报文的开始行是状态行。 状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。

5 HTTP常用状态码 1xx 表示通知信息的,如请求收到了或正在进行处理。 2xx 表示成功,如接受或知道了。 5 HTTP常用状态码 1xx 表示通知信息的,如请求收到了或正在进行处理。 2xx 表示成功,如接受或知道了。 3xx 表示重定向,表示要完成请求还必须采取进一步的行动。 4xx 表示客户的差错,如请求中有错误的语法或不能完成。 5xx 表示服务器的差错,如服务器失效无法完成请求。

  ●200 0K;请求成功,所请求信息在响应消息中返回。      ●301 Moved Permanently:所请求的对象己永久性迁移;新的URL在本响应消息的Location:头部指出。客户软件会自动请求这个新的URL。      ●400 Bad Request;表示服务器无法理解相应请求的普通错误的状态码      

●404 Not Found:服务器上不存在所请求的文档。    ●HTTP Version Not Support:服务器不支持所请求的HTTP协议版本。

Cookies: 保存 “状态” 服务器产生一个 # , 服务器认识这个 #, 以备不时之需: client server 认证 记忆用户的前序访问, 先前的选择 服务器在响应报文中发送 “cookie” 给客户端 Set-cookie: 1678453 客户端可以在后继的请求中发送“cookie” cookie: 1678453 client server 普通 http 请求报文 普通 http响应报文+ Set-cookie: # 普通 http 请求报文 cookie: # cookie- 特定的 普通 http响应报文 普通 http 请求报文 cookie: # cookie- 特定的 普通 http响应报文

Conditional GET: 客户端缓存机制 目的: 如果客户端缓存了最新的请求对象,则服务器不必重复发送 客户端: 在http请求报文中声明所缓存拷贝的生成日期 If-modified-since: <date> 服务器: 如果客户端缓存的拷贝是最新的,则在响应报文中不发请求的对象: HTTP/1.0 304 Not Modified client server http请求报文 If-modified-since: <date> 对象未经修改 http响应报文 HTTP/1.0 304 Not Modified http请求报文 If-modified-since: <date> 对象已 经修改 http响应报文 HTTP/1.1 200 OK <data>

用telnet测试 http (客户端操作) 打开 TCP 连接到 port 80 (默认的http 服务器端口) 位于 202.117.35.70 后续键入的内容将发送到202.117.35.70 的 80 号端口 $telnet 202.117.35.70 80 2. 键入一条 http请求报文: 将该指令键入后 (按两次回车键), 就将此最短之 (但是完整的) GET 请求发到了 http 服务器 GET /~j1010/hello.htm HTTP/1.0 3. 注意观察http服务器发回的响应报文!