HTTP协议

本文详细介绍了HTTP协议的发展历程,包括从HTTP/0.9到HTTP/1.1的不同版本特性。阐述了HTTP协议的工作原理,包括请求与响应消息的结构、方法、状态码等关键概念,并解释了缓存机制如何确保数据的时效性和减少网络负载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP/0.9: 从1990年就已经用来作为WWW的传输 协议,当时非常简单,只支持GET方法,响应中携带的消息必须HTML文件。

HTTP/1.0: 1996发布RFC1945,90年后,基于0.9的各种客户端和服务端的扩展层出不穷,把这些扩展进行综合推出新标准HTTP/1.0 。

HTTP/1.1: 1997推出RFC2068,HTTP/1.1的标准。

HTTP/1.1: 1999推出RFC2616,废弃了RFC2068标准。

HTTP协议基础知识 -HTTP的特点
客户/服务器模式:一个服务器可以为分布在世界各地
的许多客户服务。
简单:HTTP本身处理简单,有效地处理大量请求,HTTP
服务器程序规模小,所以经由HTTP的通信速度快,与其
它协议相比,时间开销小得多。
灵活: HTTP允许传输任意类型的数据对象,可以通过 Content-type来指定数据类型。
无状态:HTTP是无状态的协议,缺少状态记忆,运行速
度高,服务器应答速度较快。
HTTP协议基础知识 -HTTP的事务处理
HTTP定义的事务处理由以下四步组成:

 客户端与服务器端建立连接

 客户端向服务器端发送请求

 服务器端向客户端回复响应

 断开连接
注意:
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由 HTTP 自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
HTTP协议基础知识 -HTTP的消息类型
HTTP的消息类型共分为两大类:

请求(Request)消息:由客户端发给服务器的消息。
其组成包括:请求行(Request-Line),可选的头域
(Header Field ),及实体(Entity-Body)。

响应(Response)消息:是服务端回复客户端请求的消
息,其组成包括状态行(Status-Line),可选的头域
(Header Field ),及实体(Entity-Body)。
HTTP协议基础知识 -请求消息(消息结构)

请求消息结构:

Full-Request = Request-Line
*(General-Header| Request-Header| Entity-Header)
CRLF
[Entity-Body]

请求消息由请求行(Request-Line) 、报头和实体主体三部
分组成。
HTTP协议基础知识 -请求消息(请求行)
请求行结构:
Request-Line =Method SP
Request-URI
SP
HTTP-Version CRLF

例如:GET http://www.yesky.com/pub/WWW/page.html HTTP/1.1
请求行有3个元素:请求方法、URI、HTTP版本,最后以CRLF结尾,各个元素之间用SP字符隔开。
1、请求方法:指出客户请求服务器执行的一般操作。HTTP/1.1中定义了八种请求方法,其中GET、POST、HEAD、是常用请求方法。
2、URI:统一资源标识,简单地讲被请求资源所处的地址,如:http://www.wikipedia.com/
3、HTTP版本:HTTP/1.1,高版本的服务器接受低版本客户的请求,并向客户发送同样版本的应答;高版本的客户接受低版本服务器的应答。
HTTP协议基础知识 -请求方法
备注
GET获取一个URL指定的资源,即资源实体
HEAD获取一个指定资源的信息,方法名

POST向服务器提交数据
PUT向服务器提交资源
DELETE请求源服务器删除Request-URI标识的资源
TRACE网络跟踪
CONNECT与PROXY之间的连接管理
OPTIONS查询能力
HTTP协议基础知识 -请求消息(示例)
请求消息示例:
GET http://www.yesky.com/pub/WWW/page.html HTTP/1.1
Connection:close
User-agent:Mozilla/4.0
Accept-Encoding:gzip,compress
Accept-language:en
CRLF
Entity-Body
这个消息共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车符
和换行符,以及一个可选的实体。当然,一个请求消息可以不止这么多行,也可以仅仅只有一行。请求消息的第一行称为请求行(request line),后续各行都称为报头行(header)。
现在了解一下本例中的各个报头:
1、Connection:close是在告知服务器本浏览器不想使用永久连接方式(HTTP/1.0使用非永久连接,HTTP/1.1默认使用永久连接)。
2、User-agent:Mozilla/4.0指定用户代理服务器的类型。
3、Accept-Encoding:gzip,compress指出发送此请求的浏览器支持哪些压缩编码方式。
4、Accept-languag:en指出客户浏览器支持的语言是英语(english)。
HTTP协议基础知识 -响应消息(消息结构)
响应消息结构:
Full-Response =Status-Line
*(General-Header | Response-Header| Entity-Header)
CRLF
[Entity-Body]

