标题虽说是HTTP详解,但是我知道这并不详细,只是个人目前的知识所限。欢迎大家一起学习,大神指点。
Http(HyperText Transfer Protocol,超文本传输协议)是访问万维网使用的核心通信协议。
Http使用一种消息的模型:客户端送出一条请求消息,而后由服务器返回一条响应消息,该协议基本上 不需要连接,虽然Http使用有状态的Tcp协议作为它的传输机制,但每次请求与响应交换都自动完成,并且可能使用不同的TCP连接。
HTTP请求
HTTP 1.1支持七种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE,常用的为请求方法是GET和POST。
下面看下对百度的Http的请求(我用Winsock Expert抓的包)
GET / HTTP/1.1 Host: www.baidu.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Cookie: BAIDUID=6B67E0960B5F15F76447A5824B7DECBB:FG=1; BDUT=vc541578AFCCB17CC9499F291711DE70C32413980e4830a1
第一行的 GET 说明http请求的方法,GET的主要作用就是从WEB服务器获取一个资源
GET后面是请求的URL(因为我打开的是主页所以是 / ),URL由被请求的资源名称,以及一个包含客户端向该资源提交的参数的可选查询字符串结成。
HTTP/1.1这个就是说使用的HTTP版本,现在网上基本上也全是1.1版本的.
Host 当然就是请求的主机了。
User-Agent:这个是提供生成请求的客户端软件有关的信息,对于普通用户来说,这也就是浏览器的相关信息,看上面就知道我用的是firefox浏览器了,呵呵···
Accept:告诉服务器愿意接受哪些内容
Accept-Language:这个当然就是说的是哪一种语言了,zh-cn这个是中文,应该都知道吧···········
Accept-Encoding:告诉服务器愿意接受那种编码方式
Connection:这个说的是连接状态········keep-alive即保持连接
cookie:用于提交服务器向客户发布的其他参数。
如果浏览其他的网页还会有个Referer的消息头,例如:
Referer: http://news.baidu.com/
Referer:用于发出请求的原始URL.
HTTP响应
在来看看百度的响应
HTTP/1.1 200 OK
Date: Sun, 02 Sep 2012 05:04:11 GMT
Server: BWS/1.0
Content-Length: 4149
Content-Type: text/html;charset=gbk
Cache-Control: private
Expires: Sun, 02 Sep 2012 05:04:11 GMT
Content-Encoding: gzip
Connection: Keep-Alive
响应的第一行,分别是使用的HTTP版本;请求结果的数字状态码(200是做常用的状态码),它表示成功提交请求,正在翻译被请求的资源;最后的OK,进一步说明响应状态,浏览器不将它用于任何目的。
Data这就不用说了吧。
Server:指明所使用的WEB服务器软件,有时还包括其他信息,如所安装的模块和服务器操作系统,但是其中包含的信息可能并不准确。这里显示BWS/1.1这服务器还真没听说过,难道是百度自己开发的·····
Content-Length:规定消息主体的字节长度。
Content-Type:表示消息主体中包含一个HTML文档
Cache-Control:缓存控制。想多了解点看这里http://baike.baidu.com/view/9238254.htm
Expires:缓存的失效日期
Content-Encoding:编码方式
Connection:和上面请求一样。
GET方法和POST方法介绍--------摘自 The Web Application Hacker's Handbook 一书
Get方法的作用在于获取资源,它可以以URL查询字符串的形式向被请求的资源发送请求,这使得用户可将一个包含动态资源的URL标注为标签,用户自己或其他用户可以重复利用它随后获取的等价资源。URL显示在屏幕上,并被记录在许多地方,如浏览器的历史记录和web服务器的访问日志中,如果单击外部链接,还可以用Referer消息头将他们传送到其他站点。因此,请勿使用查询字符串传送任何敏感信息。
Post方法的主要作用是执行操作,使用这个方法可以在URL查询字符串的消息主体中发送请求参数,尽管仍然可以将URL标注为书签,但书签中并不包含主体发送的任何参数许多维护URL日志的文职及Referer消息头也将这些参数排除在外。因为POST方法旨在执行操作,如果用户单击浏览器上的后退按钮,返回一个使用这种方法访问的页面,,那么浏览器不会自动重新发送请求,而是就即将发生的操作想用户发出警告。
欢迎各路大神指正批评,菜鸟一起学习········