Http协议详解

来源:互联网 发布:淘宝下单后怎么退款 编辑:程序博客网 时间:2024/06/04 00:56

Http协议详解

  • Http协议详解
    • Http协议概念介绍
    • Http协议特点
    • Http协议工作模式
    • Http协议之请求头
    • Http协议之响应头


Http协议概念介绍

    Http(Hyper Transfer Text Protocol),即超文本传输协议,是客户端浏览器或其他程序与web服务器之间的      应用层通信协议。在Internet上的Web服务器存放的都是超文本信息,客户端需要通过Http协议传输需要获取的      超文本信息。Http包含命令和传输信息,不仅可以用于web访问,也可以用于其他因特网/内联网系统之间的通信,      从而实现各类应用资源超媒体访问的集成。

Http协议特点

    1. 支持客户/服务器模式:Http协议由两部分程序实现,  一部分是客户端程序,另一部分是服务器程序,通过交换Http报文进行会话。    2. 简单快速:客户端向服务器请求服务,只需传递请求方法和路径。由于Http协议比较简单,故Http服务器的程序规模较小,通信速度快。    3. 灵活:Http允许传输任意类型的数据对象,正在传输的类型由Content-Type标记(请求头参数)。    4. 无连接:Http协议限制每次连接只能处理一个请求。服务端处理用户请求,并受到用户应答后,即断开连接,这种方式可以节省传输时间。    5. 无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即客户端给服务器发送 HTTP 请求之后,         服务器根据请求,向客户端发送数据。但是,发送完并不会记录任何信息。这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。  

Http协议工作模式

    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用      了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和      请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。    HTTP请求/响应的步骤如下:    (1)客户端连接到web服务器    一个Http客户端(通常是浏览器)与Web服务器的HTTP端口(默认为80)建立一个TCP(套接字)连接。    (2)客户端向服务器发送Http请求    通过TCP(套接字),客户端向web服务器发送一个Http请求报文,一个Http请求报文由请求行、请求头部、空行和请求数据4部分组成。    (3)服务器接受请求并返回Http响应报文    web服务器解析请求报文,并定位请求资源。服务器将资源填充到TCP套接字,最后由客户端读取。一个响应报文由状态行、响应头部、空行和响应数据4部分组成。    (4)释放TCP连接    Web服务器主动关闭TCP套接字,释放TCP连接;客户端被动关闭TCP套接字,释放TCP连接。    (5)客户端浏览器解析HTML内容    客户端(浏览器)首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据,根据Html语法对其进行格式化,并在浏览器窗口中显示。

