HTTP协议原理

来源:互联网 发布:微软蓝牙鼠标 知乎 编辑:程序博客网 时间:2024/05/22 01:43

HTTP协议是基于请求/响应范式的。

HTTP请求格式:统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

------------------------------
请求方法URLHTTP协议的版本号

提交的元信息
**
空行**
实体

------------------------------

HTTP响应格式:一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

--------------------------------
HTTP
协议
的版本号应答状态码应答状态码说明
接收的元信息
**
空行**
实体

--------------------------------

 

下面介绍一下HTTP协议的内部操作过程。

首先,简单介绍基于HTTP协议的客户/服务器模式的信息交换过程,如下图所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。

 //图略:csdn不支持图片上传,2.6

 

下面,讨论HTTP协议下客户/服务器模式中信息交换的实现。

1.建立连接  连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。

 

2.发送请求

打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。
  HTTP/1.0  请求消息的格式为:
  请求消息=请求行(通用信息|请求头|实体头)CRLF[实体内容]
  请求行=方法 请求URL HTTP版本号 
CRLF
  方 法=GET|HEAD|POST|扩展方法

  URL=协议名称+宿主名+目录与文件名


  请求行中的方法描述指定资源中应该执行的动作,常用的方法有GETHEADPOST。不同的请求对象对应GET的结果是不同的,对应关系如下:
  对象      GET的结果
  文件      文件的内容
  程序      该程序的执行结果
  数据库查询   查询结果
  HEAD——要求服务器查找某对象的元信息,而不是对象本身。
  POST——从客户机向服务器传送数据,在要求服务器和CGI做进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容,让CGI程序处理。

GET——根据URL,会请求文件、数据库查询结果、程序运行结果等多种内容。

头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。

常用的头信息包括:

Accept:浏览器可接受的MIME类型。
Accept Charset
:浏览器可接受的字符集。
Accept Encoding
:浏览器能够进行解码的数据编码方式,比如gzip

Accept Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization
:授权信息,通常出现在对服务器发送的WWW - Authenticate头的应答中。
Connection
:表示是否需要持久连接。如果Servlet看到这里的值为“Keep Alive”,或者看到请求使用的是HTTP 1.1HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content Length
:表示请求消息正文的长度。

Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。
From
:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
Host
:初始URL中的主机和端口。

。。。
  请求头——告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。
  实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
  实体——请求或应答对象本身。
  一个请求的例子为:
  GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0

 

3.发送响应
  服务器在处理完客户的请求之后,要向客户机发送响应消息。
  HTTP/1.0的响应消息格式如下:
  响应消息=状态行(通用信息头|响应头|实体头) CRLF 〔实体内容〕
  状态行=HTTP版本号 状态码 原因叙述
  状态码表示响应类型
  1××  保留
  2××  表示请求成功地接收
  3××  为完成请求客户需进一步细化请求
  4××  客户错误
  5××  服务器错误
  响应头的信息包括:服务程序名,通知客户请求的URL需要认证,请求的资源何时能使用。下面是一些常用的响应头:

Date:Mon,08Sep200317:10:49GMT
Server:Apache/1.3.23
Last-Modified:Mon,08Sep200303:48:19GMT
ETag:"32417-c4-3e5d8a83"
Accept-Ranges:bytes
Content-Length:196
Connection:close
Content-Type:text/html

一个响应的例子为:
  HTTP/1.0200


  4.关闭连接
  客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话

示例:

下面用最常用的GET方法,来说明具体的报文应用
----------------------------------
GEThttp://www.youhost.comHTTP/1.0
accept:www/source;text/html;image/gif;image/jpeg;*/*
User_Agent:myAgent
**
空行**
-----------------------------------
这个报文是向www.youhost.com主机请求一个缺省HTML文档。客户端HTTP协议版本

号是1.0版,元信息包括可接收的文件格式,用户代理,每一段之间用回车换行符分
隔,最后以一个空行结束。发向服务器后,如果执行过程正常,服务器返回以下代码:
------------------------------------
HTTP/1.1200OK
Date:Tue,14Sep199902:19:57GMT
Server:Apache/1.2.6
Connection:close
Content-Type:text/html
**
空行
**
......
------------------------------------
HTTP/1.1
表示这个HTTP服务器是1.1版,200是服务器对客户请求的应答状态码,
OK
是对应答状态码的解释,之后是这个文档的元信息和文档正文。(相关应答状态码和元

信息的解释请参阅Inetrnet标准草案:RFC2616)

参考资料:
基于混合TCP-UDP的HTTP协议实现方法
HTTP协议三--断点续传