响应消息由状态行(status line)、报头和实体主体三部分组成
HTTP协议基础知识 -响应消息(状态行)
状态行结构:
Status-Line = HTTP-Version SP
Status-Code SP
Reason-Phrase CRLF

例如: HTTP/1.1 200 OK
状态行由协议版本、状态码、原因短语3个元素组成,各个元素之间用SP分隔。状态码字段由三个数字组成,标识客户请求方法的结果。状态码有5种可能的值,如下表所示。
响应消息示例:
HTTP/1.1 200 OK
Connection:close  Date:Thu,13Oct200503:17:33GMT  Server:Apache/2.0.54(Unix)  Last—Nodified:Mon,22Jun199809;23;24GMT  Content—Length:682l
Content-Type:text/html

状态码定义说明
1XX信息接收到请求,继续处理
2XX成功操作成功地收到,理解和接受
3XX重定向为了完成请求,必须采取进一步措施
4XX客户端错误请求的语法有错误或不能完全被满足。
5XX服务端错误服务器无法完成明显有效的请求。
1、Date:Thu,13Oct200503:17:33GMT指出服务器创建并发送本响应消息的日期和时间。HTTP允许下面三种不同格式的日期/时间,但必须是格林尼治标准时间:
HTTP-date=rfc1123-date|rfc-850-date| asctime-date
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
2、Server:Apache/2.0.54(Unix)指出本消息是由Apache服务器产生的,服务器版本为2.0.54,
3、Last—Nodified: Mon,22Jun199809;23;24GMT指出对象本身的创建或最后修改日期或时间。
Last—Nodified:报头项对于对象的高速缓存至关重要,且不论这种高速缓存是发生在本地客户主机上还是发生在网络高速缓存服务器主机(也就是代理服务器主机)上。
4、Content—Length:682l指出所发送对象的字节数。
5、Content—Type:text/html指出包含在实体中的对象是HTML文本。
消息的报头分通用报头、请求报头、响应报头和实体报头四个类型。
通用报头指同时适用于请求和响应消息,但是不适被
传送的实体。
General-Header = Date
|Pragma
|Cache-Control
|Connection
|Transfer-Encoding
|Upgrade
|Via
请求报头允许客户向服务器发送有关请求或有关客户自己的信息。
request-header = Accept
| Accept-Charset
| Accept-Encoding
| Accept-Language
| Authorization
| Expect
| From
| Host
| If-Match

响应报头允许服务器传送不能放在状态行中的额外信息。
response-header = Accept-Ranges
| Age
| ETag
| Location
| Proxy-Authenticate
| Retry-After
| Server
| Vary
| WWW-Authenticate
实体报头定义了有关实体主体的可选信息或在没有实体主体时有关请求标识的资源信息。
entity-header = Allow | Content-Encoding
| Content-Language | Content-Length
| Content-Location | Content-MD5
| Content-Range | Content-Type
| Expires | Last-Modified
| extension-header
HTTP协议基础知识--缓存(Cache)
缓存通过就近存取先前取得的对象来降低对象检索延迟,减少因特网上的web流量。既可以驻留在客户主机中,也可以驻留在中间网络高速缓存服务器主机中。
缓存在降低用户可感知的响应时间的同时,却引入了一个新的问题——缓存中存放的对象的拷贝可能是过期的。换句话说,存放在web服务器中的对象可能己在客户高速缓存下它的一个拷贝之后被修改了 。
HTTP提供一个专门机制,使得在允许客户进行高速缓存的同时,仍确保传递给浏览器的所有对象都是最新的。
满足条件:(1)使用GET方法,(2)包含If-Modified-Since:报头的HTTP请求消息就是所谓的带条件的Get消息。
在HTTP/1.1中,定义了Cache的缓存规则,
Cache-Control = "Cache-Control" ":" 1#cache-directive
cache-directive = cache-request-directive
|cache-response-directive
Cache-Control指定请求和响应遵循的缓存机制,在请求或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括:no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值