HTTP协议
Posted 药剂学徒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。
一、web及网络基础。
1、使用http协议访问web:根据web浏览器地址栏中的制定的URL,web浏览器从web服务器端获取文件资源等信息,从而显示出web页面。
通过指定的访问地址获取(或上传)服务器资源(文件等信息)
使用http协议通信
web使用一种称为HTTP的超文本传输协议作为规范,完成从客户端到服务端的一系列运作流程。而协议是指规则的约定。可以说,web是建立在http上的。
2、为了知识共享而规划web,借助多文档之间的相互关联相城超文本连成可以相互参阅的www(万维网)这一名称,是web当年用来浏览超文本的客户端应用程序的名称,现在用表示这一系列的集合,也可以简称为web。
3、网络基础TCP/IP:为了理解http,我们有必要先了解一下TCP/IP协议族。
通常使用的网络实在TCP/IP协议族上运行的,而HTTP属于它内部的一个子集。协议protocol:不同的硬件,操作系统之间要进行通讯就需要使用一种规则,而我们把这种规则而就叫做协议。
TCP/IP协议:是互联网相关的各类协议集合起来总称为TCP/IP协议。(
数据链路层:处理网络连接中的硬件部分,包括控制操作系统,硬件的设备驱动,NIC及光纤等物理可见部分,
网络层:网络层用以处理网络上流动的数据包,
传输层:对上层应用层,提供处于网络连接中的俩台计算机之间的数据传输,
应用层:决定了向用户提供应用服务时候通信的活动 )
在网络层IP协议,增加作为通信目的地址的MAC地址后转发给链路层,这样一来,发往网络的通信请求就完全了。
发送端在层与层之间传输数据时候,每经过一层时,必须会被打上一个该层所属的首部信息。反之接收端在层与层间传输数据时候,每经过一层时候,会把对应的首部消去。
4、与http协议关系比较密切的协议有:IP/TCP/DNS
(1)负责传输的IP协议:IP位于网络层,网际协议,作用:把各种数据包发送给对方,而要保证确实传送到对方那里,则需要满足各类条件,其中俩个重要的条件就是IP和MAC。
IP地址指明了节点被分配的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对,IP地址可以变换,但MAC地址理论上是不会变的。
(2)使用ARP协议凭借MAC地址进行通信。
IP间的通讯依赖MAC地址,在中转的时候,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议。ARP是一种用以解析地址的协议,根据通信放的IP地址就可以反差出对应的MAC地址。
(3)确保可靠性的TCP协议:按照层次分,TCP位于传输层,提供可靠的字节流服务:能把数据准确可靠的传送给对方。TCP协议是为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否发送到对方。(三次握手策略:他一定会向对方确认是否成功的送达,握手过程中使用了TCP标志flag:SYN,ACK。
发送端首先发送一个SYN标志的数据包给对方。接收端接收之后,回传一个带有SYN/ACK标志的数据包以表示传达确认。最后,发送端再回传一个ACK标志的数据包代表握手结束。除了上述三次握手,TCP还有其他各种手段来保证通信的可靠性。
5、负责域名解析的DNS服务。
DNS和http协议一样都是位于应用层的协议,他提供域名到IP地址之间的解析服务。计算机可以被赋予IP地址也可以赋予主机名和域名。
用户通常使用主机名来访问对方的计算机,而不是直接通过ip地址访问。因为与ip地址的纯数字相比,用字母配合数字的表达方式更加符合人们的记忆习惯。
6、各种协议与HTTP协议的关系。
http协议的职责:生成针对目标web服务器的http的请求报文。
tcp协议的职责:为了方便通信,将HTTP协议请求报文分割成报文段,按序号分为多少个,把每个报文可靠地传送给对方。
ip协议的职责:一边中转,一边传送。
7、URL(统一资源标识符)
URL就是我们访问web浏览器时候需要输入的网页地址。
通过请求和响应的交换来打成通信。
请求必定由客户端发出,最后服务器响应请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器在没有接收到请求之前是不会发送响应的。
下面是从客户端发送给某个HTTP服务器的请求报文中的内容。
GET /index.html HTTP/1.1
Host: hackr.jp
起始行开头的GRT表示请求访问服务器的类型,称为方法method。随后的字符串/index.html指明了请求访问的资源对象,也叫作URL。最后的HTTP/1.1,就是http的版本号,用来提示客户端使用的HTTP协议功能。
综合来看,这段请求内容的意思是:请求访问某台服务器上的/index.html页面资源。
请求报文是由请求方法,请求URL , 协议版本,可选的请求首部字段和内容实体构成的。
注意:请求报文的组成:
HTTP/1.1 200 OK
Data:True,10 jul 2012 06:50:15 GMT
Content-length : 362
Content-type:text/html
<html>
再启始行开头的HTTP/1.1表示服务器对应的HTTP版本。
紧挨着200 ok表示请求处理结果的状态码和原因短语。下一行显示了创建相应的日期时间,是首部字段内的一个属性。
接着以一空行分隔,之后的内容称为资源实体的主体。
响应报文基本上由协议版本,状态码,用以解释状态码的原因短语,可选的响应首部字段以及实体主体构成。
图:请求报文的构成。
请求首部及内容实体稍后详细说明。接下来,我们继续讲解。接收到请求的服务器,会将请求内筒的处理结果以响应的形式返回。
在起始行的HTTP/1.1代表HTTP版本。
200 OK 表示处理结果的状态码 和 原因短语 。下一行显示了创建响应的日期时间,是首部字段内的一个属性。
接着空一行 , 之后的内容称为资源实体的主体。
响应报文基本上由协议版本,状态码,(表示请求成功或者失败)的数字代码,用以解释状态码的原因短语,可选的响应首部字段及实体主体构成。
http是不保存状态的协议
HTTP就是无状态协议。不对请求和响应之间的状态进行保存,协议对于发送过的请求和响应都不做持久化处理。
这是为了更快的处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计的如此简单。
可是,随着web的不断发展,因无状态的而导致的业务处理变得棘手多了,比如用户登录,调到其他网站之后,也要保持登录状态。针对这个实例,网站为了能够掌握是谁发送出的请求,需要保存用户的状态。
HTTP/1.1虽然是无状态协议,但是为了实现期望的保持状态功能,于是引入了cookie技术,有了cookie之后,再用HTTP协议通信,就可以管理状态了。有关cookie的内容稍后再说。
请求URL定位资源:HTTP协议使用URL定位互联网上的资源。正时因为URL的特定功能,在互联网上任意位置的资源都能访问到。
当客户端访问资源而发送请求时候,URL需要将作为请求报文中的请求URL包含在内。指定请求URL的方式有很多。
:URL为完整的请求URL
:在首部字段Host中写明网络域名或者IP地址
:除此之外,如果不是访问特定资源而是对服务器自身发起请求,可以使用一个*来代替URL。
告知服务器意图的HTTP方法。
GET:获取资源,GET方法用来请求访问已被URL识别的资源。指定的资源经服务器端解析后返回相应内容。也就是说,如果请求的资源师文本,那就原样返回;如果是向CGI那样的程序,则返回经过执行后的输出结果。
使用GET方法的请求响应列子
请求 GET /index.html HTTP/1.1
POST:传输实体主体
虽然用GET方法也可以用来传输实体主体,但是一般不用GET方法进行传输,而是用POST方法。虽说POST功能与GET很相似,但是POST的主要目的并不是获取相应的主体内容。
使用POST方法的请求-响应的例子。
PUT传输文件
PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在保温的主体中包含文件内容,然后保存到请求URL指定的位置。
HEAD:获得报文首部
HEAD方法和GET方法一样,只是不返回保温主体部分。用于确认URL的有效性及资源更新时间日期等。
和GET方法一样,但是不返回报文主体。
使用HEAD方法请求-响应的例子。
DELETE:删除文件
使用put方法相反的方法。delete按照请求URL删除指定的资源。
但是http/1.1DE DELETE 方法本身不带验证机制,所以一般的web网站也不使用delete方法。当配合web应用程序的验证机制,或者遵守REST标准时候还是有可能会开放使用的。
options:询问支持的方法
options:方法用来查询针对请求URL指定的资源支持方法。
HTTP/1.1 和 HTTP/1.1 支持的方法:
-持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
-管线化:持久连接是的多数请求以管线化方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线技术出现后,不用等待响应也可以直接发送下一个请求。
这样做,可以实现同时并行发送多个请求,而不需要一个接一个的等待响应了。
-使用cookie的状态管理:cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。
cookie会根据从服务器端发送的响应报文内的一个叫做set-cookie的首部字段信息,通知客户端保存cookie。当下此刻端再往该服务器发送请求时候,客户端会自动在请求报文中加入cookie值后发送出去。
服务器端发现客户端发送过来的ccookie之后,会去检查究竟是从哪一个客户端发送来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
-HTTP报文内的HTTP信息。
HTTP通信过程包括从客户端发往服务器端的请求及从服务器端返回客户端的响应。
1、http报文。请求端的HTTP报文叫做请求报文,响应端叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本。
HTTP报文大致可分为报文首部和报文主体俩部分。
我们来看一下请求报文和响应报文的结构:
请求行
请求首部字段
通用首部字段
实体首部字段
其他
状态行
响应首部字段
通用首部字段
实体首部字段
其他
编码提升传输速率:
HTTP在数据传输的时候可以按照数据源茂直接传输,但也可以在传输过程中通过编码提升传输速率。通过在传输时编码,能有效的处理大量的访问请求。但是,编码的操作需要计算机完成,因此会消耗更多的CPU等资源。
报文主体和实体主体的差异:
报文:是http的基本单位,由8位字节流组成,通过HTTP通信传输。
实体:作为请求或相应的有效载荷数据被传输,其内容由实体首部和实体主体组成。
返回结果的HTTP状态码负责表适客户端http请求的返回结果,标记服务器的处理是够正常,通知出现的错误等工作。
五、使用单台虚拟主机实现多个域名。
HTTP/1.1规范允许一台HTTP服务器搭建多个web站点。比如,提供web托管服务的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不同的网站。这是因为利用了虚拟主机的功能。
以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)