文章目录: 一、概念 二、详解 a) 客户端 b) 传输内容 c) 服务器 三、扩展内容引导 一、 概念 Http协议中包含了两个概念,一是Http,二是协议。 Http:HyperText Transfer Protocol,即是超文本传输协议。 协议:共同计划与协商。 课本上的概念总是让人难以理解,下面用户白话解释下什么是Http和协议。我们从协议开始。 协议:多个方面在一起约定的一系列规则,然后大家一起去执行这个规则。 举个例子:我们平时去饭店吃饭通常会有以下几个步骤:1.坐到合适的座位上。2.服务员拿出菜单点餐。3.服务员按照点餐菜单下单。4.服务员上菜。5.吃饭。6.结账走人。这是我们通常的步骤。如果把这些步骤和饭店约定好,每次到了这家饭店就按这个流程来执行,这一系列步骤就成了“我去饭店吃饭的协议”。我要遵循这个步骤,同样饭店也要遵循这个步骤。再如:我们每天中午都会在12:00钟准时去这家饭店吃一份“蛋炒饭”。如果我们与商家协定好,到了12点我们过去,商家就会主动提供一份“蛋炒饭”,那么这个就是“我们的午餐协议”。 Http协议(超文本传输协议):将各种不同空间的文字信息组织在一起的网状文本数据交换而建立的规则、标准或约定。用技术语言解释下就是:客户端与服务端的一种数据通信约定与规则。客户端如:浏览器、自己开发的应用程序或APP。服务端如:IIS\Tomcat等。说的再直白点,可以理解为我们使用浏览器访问服务器端网页时需要遵循的一系列规则(注:可以这么理解,但片面)。
二、 详解

图2-1 1) 客户端 客户端主要职能有两个,一个向服务器发送请求,另一个是接收服务器返回的报文并解释成友善的信息供我们阅读。 客户端大概有以下几类:浏览器、我们自己写的应用程序(桌面应用和APP应用)、其他。我们在日常生活中使用最多的就是浏览器了。 下面我们以IE为示例:

