码迷,mamicode.com
首页 > 其他好文 > 详细

HTTP协议(一) 概述

时间:2014-08-26 13:22:06      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   os   使用   io   strong   文件   for   

HTTP定义

HTTP????The Hypertext Transfer Protocol is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web.

超文本传输协议(HTTP)是一种详细规定了浏览器和万维网服务器之间互相通信的规则。

HTTP是TCP/IP模型中应用层的协议????????

HTTP作为一种传输协议,也是像HTML一样随着时间不断演进的。目前流行的HTTP1.1是HTTP协议的第三个版本,默认是持久连接的。

HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)

从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

?

HTTP请求和响应

以浏览器访问百度首页为例,www.baidu.com

  1. 服务器把响应(Response)发送回浏览器

  2. 浏览器分析响应(Response)中HTML,其中引用了很多其他文件,如图片,CSS,JS等
  3. 浏览器会自动再次发送请求(Request)去获取图片,CSS,或JS
  4. 所有的文件都下载成功后,网页才算完整呈现

上面所有HTTP请求,仅靠一个TCP连接,这就是所谓的持久连接。

请求和响应详解:

所谓的HTTP请求,也就是Web客户端向Web服务器发送信息;

收到HTTP请求后,会根据请求的信息做某些处理,相应地返回一个HTTP响应

(这些处理可能仅仅是静态的返回页,或是包含Asp.net, PHP, Jsp 等语言进行处理后返回)

HTTP Request

HTTP Response

请求行

HTTP头

内容

状态行

HTTP头

返回内容

?

HTTP Request请求行

HTTP Response 状态行

GET

www.baidu.com

HTTP/1.1

HTTP/1.1

200

OK

请求方法

网址

版本

版本

状态码

状态描述

请求行

组成:????请求方法 + 网址 + 版本

请求方法:常见Get和Post,实际HTTP请求方法还有很多,如: PUT方法,DELETE方法,HEAD方法,CONNECT方法,TRACE方法等。具体自行Bing;

状态行

组成:????版本 + 状态码 + 状态描述

状态码: HTTP状态码所代表的含义都有解释,分类如下,具体查看 HTTP响应状态码

  • 信息类 (100-199)
  • 响应成功 (200-299)
  • 重定向类 (300-399)
  • 客户端错误类 (400-499)
  • 服务端错误类 (500-599)

HTTP头

HTTP请求:请求头(request header);普通头(general header);实体头(entity header)

HTTP响应:响应头(response header);普通头(general header);实体头(entity header)

通用头(General header)????????描述HTTP协议本身。 如描述HTTP是否持久连接的Connection头; 发送日期的Date头; TCP连接时间的Keep-Alive头; 缓存控制的Cache-Control头等

实体头(Entity header)????????描述HTTP信息的头。既可出现在HTTP POST方法的请求中,也可出现在HTTP响应中。如Content-Type和Content-length都是描述实体的类型和大小的头都属于实体头。其它还有用于描述实体的Content-Language,Content-MD5,Content-Encoding;以及控制实体缓存的Expires和Last-Modifies头等

请求头(HTTP Request Header)????是由客户端发往服务端,以便使服务端更好地满足客户端请求的头。请求头只能出现在HTTP请求中。如告诉服务器只接收某种响应内容的Accept头; 发送Cookies的Cookie头,显示请求主机域的HOST; 用于缓存的If-Match,If-Match-Since ,If-None-Match头,用于只取HTTP响应信息中部分信息的Range头,用于附属HTML相关请求引用的Referrer头等

响应头(HTTP Response Header)????HTTP响应头是那些描述HTTP响应本身的头,这里面并不包含描述HTTP响应中第三部分也就是HTTP信息的头(这部分由实体头负责)。比如说定时刷新的Refresh头,当遇到503错误时自动重试的Retry-After头,显示服务器信息的Server头,设置COOKIE的Set- Cookie头,告诉客户端可以部分请求的Accept-Ranges头等(以上HTTP头 具体查看 HTTP头

内容

HTTP请求的内容只在POST请求中存在,GET请求并不包含任何实体。这也就是POST及GET本质上的区别。

HTTP响应内容就是HTTP请求所请求的信息。这个信息可以是一个HTML,也可以是一个图片等等。

HTTP状态保持

HTTP协议是无状态的,即对于服务器来说,并不知道每一次请求是否来自同一个客户端,因此需要以下手段来保持状态。

通过Cookies保持状态

为了解决这个问题,HTTP协议可通过Cookies来保持状态

通过表单变量保持状态

除了Cookies之外,还可以使用表单变量来保持状态,比如Asp.net就通过一个叫ViewState的Input="hidden"的框来保持状态,比如:

 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMjA0OTM4MTAwNGRkXUfhlDv1Cs7/qhBlyZROCzlvf5U=" />

??? 这个原理和Cookies大同小异,只是每次请求和响应所附带的信息变成了表单变量。

通过QueryString保持状态

这个原理和上述两种状态保持方法原理是一样的,QueryString通过将信息保存在所请求地址的末尾来向服务器传送信息,通常和表单结合使用,一个典型的QueryString比如:

????www.xxx.com/xxx.aspx?var1=value&var2=value2
				

?

?

HTTP协议(一) 概述

标签:style   http   color   os   使用   io   strong   文件   for   

原文地址:http://www.cnblogs.com/feesland/p/3936840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!