HTTP基本原理解析

来源:互联网 发布:mac建立无线局域网 编辑:程序博客网 时间:2024/05/22 01:40

HTTP是一个属于应用层的面向对象的协议,基于TCP/IP协议来通信,目前广泛使用的是HTTP/1.1,在此之前是HTTP/1.0,以及较多扩展的HTTP/1.0+,而最新的HTTP-NG目前还没形成统一的协定。


 HTTP是基于TCP协议之上的。在TCP/IP协议参考模型的各层主要有应用层、传输层、网络层、数据链路层、硬件层,其中HTTP是应用层的协议。



HTTP主要特点如下:

1、支持客户/服务器模式;

2、使用简单,只需要传送请求方法和路径,就可获得服务器传送的信息,常用的请求方法有GET、HEAD、POST、DELETE;

3、灵活,允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记,如:text/xml、text/plain、image/jpeg...;

4、无连接,每次连接只处理一个请求,应答完后,自动断开连接;

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


HTTP协议是工作在客户机/服务器模式下,分为HTTP客户端和HTTP服务器两个部分,双方每次进行交互,都是由客户端发出的请求和服务器端发出的响应构成。具体过程如下:

1、建立TCP连接(在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行深层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80)

2、浏览器向服务器发送请求命令(一旦建立了TCP连接,浏览器就会向服务器发送请求命令)

3、浏览器发送请求头信息(浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。)

4、服务器应答(客户机向服务器发出请求后,服务器会客户机回送应答,包括协议版本号,状态码等)

5、服务器发送应答头信息(正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档)

6、服务器向浏览器发送数据(服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据)

7、服务器关闭TCP连接(一般情况下,一旦服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行Connection:keep-alive  TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽)


HTTP请求格式:主要三部分:1、请求方法URI协议/版本; 2、请求头; 3、请求正文

1、请求方法URI协议/版本:

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本,一般URL是由三部分组成请求协议如HTTP、HTTPS,主机名,通过DNS进行解析,文件路径。HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。其中最常用的方法是GET和POST。

2、请求头

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.

3、请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息


HTTP长度限制

在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的,HTTP协议并不对URI的长度做任何的限制,服务器端必须能够处理任何它们所提供服务多能接受的URI,并且能够处理无限长度的URI,如果服务器不能处理过长的URI,那么应该返回414状态码。

浏览器的限制:每种浏览器也会对url的长度有所限制,下面是几种常见浏览器的url长度限制:(单位:字符)
IE : 2803
Firefox:65536
Chrome:8182
Safari:80000
Opera:190000

对于get请求,在url的长度限制范围之内,请求的参数个数没有限制;


HTTP响应状态码含义:

1xx:指示信息。表示请求已接收,继续处理;

2xx:成功。表示请求已被成功接收、理解、接受;

3xx:重定向。要完成请求必须进行更进一步的操作;

4xx:客户端错误。请求有语法错误或请求无法实现;

5xx:服务器端错误。服务器未能实现合法的请求;