Http协议之请求头

    Http请求头由四部分组成,分别为请求行、请求头、空行和请求正文等。    (1)请求行    请求行主要由请求方法字段、Url字段和Http协议版本字段三部分组成,他们之间用空格分隔。如GET index.html 1.1。    请求方法主要由八种,分别为GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT和OPTIONS等。具体如下:        GET:向特定的资源发出请求。        POST:向指定资源提交数据进行请求(例如提交表单或者上传文件),数据被包含在请求数据中。POST请求可能导致新的资源创建或者已有资源被修改。        HEAD:向服务器请求与GET请求相一致的相应,但相应体不会被返回。HEAD方法可以在不必传输整个相应内容的时候使用,可以获取包含在相应消息头中的元信息。        PUT:向指定资源位置上传最新内容。        DELETE:请求服务器删除Request-Uri所标识内容。        TRACE:回显服务器收到的请求,主要用于测试或诊断。        OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。    (2)请求头    请求头由key-value键值对组成,每对构成一行,键和值由:分隔。请求头通知服务器有关客户端请求的信息。典型的请求头有Host、User-Agent、Accept、Accept-Encoding、Accept-Language、Connection、Referer、Cookie等。此外访问一些Url的时候还会有一些其他头信息,此处不一一列举。    Host:        作用:用于指定被请求资源的Internet主机和端口号,通常由Http Url中提取出来。        1)host字段可以是域名,也可以是IP地址,host字段域名/IP后可跟端口号,例如www.baidu.com:8080。        2)http协议1.0版本中host字段可以缺失,http协议1.1版本中host字段不可缺失,但是值可以为空。        3)http相应头中不包含host字段。    User-Agent:        作用:通知服务器,客户端所使用的操作系统类型以及浏览器的名称和版本。    Accept:        作用:通知服务器端,浏览器端可以接受的媒体类型。    Accept-Encoding:        作用:申明浏览器端可以接受的编码,通常指定压缩方法,是否支持压缩。    Accept-Language:        作用:申明浏览器端可以接受的语言,如big5、gb2312或gbk等。    Connection:        作用:         1)值为keep-alive,当一个request完成后,客户端和服务器之间用于传输Http数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这条已经建立的连接。        2)值为close,当一个request完成后,客户端和服务器之间用于传输Http数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。    Referer:        作用:浏览器向服务器发送请求时,Referer会告诉服务器是从哪个页面链接过来的,服务器根据Referer值获得一些有用信息。比如从百度上链接到我的服务器,我的服务器就可以从Http Referer中统计每天有多少请求来自于百度。    Cookie:        作用:用来存储一些用户信息以便服务器辨别用户身份,比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证你是否是合法用户。    (3)请求正文    请求头与请求正文之间有一行空行,这个空行表示请求头已经结束,接下来是请求正文。请求正文主要包含用户提交的查询字符串信息和表单数据等,以key-value的形式存放。

Http协议之响应头

    Http响应头由四部分组成,分别为状态行、响应头、空行和响应正文等。    (1)状态行    状态行主要由三部分组成,分别为Http协议版本号、状态码和状态代码的文本描述等。如HTTP/1.1 200 OK。    状态码由三位数字组成,其中第一个数字定义了响应的类别,且有五种取值的可能。具体信息如下:        1**:表示请求已经接受,可以继续处理。        2**:表示请求已经被成功接受、理解和处理。        3**:表示重定向,若想完成请求需要进一步请求,一般接下来的请求链接为响应头Location字段对应的值。        4**:客户端错误,指请求出现语法错误或者请求无法达成。        5**:服务器端错误,表示服务器无法对请求做出处理。    常见状态码以及状态描述有如下几个:        200:客户端请求成功。        400:客户端请求出现语法错误,服务器端不能理解该请求。        401:指请求未经授权,该状态码需要与www-Authenticate配合使用。        403:服务器收到请求,但是拒绝提供服务。        404:请求资源未找到或者不存在,例如输入了错误的Url则会返回404状态码。        500:服务器发生不可预期的错误。        503:指服务处于不可用状态。    (2)响应头    响应头由key-value键值对组成,每对构成一行,键和值由:分隔。响应头是服务器对客户端通知的响应信息。典型的响应头有Server、Content-Encoding、Content-Type、Content-Length、Connection、Date、Expires、Location、Refresh、Set-Cookie、WWW-Authenticate等。此外还会有一些其他响应头信息,此处不一一列举。    Server:        作用:指服务器名字,一般由Web服务器自己设置。    Content-Encoding:        作用:指文档的编码。    Content-Type:        作用:指文档的MIME类型。默认为text/plain,由servlet设置。    Content-Length:        作用:指响应内容的长度。    Connection:        作用:同请求头Connection。    Date:        作用:指服务器返回内容的时间,由servlet设置。    Expires:        作用:指文档的过期时间(缓存时间)。    Location:        作用:表示客户端应该去何处提取文档,该字段与状态码302配合使用。    Set-Cookie:        作用:设置与页面相关联的cookie。    WWW-Authenticate:        作用:指客户端应该在Authorization头中提供的类型信息,与401状态码配合使用。    (3)响应正文    响应头与响应正文之间有一行空行,这个空行表示响应头已经结束,接下来是响应正文。响应正文是服务器针对客户端提交的请求返还给客户端的文本信息,通常指html代码。