Java学习系列——HTTP协议

HTTP协议第一讲:

简介:http协议是超文本传输协议的简写,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器和WEB服务器之间交换数据的过程以及数据本身的格式。

HTTP 1.0会话格式:

浏览器与WEB服务器的连接过程是短暂的,每次连接处理一个请求和响应,对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。

浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

 

当代理服务器没有web浏览器请求的资源时,代理服务器就去请求WEB服务器,然后将资源缓存在代理服务器中,下一次请求就直接去代理服务器请求

 

浏览器访问多图网页的过程:

 

浏览器获得网页内容,再根据urlWEB服务器请求加载图片数据。需要多次请求和响应,每一次请求和响应都需要建立连接。

 

 

HTTP1.1HTTP1.0的比较

 

HTTP1.1的特点:

 

1)在一个tcp连接上可以传送多个http请求和响应

 

2)在多次请求和响应过程可以重叠进行。

 

3)增加了更多的请求头和响应头。建立主机名来明确表示要访问服务器的那个站点

 

HTTP请求信息:

 

(1)结构

 

一个请求行、若干消息头以及实体内容。

 

其中一些消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。

HTTP响应消息:

结构:

一个状态行、若干消息头以及实体内容。

其中一些消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。

其他细节:

响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看见的内容。

一个使用GET方式的请求消息中不能包含实体内容,只有使用POSTPUTDELETE方式的请求消息中才可以包含实体内容。

对于HTTP1.1来说,如果HTTP消息中包括实体内容且没有采用chunked传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务程序就无法知道实体内容何时结束。

HTTP协议中,还可以使用简单的请求消息和响应消息,它们都没有消息头部分。简单的请求消息只能用于GET方式,且请求行不用指定HTTP版本号。对于简单的请求消息,服务器返回简单的响应消息,简单的响应消息之返回实体内容。

 

HTTP消息头:

使用消息头,可以实现HTTP客户机与服务器之间的条件请求和应答。消息头相当于服务器和浏览器之间的暗号指令。

每一个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符,不区分大小写。

EgAccept-Langage: en-us

消息头又可以分为通用消息头,请求头,响应头和实体类四种。

许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个项之间以逗号隔开。

请求行:

格式:请求方式  资源路径  HTTP版本号<CRIF>(回车和换行字符)

举例:GET /TEST.HTML HTTP/1.1

方式:GET POST HEAD OPTIONS DELETE TRACE PUT

状态行:

格式:HTTP版本好  状态码  原因叙述<CRIF>(回车和换行字符)

举例:HTTP/1.1 200 OK

 

HTTP1.1 中至少包含一个host头字段

 

使用GETPOST方式传递参数:

url地址后面可以附加参数,默认为GET方式

 

GET方式:

 

特点:传送的数据量是有限制的,一般限制在1KB以下

POST方式:

 

响应状态码:

用于表示服务器对请求的各种不同处理结果和状态,三位的十进制数,响应码可归为5种类别,使用最高位进行分类:

1100-199

表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。

2200-299

表示成功接收请求并已完成整个处理过程

3300-399

为完成请求,客户需要进一步细化请求,例如请求资源已经移动到一个新地址。

4400-499

客户端的请求有错误

5500-599

服务器端出现错误

 

典型情况:

200:正常,表示一切正常,返回的是正常的处理结果

206:客户发送了一个带有range头的get请求,返回部分内容

302/307:指出被请求的文档已经被临时移动到别处,新的urllocation响应头中给出

304:表示客户机缓存的是最新的

401:表示客户机访问的是受口令和密码保护的页面

404:服务器找不到客户机所请求的资源

500:服务器端的asp,jsp等程序发生错误。

 

 

 

第三讲 通用信息头

通用信息头用于请求消息,也可用于响应消息,包括了一些与被传输的实体内容没有关系的常用信息头字段。

Cache-control:no-cache(用于请求消息中是要通知代理服务器是否缓存最新,用于响应消息时通知客户机如何缓存当前消息),no-cache告诉客户机和代理服务器不要缓存当前的消息。

 

Connection:使用哪种方式,是持久连接还是连接一次就关闭。

Date:时间  必需

Pragma:设置值只能为no-cache  不缓存

Trailer:设置Date字段放在尾部

Transfer-Encoding:chunked 编码方式 chunked把实体内容分成多个段进行传输

当服务器填满整个缓存区还没有将要发送的写满时就使用transfer-encoding,如果一段写满了就可以使用Connection-length

Upgrade:允许服务端转换协议版本

Via:由代理服务器产生,表示客户机所途经的代理服务器的顺序

Warning:any text 用于说明其他头字段和状态码不能说明的东西

 

 

请求头:

用户客户端在请求消息中向服务器传递附加消息,主要包括客户端可以接收的数据类型,压缩方式,语言以及发出请求的超链接所属网页的url地址等消息

Accept:用于指出客户端能够处理的格式,text/html,image/*

Accept-Charset:客户端程序能够使用的字符集

Accept-Encoding:客户机能够进行解码的编码方式,一般指压缩方式。

Accept-Language:客户机希望服务器返回哪个国家的语言。

Authorization:WEB服务器如果访问有口令或密码的网页时,客户机要使用这个字段 Basic

Expect:100-continue 用于指定客户机指令服务器做其他工作

From:发送email地址

Host:指定客户端访问的资源所在的主机名和端口号

If-Match:附带以前缓存的实体标签内容

If-Modified-Since:指定上次所缓存的网页修改时间

If-None-Match:If-Match相反

If-Range:时间值

If-UnModified-Since

Max-forwards:途经的代理服务器最大的数量

Proxy-Authorization:与Authorization相似

Range:用于指定服务器只需返回网页中的部分内容。Bytes=100-599 bytes=-100 bytes=100-

Referer:用于指定浏览器单击哪个超链接而来的。

TE:用于说明其他编码方式

 

第四讲:

 

实体头:用作实体内容的元信息,描述了实体内容的属性

Allow:GET/POST

Content-Encoding:用于指定实体内容压缩编码方式

Content-Language:语言

Content-length:表示实体内容的大小

Content-location:用于指定响应消息中所封装实体内容的实际位置

Content-MD5:判断内容在传输过程中有没有被修改  数字摘要

Content-Range:用于指定服务器返回的部分内容的位置

Content-Type:服务器格式的数据  MIME 指出实体内容的MIME类型  数据格式

Expires:当前文档什么时候会过期  GMT格式

 扩展头:

 正式规范里没有定义的头字段

现在流行的浏览器都支持cookie set-cookie refresh content-Disposition

Refresh头字段:

用于告诉浏览器过多少秒重新发送请求

Refresh1 url= 指定时间跳转到url

Content-Disposition头字段

不是直接处理请求  而是保存到一个文档中 attachment;filename=aaa.zip  保存在文档  

 

posted @ 2016-04-10 10:55  emma_zhang  阅读(354)  评论(0编辑  收藏  举报