HTTP详细介绍
HTTP概述
HTTP(HyperText Transfer Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用.
HTTP是stateless的,does not require the server to retain information or status about each user for the duration of multiple requests。解决办法是cookie。
URL组成
http://www.baidu.com/china/index.htm。它的含义如下:
1. http://:代表超文本传输协议,通知baidu.com服务器显示Web页,通常不用输入;
2. www:代表一个Web(万维网)服务器;
3. baidu.com/:这是装有网页的服务器的域名,或站点服务器的名称;
4. China/:为该服务器上的子目录,就好像我们的文件夹;
5. Index.htm:index.htm是文件夹中的一个HTML文件(网页)。
HTTP操作步骤
一次HTTP操作称为一个事务,其工作过程可分为四步: 【客户端是终端用户,服务器端是网站】
1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
【通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求】
2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
【通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息】
3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
【在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道. 应答的服务器上存储着(一些)资源,比如HTML文件和图像。】
4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
【HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。】
持续链接
加一个头Connection: Keep-Alive,这样做,连接就不会中断,而是保持连接。当客户端发送另一个请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。
较少的CPU和内存的使用(由于同时打开的连接的减少了),允许请求和应答的HTTP管線化降低网络阻塞 (TCP连接减少了),减少了后续请求的延遲(无需再进行握手),报告错误无需关闭TCP连接。
请求消息
GET /test.aspx HTTP/1.1
Host: download.microtool.de
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/4.04[en](Win95;I;Nav)
Range: bytes=554554-
Line 1:
- GET:Http Method(告訴Web Server網頁要執行方法),一共分為9種(註一),常用的Get與Post方法包含在裡面。表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件
- /test.aspx:這次要取回的URL網頁(目標網頁)
- HTTP/1.1:通訊協定HTTP的版本
- 註一:Http Method分為9種,分別為OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、 DEBUG,詳細可以參考Request Methods
Line 2:
- Host:Web Server 所使用的Host位置。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Referer头域
Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。
User-Agent头域
User-Agent头域的内容包含发出请求的用户信息。
Range头域
Range头域可以请求实体的一个或者多个子范围
响应消息
HTTP/1.1 200 OK Server: Microsoft-IIS/6.0 Content-Type: text/html Content-Length: 38 <html><body>Hello, world.</body><html>
Line 1:
- HTTP/1.1:通訊協定HTTP的版本
- 200:狀態代碼(Status Coe),為3位數組合
- OK:解釋狀態代碼原因(Status Code Reason),HTTP/1.1版本中用很簡短文字來描述狀態代碼,200 OK 代表本次請求Web Server回應正常。Status Code Definitions
Line 2:
- 指出Web服務器的類型
Line 3:
- MIME(Multipurpose Internet Mail Extensions)內容類型,MIME是由[type / subtype;種類/詳細類型]所組成;通常將網頁轉為 Word、Excel文件,就是修改這個屬性。
Line 4:
- 內容長度
Line 5:
- Content(表單內容)
The Status-Line and headers must all end with <CR><LF> (a carriage return followed by a line feed). The empty line must consist of only <CR><LF> and no other whitespace.
http://www.dotblogs.com.tw/marcus116/archive/2011/05/29/26428.aspx
http://hi.baidu.com/gfiadw/blog/item/698269f0f5392bc97931aa83.html