http协议包含两个部分:请求和回应。请求就是URL+浏览器自身的一些信息。服务器接受这个请求后,发出回应,回应包含关于请求的信息和URL的地址里面包含的数据(如果有的话)。接下来由浏览器解读回应,显示页面。
HTTP请求格式:
<request-line>请求的类型,读取的资源,HTTP的版本
<headers>服务器所需的附加信息
<blank line>
[<request-body>]
HTTP请求例子:
GET :tell the server to get the resource and send it back;
GET的请求格式:
GET / HTTP/1.1 ----第一个/,说明请求是对于域名的根目录;最后的部分说明使用HTTP版本1.1<request-line>
HOST:www.wrox.com-----说明请求发送的目的地<headers>
一二行加起来,说明请求是针对路径www.wrox.com/.Host Headerd 是HTTP1.1必须的,HTTP1.0不需要。如果路径是www.wrox.com/books,那么GET /books/ HTTP/1.1。发送参数时需要另外的信息。URL?name=value$name2=value2&..nameN=valueN,这个信息叫做query string,GET /books/?name=Professinal%20Ajax HTTP/1.1,"Professinal Ajax "为通过URL发送被编码,%20代替空格,这叫做URL编码。这种编码被用到HTTP的许多部分,(Javascript有函数处理URL编码和解码)数值对用&分开,服务器端技术会自动解码request body ,提供逻辑方法获取数值。当然由服务器端决定怎么处理这些数值。
User-Agent:Mozilla/5.0(。。。)<headers>是你使用的浏览器定义的,每一次发送请求的时候都自动发送。
Connection:Keep-Alive <headers>浏览器操作
<blank line>
POST的请求格式:
POST / HTTP/1.1
HOST:www.wrox.com
User-Agent:Mozilla/5.0(。。。)
Content-Type:application/x-www-form-urlencoded<header>决定请求的request body是怎么样加密的。浏览器总是加密post data 作为application/x-www-form-urlencoded,这是一种MIME类型,对于简单的URL加密的类型。
Content-Length:40<header>说明request body的字节长度,由简单的name-value对组成,name是Professinal Ajax ;publisher 是Wiley;这个name-value对和query string里面的name-value pair 是一样的。
Connection:keep-Alive
name=Professinal%20Ajax&publisher=Wiley
HTTP回应:
<status-line>
<headers>
<blank line>
[<response-body>]
HTTP回应例子:
HTTP/1.1 200 OK-----包含状态信息通过状态码而不是请求信息,状态码200和信息OK
Date:Sat, 31 Dec 2005 23:59:59 GMT
Content-Type:text/html; charset=ISO-8859-1
Content-Length:122
<html><response body>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!--body goes here-->
</body>
</html><response body>
常用状态码:
200(OK):成功找到资源。
304(NOT MODIFIED):上次请求之后资源没有被修改,这个经常用于浏览器缓存机制。
401(UNAUTHORIZED):客户端并没有被授权获得资源,通常,这会使浏览器会提问用户名和密码去登陆服务器。
403(FORBIDDEN):客户端获取权限失败。这个通常发生在,你的登陆时的用户名或密码错误,在401之后。
404(NOT FOUND):在访问的路径中资源不存在。