HTTP协议第一讲:
简介:http协议是超文本传输协议的简写,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器和WEB服务器之间交换数据的过程以及数据本身的格式。
HTTP 1.0会话格式:
浏览器与WEB服务器的连接过程是短暂的,每次连接处理一个请求和响应,对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
当代理服务器没有web浏览器请求的资源时,代理服务器就去请求WEB服务器,然后将资源缓存在代理服务器中,下一次请求就直接去代理服务器请求
浏览器访问多图网页的过程:
浏览器获得网页内容,再根据url向WEB服务器请求加载图片数据。需要多次请求和响应,每一次请求和响应都需要建立连接。
HTTP1.1和HTTP1.0的比较
HTTP1.1的特点:
(1)在一个tcp连接上可以传送多个http请求和响应
(2)在多次请求和响应过程可以重叠进行。
(3)增加了更多的请求头和响应头。建立主机名来明确表示要访问服务器的那个站点
HTTP请求信息:
(1)结构
一个请求行、若干消息头以及实体内容。
其中一些消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。
HTTP响应消息:
结构:
一个状态行、若干消息头以及实体内容。
其中一些消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。
其他细节:
响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看见的内容。
一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。
对于HTTP1.1来说,如果HTTP消息中包括实体内容且没有采用chunked传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务程序就无法知道实体内容何时结束。
在HTTP协议中,还可以使用简单的请求消息和响应消息,它们都没有消息头部分。简单的请求消息只能用于GET方式,且请求行不用指定HTTP版本号。对于简单的请求消息,服务器返回简单的响应消息,简单的响应消息之返回实体内容。
HTTP消息头:
使用消息头,可以实现HTTP客户机与服务器之间的条件请求和应答。消息头相当于服务器和浏览器之间的暗号指令。
每一个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符,不区分大小写。
Eg:Accept-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头字段
使用GET和POST方式传递参数:
在url地址后面可以附加参数,默认为GET方式
GET方式:
特点:传送的数据量是有限制的,一般限制在1KB以下
POST方式:
响应状态码:
用于表示服务器对请求的各种不同处理结果和状态,三位的十进制数,响应码可归为5种类别,使用最高位进行分类:
(1)100-199
表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
(2)200-299
表示成功接收请求并已完成整个处理过程
(3)300-399
为完成请求,客户需要进一步细化请求,例如请求资源已经移动到一个新地址。
(4)400-499
客户端的请求有错误
(5)500-599
服务器端出现错误
典型情况:
200:正常,表示一切正常,返回的是正常的处理结果
206:客户发送了一个带有range头的get请求,返回部分内容
302/307:指出被请求的文档已经被临时移动到别处,新的url在location响应头中给出
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头字段:
用于告诉浏览器过多少秒重新发送请求
Refresh:1 ;url= 指定时间跳转到url
Content-Disposition头字段
不是直接处理请求 而是保存到一个文档中 attachment;filename=aaa.zip 保存在文档