HTTP协议学习心得体会(共3篇)
HTTP(HyperText Transfer Protocol)
====================================
是TCP/IP协议集中的一个应用层协议,用于定义浏览器和Web服务器之间交换数据的过程以及数据本身的格式。现在被广泛使用的是HTTP1.1,相对于1.0,1.1的最大特点是支持持续连接。
基于HTTP1.0协议的客户机与服务器的信息交换过程包括四个步骤:建立连接;发送请求信息;回送响应信息;关闭连接。
通信过程总是通过浏览器发送请求来启动的,Web服务器则是被动地对这些请求作出响应。HTTP协议是无状态的。
HTTP1.1与HTTP1.0的比较
------
HTTP1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。服务器不跟踪每个客户机,也不记录过去的请求。为了克服HTTP1.0的这个缺陷,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。HTTP1.1还允许客户端不用等待上一次请求结果返回,就可以发送下一次请求,但服务器端必须按照接受到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。
HTTP1.1还增加了host请求头字段,用于明确表示访问服务器上的哪个web站点,可以在一个IP地址和端口号上使用不同的主机名来创建多个虚拟web站点。HTTP1.1还有keep-alive请求头来支持持续连接。
HTTP消息的格式
-----------------------
一个完整的请求消息包括:一个请求行,若干消息头,以及实体内容,其中消息头和实体内容都是可选的。消息头和实体内容之间要用空行隔开。浏览器使用GET方式的请求消息可以放松不含实体内容的请求消息。只有使用POST, PUT, DELETE方式的请求消息中才可以包含实体内容。
Hypertext Transfer Protocol
GET / HTTP/1.1rn
Request Method: GET
Request URI: /
Request Version: HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap,application/x-shockwave-flash, application/vnd.ms-excel, application/vn
Accept-Language: zh-cnrn
UA-CPU: x86rn
Accept-Encoding: gzip, deflatern
User-Agent: Mozilla/4.0(compatible;MSIE 7.0;Windows NT 6.0;SLCC1;.NET CLR
2.0.50727;.NET CLR 3.0.04506)rn
Connection: Keep-Alivern
rn
一个完整的响应消息包括:一个状态行,若干消息头,以及实体内容。同样,消息头和实体内容都是可选的。消息头和实体内容之间要用空行隔开。消息响应的实体内容就是网页文档的内容。
Hypertext Transfer Protocol
HTTP/1.1 200 OKrn
Request Version: HTTP/1.1
Response Code: 200
Cache-Control: privatern
Content-Type: text/html;charset=UTF-8rn
Set-Cookie:
PREF=ID=7f53f6f0b1511417:NW=1:TM=1205568884:LM=1205568884:S=zHreYqNC-Z3rmOc6;expires=Mon, 15-Mar-2010 08:14:44 GMT;path=/;domain=.google.cnrn
Content-Encoding: gziprn
Server: gwsrn
Transfer-Encoding: chunkedrn
Date: Sat, 15 Mar 2008 08:14:44 GMTrn
rn
HTTP chunked response
Data chunk(1025 octets)
Chunk size: 1025 octets
Data(1025 bytes)
HTTP消息头
----------------
HTTP请求和响应都使用消息头来描述HTTP消息本身的信息,可以实现HTTP客户机与服务器之间的条件请求和应答。
消息头可以分为:通用消息头,请求头,响应头,实体头四类。
请求行与状态行
-----------------------
请求消息的请求行包括三个部分:请求方式,资源路径,以及使用的HTTP版本。如:GET /
HTTP/1.1rn。
响应消息的状态行包括三个部分:HTTP协议的版本号,一个表示成功或者失败的整数代码(状态码)和对状态码进行描述的文本信息。如:HTTP/1.1 200 OKrn。
使用GET和POST方式传递参数
-------------
在URL地址后面可以附加一些参数,每个参数由参数名和参数值组成,例如:当使用GET方式提交表单内容时,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行中的资源路径后面。使用GET方式传送的数据量有限制,一般在1KB以下。
当使用POST方式提交表单内容时,浏览器将个表单字段元素及其数据作为HTTP消息的实体内容发送给服务器。因此数据量可以比GET方式大的多。使用POST方式时,还必须将Content-Type消息头设置为“application/x-www-form-urlencoded”,将Content-length消息头设置为实体内容的长度。
响应状态码
---------------
1.100~199: 成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程。
2.200~299: 成功接受请求并已完成整个处理过程。
3.300~399: 为完成请求,客户端需要进一步细化请求。
4.400~499: 客户端的请求有错误。
5.500~599: 服务器段出现错误。
通用信息头
==============
即能用于请求消息,也能用于响应消息,包括一些与被传输的实体内容没有关系的常用消息头字段。
1.Cache-Control
2.Connection
3.Date
4.Pragma
5.Trailer
6.Transfer-Encoding
7.Upgrade
8.Via
9.Warning
Cache-Control
--------------------
如果位于请求消息头,用于通知位于客户机和服务之间的代理服务器如何使用已缓存的页面,可以取值为:no-cache, no-store, max-age, max-stale, min-fresh, no-transform, only-if-cached等。
如果位于响应消息头,用于通知客户机和代理服务器如何缓存该页面,可以取值为:public, private, no-cache, no-store, no-transform, must-revalidate, proxy-revalidate, max-age, s-maxage等。
Connection
---------------
用于指定处理完本次请求/响应后,客户端与服务器是否还要继续保持连接。如果为Keep-Alive,则保持连接,如果为close,则关闭。HTTP1.1默认采用持久连接。
Date
---------
表示HTTP消息产生的当前时间。服务器回送的正常响应消息中,应该总是设置Date头字段。如果客户机发送的请求消息中包含有实体内容,也要设置Date。
Pragma
------------
只能固定为no-cache.Trailer
-----------
一些头字段可以放置在整个HTTP消息的尾部。
Transfer-Encoding
---------------------
指定传输编码方式,目前标准的设置值只有chunked,用于把整个消息分成一连串的分段后进行传输。
Upgrade
------------
允许客户机指定它所支持并希望将当前协议切换到的通信协议。
Via
-----
用于指定HTTP消息所途径的中介代理服务器名称和所使用的协议。
请求头
=========
客户端可以接受的数据类型,压缩方法,语言,以及发出请求的超链接所属页面的URL地址等信息。Accept:指出客户端程序能够处理的MIME类型。
Accept-Charset:用于指出客户端程序可以使用的字符集。
Accept-Encoding:客户机能够进行解码的数据编码方式。
Accept-Language:指定客户机期望服务器返回哪个国家语言的文档。
Authorization:两种认证方式BASIC,和DIGEST.Except:
From:
Host: 指定资源所在的主机号和端口号。HTTP1.1中每个请求消息中都必须包含Host请求字段。If-Match:
If-Modified-Since:
If-None-Match:
If-Range
If-Unmodified-Since
Max-Forwards:
Proxy-Authorization:
Range:
Referer: 当单击另一个网页上的超链接时发出的请求在Referer字段中指定URL。
TE:
User-Agent:
响应头
==========
Accept-Range, Age, Etag,Location: 用于通知客户机应当到哪个新的地址去获取文档。状态码为300~399的响应消息都应该使用Location字段将新的文档地址告诉客户机,以便客户机自动重新连接到新地址并检索新文档。使用Location头的HTTP消息不应该有实体内容。所以,HTTP消息头中不能同时出现Location和Content-Type这两个头字段。
Proxy-Authenticate,Retry-After, Server, Vary, WWW-Authenticate。
实体头
========
是实体内容的元信息,描述了实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
Allow: 指定客户端请求的资源所支持的请求方法(如GET,POST等)。
Content-Encoding: 指定实体内容的压缩编码方式。
Content-Language:
Content-Length: 用于表示实体内容的长度(字节数),浏览器与Web服务器之间使用持久连接时,这个字段在非Chunked传输编码的响应消息中是必不可少的。
Content-Location: 指定响应消息中所封装的实体内容的实际位置路径。
Content-MD5, Content-Range, Content-Type
Expires: 指定当前文档应该在什么时候被认为过期,浏览器到哪个时候以后不能再继续使用本地缓存,而是在有需要时应该像服务器发出新的请求访问。
Last-Modified:文档的最后更改时间。
扩展头
========
现在流行的浏览器实际上都支持Cookie,Set-Cookie,Refresh和Content-Disposition等几个常用的扩展头字段。
最近看雅虎黄金34条,学习下优化网站性能的方法,
浏览器缓存相关http头尽量减少http的请求次数
。其中有一条:“为文件头指定Expires或Cache-Control”,具体来说指对于静态内容:设置文件头过期时间Expires的值为“Never expire”永不过期;而对于动态内容:使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求。
这一条可以和雅虎34条的第一条联系起来,那就是尽量减少http的请求次数(雅虎34条很多都是努力去减少http请求为目的的),毕竟如果有太多的资源需要下载需要新的http链接叠加起来的耗时是不容忽视的。所以可以利用缓存技术来对网站的性能加以优化,从而避免不必要的http请求。刚好可以顺便整理下浏览器相关的缓存技术和与缓存相关的http的头:
1.Expires(过期时间):
HTTP头信息Expires(过期时间) 属性是HTTP控制缓存的基本手段,告诉浏览器缓存保存的时间。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被修改。适用于设置静态图片文件等等,而且对于控制有规律改变的网页也很有用,比如设置间隔固定的时间去更新等等;如果使用了Expires文件头,当页面内容改变时就必须改变内容的文件名。比如Yahoo经常使用这样的步骤:在内容的文件名中加上版本号,如yahoo_2.0.6.js,从而能够主动进行更新。
使用expires: 如果你使用的是Apache服务器,可以使用ExpiresDefault来设定相对当前日期的过期时间,使用mod_expires,在httpd.conf或者.htaccess中加上
复制代码
代码如下:
ExpiresDefault “access plus 10 years”
2.Cache-Control
各个消息中的指令含义如下:
1.Public指示响应可被任何缓存区缓存;
2.Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
3.no-cache指示请求或响应消息不能缓存;
4.no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存;
5.max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应,
6.min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
7.max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息;
举例:
一般说来这种静态文件永远不应该过期,如果真的要给这个Cache加上一个期限,那我希望是 ——一万年
即:“Cache-Control: max-age = 315360000000”
3.Last-Modified/If-Modified-Since
一问一答的模式,这边问你更新了没有,那边回答,很容易理解;
4.配置ETag
Entity tags(ETags)(实体标签)是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制(“实体”就是所说的“内 容”,包括图片、脚本、样式表等)。增加ETag为实体的验证提供了一个比使用“last-modified date(上次编辑时间)”更加灵活的机制。Etag是一个识别内容版本号的唯一字符串。唯一的格式限制就是它必须包含在双引号内。原始服务器通过含有 ETag文件头的响应指定页面内容的ETag。例如:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 03:03:59 GMT
ETag: “10c24bc-4ab-457e1c1f”
Content-Length: 12195
稍后,如果浏览器要验证一个文件,它会使用If-None-Match文件头来把ETag传回给原始服务器。在这个例子中,如果ETag匹配,就会返回一 个304状态码,这就节省了12195字节的响应。
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: “10c24bc-4ab-457e1c1f”
HTTP/1.1 304 Not Modified
关于以上几种缓存机制的优先级,在网上找到一种说法:
no-cache>Expires>Last-Modified
Apache 起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发。此后,Apache 被开放源代码团体的成员不断的发展和加强。Apache 服务器拥有牢靠可信的美誉,已用在超过半数的因特网站中-特别是几乎所有最热门和访问量最大的网站。
开始,Apache只是Netscape网页服务器(现在是Sun ONE)之外的开放源代码选择。渐渐的,它开始在功能和速度超越其他的基于Unix的HTTP服务器。4月以来,Apache一直是Internet上 最流行的HTTP服务器: 5月它在 57% 的网页服务器上运行;到了7月这个比例上升到了69%。在月的时候达到接近70%的市占率,不过随着拥有大量域名数量的主机域名 商转换为微软IIS平台,Apache市占率近年来呈现些微下滑。而Google自己的网页服务器平台GWS推出后,加上Lighttpd这 个轻量化网页服务器软件使用的网站慢慢增加,反应在整体网页服务器市占率上,根据netcraft在7月的最新统计数据,Apache的市占率 已经降为52.65%,8月时又滑落到50.92%,
尽管如此,它仍旧是现阶段因特网市场上,市占率最高的网页服务器软件。[2]
作者宣称因为这个名字好记才在最初选择它,但是流传最广的解释是(也是最显而易见的):这个名字来自这么一个事实:当Apache在1995年初开发的时候,它是由当时最流行的HTTP服务器NCSA HTTPd1.3 的代码修改而成的,因此是“一个修补的(a patchy)”服务器。然而在服务器项目主页的FAQ中是这么解释的:“‘Apache’这个名字是为了纪念名为Apache(印地语)的美洲印第安人 土著的一支,众所周知他们拥有高超的作战策略和无穷的耐性”。无论如何,Apache 2.x 分支不包含任何 NCSA 的代码。
Apache支持许多特性,大部分通过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持 Perl,Python, Tcl, 和 PHP。流行的认证模块包括 mod_access, mod_auth 和 mod_digest。其他的例子有 SSL 和 TLS 支持 (mod_ssl), 代理服务器 (proxy) 模块,很有用的URL重写(由 mod_rewrite 实现),定制日志文件 (mod_log_config),以及过滤支持(mod_include 和 mod_ext_filter)。Apache日志可以通过网页浏览器使用免费的脚本AWStats或Visitors来进行分析。
【HTTP协议学习心得体会】推荐阅读:
教师网络学习学习心得07-05
学习李芳事迹学习体会06-14
企业风险管理学习心得_学习风险管理体会07-01
学习两学一做四对照四反思学习心得体会05-24
三实学习心得体会06-06
集体学习心得体会06-27
学习名人心得体会07-07
网上学习心得体会07-25
蜕变学习心得体会07-28
网络学习心得体会09-15