一、简介
1.http默认端口号为80,Https的端口号默认为443;
2.http协议永远都是客户端发起请求,服务器回送响应(这样也就限制了使用http协议,无 法实现在客户端没有发起请求的时候,服务器将消息推送给客户端);
3.http协议是个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的;
4.HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。
二、请求消息
请求消息结构如下:
<request-line>
<headers>
<blank line>
[<request-body>]
其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]
请求行实例:
例1:GET /index.html HTTP/1.1
例2:POST http://192.168.2.217:8080/index.jsp HTTP/1.1
在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。
以下就是一个典型的POST请求:
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
从上面可以发现, POST请求和GET请求之间有一些区别。首先,请求行开始处的GET改为了POST,以表示不同的请求类型。你会发现首部Host和User-Agent仍然存在,在后面有两个
新行。其中首部Content-Type说明了请求主体的内容是如何编码的。浏览器始终application/ x-www-form- urlencoded的格式编码来传送数据,这是针对简单URL编码的MIME类型。首部Content-Length说明了请求主体的字节数。在首部Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的“名称—值”对的形式给出的,其中name是Professional Ajax,publisher是Wiley。你可以以同样的格式来组织URL的查询字符串参数。
三、响应消息
响应消息结构:
<status-line>
<headers>
<blank line>
[<response-body>]
其中:状态行 = 版本号 [空格] 状态码 [空格] 原因 [回车换行]
状态行举例:
例1:HTTP/1.0 200 OK
例2:HTTP/1.1 400 Bad Request
如下所示,HTTP响应的格式与请求的格式十分类似:正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。以下就是一个HTTP响应的
例子:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
1.http默认端口号为80,Https的端口号默认为443;
2.http协议永远都是客户端发起请求,服务器回送响应(这样也就限制了使用http协议,无 法实现在客户端没有发起请求的时候,服务器将消息推送给客户端);
3.http协议是个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的;
4.HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。
二、请求消息
请求消息结构如下:
<request-line>
<headers>
<blank line>
[<request-body>]
其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]
请求行实例:
例1:GET /index.html HTTP/1.1
例2:POST http://192.168.2.217:8080/index.jsp HTTP/1.1
在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。
以下就是一个典型的POST请求:
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
从上面可以发现, POST请求和GET请求之间有一些区别。首先,请求行开始处的GET改为了POST,以表示不同的请求类型。你会发现首部Host和User-Agent仍然存在,在后面有两个
新行。其中首部Content-Type说明了请求主体的内容是如何编码的。浏览器始终application/ x-www-form- urlencoded的格式编码来传送数据,这是针对简单URL编码的MIME类型。首部Content-Length说明了请求主体的字节数。在首部Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的“名称—值”对的形式给出的,其中name是Professional Ajax,publisher是Wiley。你可以以同样的格式来组织URL的查询字符串参数。
三、响应消息
响应消息结构:
<status-line>
<headers>
<blank line>
[<response-body>]
其中:状态行 = 版本号 [空格] 状态码 [空格] 原因 [回车换行]
状态行举例:
例1:HTTP/1.0 200 OK
例2:HTTP/1.1 400 Bad Request
如下所示,HTTP响应的格式与请求的格式十分类似:正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。以下就是一个HTTP响应的
例子:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>