肛瘘图片

注册

 

发新话题 回复该主题

架构基础之了解一下HTTP协议 [复制链接]

1#
北京治疗白癜风的费用 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/sfxbdf/

一、概念

HTTP协议:即超文本传输协议(Hypertexttransferprotocol)。是一种详细规定了浏览器和Web服务器之间互相通信的规则,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(NextGenerationofHTTP)的建议已经提出。

无状态协议:协议的状态是指下一次传输可以“记住”这次传输信息的能力。HTTP是不会为了下一次连接而维护这次连接所传输的信息,为了保证服务器内存。比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登陆该网站,但是服务器并不知道客户关闭了一次浏览器。由于Web服务器要面对很多浏览器的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。这有可能出现一个浏览器在短短几秒之内两次访问同一对象时,服务器进程不会因为已经给它发过应答报文而不接受第二期服务请求。由于Web服务器不保存发送请求的Web浏览器进程的任何信息,因此HTTP协议属于无状态协议(StatelessProtocol)。

HTTP协议是无状态的和Connection:keep-alive的区别:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

HTTP中文译名问题HTTP超文本传输协议,听上去像是传输层的协议一样,但事实上大家都知道HTTP和FTP一样都是属于应用层的协议。既然是应用层的协议,怎么就取这样一个误导人的名称?在对TCP/IP协议还不熟悉的时候,这很容易让人误解和纳闷的。在wiki上有这么一段话:HTTP在中国大陆被翻译为“超文本传输协议”,因为“transfer”在中文里有“传输”的含意。但依据HTTP定制者之一的RoyFielding博士的论文[1](6.5.3节),作者专门强调“transfer”表示的是“(表述状态的)转移”(RepresentationalStateTransfer),而不是“传输”(transport)。故其中文译名“超文本传输协议”恰恰反映了这种误解。更符合原义的译名应该为“超文本转移协议”。

二、特点

HTTP协议的主要特点可概括如下:

支持客户/服务器模式。支持基本认证和安全认证。

简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

HTTP0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP1.1使用持续连接:不必为每个Web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。

无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

永远都是客户端发起请求,服务器回送响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

HTTP默认的端口号为80,HTTPS的端口号为。

三、工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。在TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了。一个重要的概念是面向连接,既HTTP在传输完成之间并不断开TCP连接。在HTTP1.1中(通过Connection头设置)这是默认行为。

四、头域

每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

1、请求消息

HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文。发出的请求消息格式如下:

请求行,例如GET/images/logo.gifHTTP/1.1,表示从/images目录下请求logo.gif这个文件。

请求头,每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。例如Accept-Language:en

可选的消息体请求行和标题必须以CRLF作为结尾(也就是,回车然后换行)。空行内必须只有CRLF而无其他空格。在HTTP/1.1协议中,所有的请求头,除post外,都是可选的。

(1)请求行

以一个请求方法开头,以空格分开,后面跟着请求的URI和协议的版本。

格式如下:MethodRequest-URIHTTP-VersionCRLF

Method表示请求方法;

Request-URI是一个统一资源标识符;

HTTP-Version表示请求的HTTP协议版本;

CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。a.请求方法:

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:GET向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在webapp.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。HEAD向服务器索要与GET请、求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容

一般情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。PUT向指定资源位置上传其最新内容。DELETE请求服务器删除Request-URI所标识的资源。TRACE回显服务器收到的请求,主要用于测试或诊断。CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。OPTIONS返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送*的请求来测试服务器的功能性。注:HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

b.GET和POST的区别:

GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以相连,如EditPosts.aspx?name=test1id=.POST方法是把提交的数据放在HTTP包的Body中。GET提交的数据大小有限制,最多只能有字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

(2)请求报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。常用的请求报头/p>

2、响应消息

HTTP响应由三部分组成,分别是:状态行、响应报头、响应正文。客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有的响应都有实体内容。(1)状态行响应头第一行也称为状态行,格式如下:

a.状态响应码:无论你何时浏览一个网页,你的电脑都会通过一个使用HTTP协议的服务器来获取所请求的数据。在你请求的网页显示在浏览器之前,支配网页的网站服务器会返回一个包含有状态码的HTTP头文件。这个状态码提供了有关所请求网页的相关条件信息。如果一切正常,一个标准网页会收到一条诸如的状态码。当然我们的目的不是去研究响应码,而是去探讨那些代表出现错误信息的服务器头文件响应码,例如表示“未找到指定网页”的码。

搜索

分享 转发
TOP
发新话题 回复该主题