图2-2 我们在地址栏输入网址并巧下回车,浏览器会为我们做如下的处理: 1、 解析出协议(http)、域名(www.)及访问资源(index.html) 2、 使用http协议并创建请求报文向服务器端发送请求,图2-2中的请求标头。 3、 接收到服务器返回的内容并渲染展示。 在日常生活中,大部份客户端的工作都由客户端软件进行了包装和处理。但出于学习的目的我们使用最原始的命令telnet来模拟http请求,以加深对客户端职能的理解。 点击【开始】--【运行】--输入cmd打开命令行窗口。在命令行窗口中输入telnet www. 80 ,如下图所示:
 然后敲击一下回车。 使用快捷键"Ctrl+]"(ctrl+右中括号)来打开本地回显功能,这样我们可以看到输入到窗口的内容,否则输入的内容不显示。
 再次敲击一下回车。 此时出现空白窗口,我们就可以模拟http请求向服务器发送请求报文了。在窗口中输入: GET /index.html HTTP/1.1 Host:www. 如下图所示:
 注意此处敲击两下回车。成功后服务器返回的报文会显示在命令行窗口,如下图所示:  小结:客户端主要处理发送请求及处理服务器返回的报文。 2) 传输内容 (1) URL:URL是寻找信息时所需要的资源位置。通过URL客户端才能找到网络中的大量数据资源 。如:http://www./index.html 。 URL分为三个部分: 第一部分http是URL的方案,方案告诉客户端使用什么样的协议去访问服务器了,也可以是fpt或https等。 第二部分www. ,指服务器的位置。 第三部分 /index.html是资源路径,说明了请求的是服务器上哪个特定的本地资源。 URL语法:<方案>://<用户名>:<密码>@主机:端口/路径;参数?查询#片段 几乎没有几个URL包含了所有这些组件。 方案:访问服务器时使用的协议类型 用户名:有些协议需要使用用户名,如FTP匿名用户登录:ftp://anonymous@ 密码:有些协议需要使用密码,如FTP用户名密码登录:ftp://username:password@ 主机:资源服务器的域名或IP地址 端口:服务器监听的端口号,http协议默认是80端口。 路径:服务器上本地资源的路径。用“/”来分格。如:/theme/image/logo.png 参数:某些协议会输入指定的参数,参数以name:value形式出现,中间用“;”来分格。 查询:用“?”与其他的组件分格开,并用“&”来分隔查询。如:?id=1&name=cncoder 片段:通常我们说是html中的锚点。使用在客户端,不会传送给服务器。 (2) 报文:HTTP报文可以分为两类:请求报文和响应报文,清求报文会向服务器请求一个动作,响应报文会将请求的结果返回给客户端。请求报文和响应报文的结构基本相同。 下面为我们获取服务器上一张图片的报文。 请求报文: GET /Theme/Image/logo.png HTTP/1.1 Host:www. 响应报文: HTTP/1.1 200 OK Content-Type:image/gif Conetnt-Length4567 请求报文的格式: <方法><资源路径><协议版本> <报文头信息> <报文体信息> 响应报文格式 <协议版本><状态码><原因短语> <报文头信息> <报文体信息> 请求报文和响应报文只有起始行的语法不同。 常见请求报文头信息 Host:” www.” User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3" Accept-Encoding:"gzip, deflate" Connection:"keep-alive" 常见响应头信息 Content-Encoding:"gzip" Content-Length:"1779" Content-Type:"text/html" Date:"Sun, 21 Aug 2016 11:45:07 GMT" Last-Modified:"Sun, 21 Aug 2016 11:33:32 GMT" Server:"Microsoft-IIS/7.5" X-Powered-By:"ASP.NET" (3) 方法:请求的起始行以方法作为起始,方法用来告诉服务器要如何做。如:GET /index.html HTTP/1.1 中的GET就是方法 1. GET 请求指定的页面信息,并返回实体主体。 2. HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3. POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 4. PUT 从客户端向服务器传送的数据取代指定的文档的内容。 5. DELETE 请求服务器删除指定的页面。 6. CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 7. OPTIONS 允许客户端查看服务器的性能。 8. TRACE 回显服务器收到的请求,主要用于测试或诊断。 在开发过程中我们最常用的就是GET和POST方法。 (4) 状态码:当客户端发起一次http请请求后,服务器会返回一个包含HTTP状态码的信息头(server header)用以响应客户端的请求。HTTP状态码的英文为HTTP Status Code。 1. 100~199 信息,服务器收到请求,需要请求者继续执行操作 2. 200~299 成功,操作被成功接收并处理 3. 300~399 重定向,需要进一步的操作以完成请求 4. 400~499 客户端错误,请求包含语法错误或无法完成请求 5. 500~599 服务器错误,服务器在处理请求的过程中发生了错误 常用状态码如下: 200-请求成功 404-请求的资源不存在 500-内部服务器错误 3) 服务器
 (0) 服务器软件一直在监听端口是否有新的请求到达,如iis或tomcat在建立web站点后,默认会一直监听80端口等待http请求到过服务器。 (1) 建立连接:如果客户端已经打开一条到服务器的持久连接,则可以直接使用,否则,客户端需要在服务器打开一条新的连接。 (2) 接收请求报文:连接上有数据到过时,Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。 如请求报文 GET /index.html HTTP/1.1CRLF Host:www. Accept:text/htmlCRLF 接收后会被表示为 Name:Method Value:GET Name:Uri Value:index.html Name:Version 1.1 Name:Host Value:www. Name:Accept Value:test/html (3) 处理请求:当请求被接收和表示后,服务器便可以根据请求报文进行处理了。如:POST方法中提出报文主体的数据并插入到数据库中。 (4) 访问资源:请求处理完成后,比如Web会根据数据生成一系列的HTML页面或图片等信息。此步骤将访问这些存储在服务器上的物理文件。 (5) 构建响应:Web服务器在识别资源后,构造响应报文。响应报文中包含状态码、首行、主体等内容。 (6) 发送响应:服务器将响应的数据发送给客户端机器。 (7) 记录日志:请求结束会Web服务器会在日志文件中添加一条请求记录。
三、 扩展内容引导 1. Web的组件结构中还包含代理、缓存、网关、隧道。 2. HTTP协议是建立在TCP/IP协议基础之上。 3. HTTP性能很大一方面在于建立连接。HTTP/1.0时使用Keep-Alive。HTTP/1.1使用管道连接。
如果你觉得文章对你的朋友有帮助,请将该文发送给你的好友或分享到朋友圈,让我们"同学习、共进步”。 CnCoder微信公众号,长期推送高质量的技术博文。
|