二.HTTP协议
1.HTTP概念
HTTP协议是内部使用了TCP/IP协议,TCP协议负责建立连接,HTTP协议是在TCP协议建立连接的基础上,规定使用某种规则进行通信,使得服务器端和客户端有统一的通信规范,能够理解彼此的要求。因此TCP协议是连接层的协议,而HTTP协议是网络通信层的协议。
2.HTTP版本
HTTP1.1, 保持连接, 客户端与服务器一问一答之后, 不断开连接, 下次访问仍然使用这个连接
HTTP1.0, 不保持连接, 客户端与服务器一问一答之后, 连接断开, 下次访问时重新创建连接
*************** 我们通过IE浏览器访问一个游戏的官方网站经历了以下过程
1,我们输入龙之谷或者英文形式的WWW.LZG.COM,遵循的协议是HTTP,首先IE浏览器帮我们把我们输入的地址发给DNS域名解析器请求解释,然后DNS解析完毕以后返回一个IP地址,这个IP地址就是龙之谷官方网站的IP地址。
2,IE浏览器把IP地址和端口号以及访问哪些内容发送给龙之谷官方网站(访问龙之谷官方网站),龙之谷官方网站做出回应,于是就建立了连接。(当然底层是TCP协议建立起来的连接)
3,建立连接的同时服务器得到了客户端的IP地址和端口号 以及IE浏览器信息等等,然后返回IE浏览器需要的信息给IE浏览器。
4,如果访问的页面不存在,服务器会返回一个乱七八糟的东西找不到页面等等 表示无法访问。
HTTP格式:以HTTP开头,后面跟主机地址,端口号,访问什么文件。(标准格式);我们也可以直接写通俗易懂的域名语言让DNS帮我们解析成标准的格式。
IE浏览器给服务器发送的请求如下:
request请求消息:(客户端发送的请求数据)
@@@@@@@@第一种 get请求
GET /a/a.html HTTP/1.1 请求方式 , 要访问什么文件,遵循的协议。
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* 能接收哪些类型文件
Accept-Language: zh-cn 接收的语言。
UA-CPU: x86
Accept-Encoding: gzip, deflate 接收的压缩格式
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA) 浏览器信息
Host: 127.0.0.1:3333 我要访问你的哪个主机IP地址 和你的哪个端口号
Connection: Keep-Alive 保持连接 如果配成CLOSE就相当于1.0版本的了。
Cache-Control:no-cache 不缓存 是否缓存服务器返回的数据到本地Cache。
@@@@@@@@@@第二种请求方式为 post请求
post /a/a.html HTTP/1.1 请求方式 , 要访问什么文件,遵循的协议。
Cache-Control:no-cache 不缓存 是否缓存服务器返回的数据到本地Cache。
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* 能接收哪些类型文件
Accept-Language: zh-cn 接收的语言。
UA-CPU: x86
content-Type: 连接类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
content-Length:25 消息数据长度
Accept-Encoding: gzip, deflate 接收的压缩格式
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA) 浏览器信息
Host: 127.0.0.1:3333 我要访问你的哪个主机IP地址 和你的哪个端口号
Connection: Keep-Alive 保持连接 如果配成CLOSE就相当于1.0版本的了。
userName=xxx&password=xxx 消息数据
注:我们可以看出,在get请求的消息里面不包含任何附带的数据,例如用户名密码等等!也没必要包含数据长度! 而post请求里面,可以带数据,和数据长度信息!
--------------------------------------------------------
response响应消息 ( 服务器端的响应消息)
HTTP/1.1 200 OK 200ok (404表示找不到资源 ) 遵循的协议, 响应的状态玛
Server: Apache-Coyote/1.1 服务器信息
ETag: W/"8-1286587592453"
Last-Modified: Sat, 09 Oct 2010 01:26:32 GMT 最后修改时间
Content-Type: text/html 连接类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
Content-Length: 8 内容长度
Date: Sat, 09 Oct 2010 01:46:28 GMT 时间
注:一次连接可以访问多次,但是长时间不访问 会出现连接超时 断开连接。
其中最重要的两条信息是:GET /a/a.html HTTP/1.1 Host: 127.0.0.1:3333
像这些东西 Accept: Accept-Language: UA-CPU: Accept-Encoding: Host: 都是消息头!!!消息头的作用就是协议双方都懂的语言!!!随便乱写一个消息头,对方肯定会不认识!
注:服务器还有另外一种返回数据方式,里面不包含Content-Length这个头。替而代之的是这个头:Transfer-Encoding:chunked。这个标题头的意思就是数据会分成若干个数据包返回。每个数据包最前面默认就是数据的16进制值长度。所有数据完毕的最末尾会有一个大值为0的结尾标示。
那么服务器选择哪种方式是依据什么呢?答案如下:
服务器向客户端发送数据的时候,首先会把返回的消息存到缓冲区,如果缓冲区的空间足够装下要发送的内容,就可以计算出要发送的消息的长度,这个时候就用Content-Length,然后一次性推送给客户端。这样缓冲区就又有多的空间继续等待服务器继续存数据到缓冲区了,相同的如果缓冲区此时的空间不足以装下服务器要返回的所有数据,于是服务器就计算不了这些数据到底有多大,这个时候就只有分段去发送了,于是就用Transfer-Encoding:chunked。
------------------------------------------------------------------------------------
1.HTTP概念
HTTP协议是内部使用了TCP/IP协议,TCP协议负责建立连接,HTTP协议是在TCP协议建立连接的基础上,规定使用某种规则进行通信,使得服务器端和客户端有统一的通信规范,能够理解彼此的要求。因此TCP协议是连接层的协议,而HTTP协议是网络通信层的协议。
2.HTTP版本
HTTP1.1, 保持连接, 客户端与服务器一问一答之后, 不断开连接, 下次访问仍然使用这个连接
HTTP1.0, 不保持连接, 客户端与服务器一问一答之后, 连接断开, 下次访问时重新创建连接
*************** 我们通过IE浏览器访问一个游戏的官方网站经历了以下过程
1,我们输入龙之谷或者英文形式的WWW.LZG.COM,遵循的协议是HTTP,首先IE浏览器帮我们把我们输入的地址发给DNS域名解析器请求解释,然后DNS解析完毕以后返回一个IP地址,这个IP地址就是龙之谷官方网站的IP地址。
2,IE浏览器把IP地址和端口号以及访问哪些内容发送给龙之谷官方网站(访问龙之谷官方网站),龙之谷官方网站做出回应,于是就建立了连接。(当然底层是TCP协议建立起来的连接)
3,建立连接的同时服务器得到了客户端的IP地址和端口号 以及IE浏览器信息等等,然后返回IE浏览器需要的信息给IE浏览器。
4,如果访问的页面不存在,服务器会返回一个乱七八糟的东西找不到页面等等 表示无法访问。
HTTP格式:以HTTP开头,后面跟主机地址,端口号,访问什么文件。(标准格式);我们也可以直接写通俗易懂的域名语言让DNS帮我们解析成标准的格式。
IE浏览器给服务器发送的请求如下:
request请求消息:(客户端发送的请求数据)
@@@@@@@@第一种 get请求
GET /a/a.html HTTP/1.1 请求方式 , 要访问什么文件,遵循的协议。
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* 能接收哪些类型文件
Accept-Language: zh-cn 接收的语言。
UA-CPU: x86
Accept-Encoding: gzip, deflate 接收的压缩格式
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA) 浏览器信息
Host: 127.0.0.1:3333 我要访问你的哪个主机IP地址 和你的哪个端口号
Connection: Keep-Alive 保持连接 如果配成CLOSE就相当于1.0版本的了。
Cache-Control:no-cache 不缓存 是否缓存服务器返回的数据到本地Cache。
@@@@@@@@@@第二种请求方式为 post请求
post /a/a.html HTTP/1.1 请求方式 , 要访问什么文件,遵循的协议。
Cache-Control:no-cache 不缓存 是否缓存服务器返回的数据到本地Cache。
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */* 能接收哪些类型文件
Accept-Language: zh-cn 接收的语言。
UA-CPU: x86
content-Type: 连接类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
content-Length:25 消息数据长度
Accept-Encoding: gzip, deflate 接收的压缩格式
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA) 浏览器信息
Host: 127.0.0.1:3333 我要访问你的哪个主机IP地址 和你的哪个端口号
Connection: Keep-Alive 保持连接 如果配成CLOSE就相当于1.0版本的了。
userName=xxx&password=xxx 消息数据
注:我们可以看出,在get请求的消息里面不包含任何附带的数据,例如用户名密码等等!也没必要包含数据长度! 而post请求里面,可以带数据,和数据长度信息!
--------------------------------------------------------
response响应消息 ( 服务器端的响应消息)
HTTP/1.1 200 OK 200ok (404表示找不到资源 ) 遵循的协议, 响应的状态玛
Server: Apache-Coyote/1.1 服务器信息
ETag: W/"8-1286587592453"
Last-Modified: Sat, 09 Oct 2010 01:26:32 GMT 最后修改时间
Content-Type: text/html 连接类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
Content-Length: 8 内容长度
Date: Sat, 09 Oct 2010 01:46:28 GMT 时间
注:一次连接可以访问多次,但是长时间不访问 会出现连接超时 断开连接。
其中最重要的两条信息是:GET /a/a.html HTTP/1.1 Host: 127.0.0.1:3333
像这些东西 Accept: Accept-Language: UA-CPU: Accept-Encoding: Host: 都是消息头!!!消息头的作用就是协议双方都懂的语言!!!随便乱写一个消息头,对方肯定会不认识!
注:服务器还有另外一种返回数据方式,里面不包含Content-Length这个头。替而代之的是这个头:Transfer-Encoding:chunked。这个标题头的意思就是数据会分成若干个数据包返回。每个数据包最前面默认就是数据的16进制值长度。所有数据完毕的最末尾会有一个大值为0的结尾标示。
那么服务器选择哪种方式是依据什么呢?答案如下:
服务器向客户端发送数据的时候,首先会把返回的消息存到缓冲区,如果缓冲区的空间足够装下要发送的内容,就可以计算出要发送的消息的长度,这个时候就用Content-Length,然后一次性推送给客户端。这样缓冲区就又有多的空间继续等待服务器继续存数据到缓冲区了,相同的如果缓冲区此时的空间不足以装下服务器要返回的所有数据,于是服务器就计算不了这些数据到底有多大,这个时候就只有分段去发送了,于是就用Transfer-Encoding:chunked。
------------------------------------------------------------------------------------