Http协议初探

来源:互联网 发布:centos设置中文 编辑:程序博客网 时间:2024/05/16 19:48
一 简介
Http协议,(Hyper Text Transfer Protocol的缩写),译为超文本传输协议。是从万维网服务器传输超文本到本地浏览器的传输协议,基于TCP/IP通信协议。

Http协议是属于应用层面向对象的协议,工作于客户端-服务端架构上。客户端通过URL向Http服务端发出请求,服务端收到请求后向客户端发送响应信息。

二 特点
1,简单迅速。客户端向服务端请求服务时,只需传送请求方法和路径,请求方法通常有 POST,GET,HEAD。每种方法规定了客户端和服务端联系的类型。简单的Http协议使得Http服务器的程序规模不大,因此通信速度很快。
2,灵活。允许传输任意类型的数据对象。传输数据对象的类型由Content-Type定义。
3,无连接。每次链接只处理一个请求。服务器处理完客户端的请求,并受到客户端的应答后,即断开链接,这种传输方式节省了传输时间和资源。
4,无状态。对于事务的处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,那么客户端必须重传。这样导致每次传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就快。
5,支持B/S和C/S。

三 统一资源标识符(URL)
介绍:URI(Uniform Resource Identifiers),被Http用来建立连接或传输数据。URL(Uniform Resource Locator,统一资源定位符)是一种特殊类型的URI,是互联网上标识某一资源的地址

一个常见的Url如下
http://topic.csdn.net:8080/mis/base/BaseProTeacherMap/index.jsp?tab=index&id=4468#r_70732423

1,"http:"协议部分,标识网页使用的是http协议,互联网可以使用多种协议,例如https,ftp。 其后面的“//”是分隔符。
2,“topic.csdn.net”域名部分,当然也可以使用IP+端口的形式。
3,“8080”端口部分。端口不是一个URL必须的部分,如果省略,将采用默认的端口。端口和域名使用“:”来分隔。
4 , 从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
5, 从域名后的最后一个“/”开始到“?”为止是文件名部分。如果没有"?"就到“#”为止,如果都没有就到结束,都是文件名部分。文件名部分也不是一个URL必须的部分,如果省略不写,则使用默认的文件名。
6 ,从“#”开始到最后,是锚部分,不是URL必须的。
7 ,从“?”开始到“#”(若没有“#”到结尾)称为参数部分,又称为搜索部分,查询部分。可以有多个参数,之间“&”隔开。

对比:URI,统一资源标识符。用来唯一标识一个资源。
网络上的资源HTML,图像,视频,音频都有一个URI来定位。
URL一般由三部分组成。
1)访问资源的命名机制
2)存放资源的主机名
3)资源自身的名称。由路径表示,着重强调资源。

URN(Uniform resource name)统一资源命名。是通过名字来标识资源。

小节
1 , URI是以一种抽象的,高层次概念定义统一的资源标识,而URL和URN 是具体的资源标识方式。URL和URN都是一种URI
2 ,URI是一个纯粹的句法结构,用于指定标识WEB资源的字符串的各个不同部分。URL是URI的一个特例。包含了定位Web资源的足够信息,其他URI
mailto:cay@horstman .com
则不属于定位符,因为根据该标识符无法定位任何资源。
3 ,URI 可被视为定位符(URL),名称(URN),或者两者兼备。统一资源名URN,如同一个人的名称,而统一资源定位符代表一个人的住址,换言之,URN定义事物的身份,而URL提供查找该事物的方法。

四 request

客户端发送一个Http请求到服务器包括以下格式
请求行 request line,请求头部 header ,空行和请求数据四个部分。

get请求示例

GET /UpdateCheck.aspx?isBeta=False HTTP/1.1
User-Agent: Fiddler/4.6.3.44034 (.NET 4.6.1; WinNT 6.1.7601 SP1; zh-CN; 4xAMD64; Auto Update; Full Instance)
Pragma: no-cache
Host: www.telerik.com
Accept-Language: zh-CN
Referer: http://fiddler2.com/client/4.6.3.44034
Accept-Encoding: gzip, deflate
Connection: close

1 请求行。GET标识为get请求。/UpdateCheck.aspx?isBeta=False为要访问的资源,HTTP/1.1为协议版本
2 请求头部 Host为请求的目的地 .User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等。
3 空行
4请求数据。isBeta=False

五 response

服务器接受客户端请求,处理后返回给客户端需要的Http响应信息
示例:
HTTP/1.1 200 OK
Date: Thu, 06 Jul 2017 09:03:14 GMT
Content-Type: text/html
Last-Modified: Wed, 05 Jul 2017 16:53:53 GMT
Vary: Accept-Encoding
Accept-Ranges: bytes
Content-Length: 30642
Expires: Thu, 06 Jul 2017 09:04:14 GMT
Powered-By-ChinaCache: HIT from 060010E3W5.6
Age: 57
Powered-By-ChinaCache: HIT from 060010E3gD.2
//空行
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="publishid" content="1121270475.12.98.0"/><meta name="pageid" content="1196.11100.0.0.1150745.0.0.0.0.0.11340.1121270475"/>
<meta name="description" content=" " />
<script src="http://www.xinhuanet.com/global/js/pageCore.js"></script>
<title>
习近平同德国总理默克尔举行会谈-新华网
</title>
.......

1 第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第一行是状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
2 第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html)
3 第三部分:空行。
4 第四部分,响应正文。空行后面的信息,是服务器端返回给客户端的文本信息

GET和POST的区别

1 GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如asTeacher.jspx?loginName=907906731&psw=eyerw2er3. POST方法是把提交的数据放在HTTP包的Body中.

2 GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

3 GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

4 GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.


六 Http状态码
当用户用浏览器浏览一个网页时,用户的浏览器会向网页所在服务器发出请求,当浏览器接收并显示网页前,此网页所在服务器会返回一个包含Http状态码的信息头(server header)用以相应浏览器的请求。

常见的Http状态码
200 -请求成功
301 -资源网页被永久转移到其他URL
404 -请求的资源不存在
500 -内部服务器错误

七 Http请求方法

Http1.0 定义了三种:POST,GET,HEAD
Http1.1 新增了五中:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。

八 Http协议的工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

1、客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。
2、发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1) 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2) 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

3) 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

4) 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5) 释放 TCP连接;

6) 浏览器将该 html 文本并显示内容;