HTTP协议学习

参考书籍:《深入体验Java Web开发内幕--核心基础》。

HTTP (HyperText Transfer Protocol)
====================================
是TCP/IP协议集中的一个应用层协议,用于定义浏览器和Web服务器之间交换数据的过程以及数据本身的格式。现在被广泛使用的是HTTP1.1,相对于1.0,1.1的最大特点是支持持续连接。

基于HTTP1.0协议的客户机与服务器的信息交换过程包括四个步骤:建立连接;发送请求信息;回送响应信息;关闭连接。

通信过程总是通过浏览器发送请求来启动的,Web服务器则是被动地对这些请求作出响应。HTTP协议是无状态的。

HTTP1.1与HTTP1.0的比较
-------------------------------------
HTTP1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。服务器不跟踪每个客户机,也不记录过去的请求。为了克服HTTP1.0的这个缺陷,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。HTTP1.1还允许客户端不用等待上一次请求结果返回,就可以发送下一次请求,但服务器端必须按照接受到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。

HTTP1.1还增加了host请求头字段,用于明确表示访问服务器上的哪个web站点,可以在一个IP地址和端口号上使用不同的主机名来创建多个虚拟web站点。HTTP1.1还有keep-alive请求头来支持持续连接。

HTTP消息的格式
-----------------------
一个完整的请求消息包括:一个请求行,若干消息头,以及实体内容,其中消息头和实体内容都是可选的。消息头和实体内容之间要用空行隔开。浏览器使用GET方式的请求消息可以放松不含实体内容的请求消息。只有使用POST, PUT, DELETE方式的请求消息中才可以包含实体内容。

Hypertext Transfer Protocol
    GET / HTTP/1.1/r/n
        Request Method: GET
        Request URI: /
        Request Version: HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vn
    Accept-Language: zh-cn/r/n
    UA-CPU: x86/r/n
    Accept-Encoding: gzip, deflate/r/n
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)/r/n
    Host:
www.google.cn/r/n
    Connection: Keep-Alive/r/n
    /r/n

一个完整的响应消息包括:一个状态行,若干消息头,以及实体内容。同样,消息头和实体内容都是可选的。消息头和实体内容之间要用空行隔开。消息响应的实体内容就是网页文档的内容。

Hypertext Transfer Protocol
    HTTP/1.1 200 OK/r/n
        Request Version: HTTP/1.1
        Response Code: 200
    Cache-Control: private/r/n
    Content-Type: text/html; charset=UTF-8/r/n
    Set-Cookie: PREF=ID=7f53f6f0b1511417:NW=1:TM=1205568884:LM=1205568884:S=zHreYqNC-Z3rmOc6; expires=Mon, 15-Mar-2010 08:14:44 GMT; path=/; domain=.google.cn/r/n
    Content-Encoding: gzip/r/n
    Server: gws/r/n
    Transfer-Encoding: chunked/r/n
    Date: Sat, 15 Mar 2008 08:14:44 GMT/r/n
    /r/n
    HTTP chunked response
        Data chunk (1025 octets)
            Chunk size: 1025 octets
            Data (1025 bytes)


HTTP消息头
----------------
HTTP请求和响应都使用消息头来描述HTTP消息本身的信息,可以实现HTTP客户机与服务器之间的条件请求和应答。
消息头可以分为:通用消息头,请求头,响应头,实体头四类。

请求行与状态行
-----------------------
请求消息的请求行包括三个部分:请求方式,资源路径,以及使用的HTTP版本。如:GET / HTTP/1.1/r/n。
响应消息的状态行包括三个部分:HTTP协议的版本号,一个表示成功或者失败的整数代码(状态码)和对状态码进行描述的文本信息。如:HTTP/1.1 200 OK/r/n。

使用GET和POST方式传递参数
--------------------------------------------
在URL地址后面可以附加一些参数,每个参数由参数名和参数值组成,例如:http://www.abcd.com/parameter?param1=ok&param2=good.
当使用GET方式提交表单内容时,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行中的资源路径后面。使用GET方式传送的数据量有限制,一般在1KB以下。
当使用POST方式提交表单内容时,浏览器将个表单字段元素及其数据作为HTTP消息的实体内容发送给服务器。因此数据量可以比GET方式大的多。使用POST方式时,还必须将Content-Type消息头设置为"application/x-www-form-urlencoded",将Content-length消息头设置为实体内容的长度。

响应状态码
---------------

1. 100~199: 成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程。
2. 200~299: 成功接受请求并已完成整个处理过程。
3. 300~399: 为完成请求,客户端需要进一步细化请求。
4. 400~499: 客户端的请求有错误。
5. 500~599: 服务器段出现错误。

通用信息头
==============
即能用于请求消息,也能用于响应消息,包括一些与被传输的实体内容没有关系的常用消息头字段。
1. Cache-Control
2. Connection
3. Date
4. Pragma
5. Trailer
6. Transfer-Encoding
7. Upgrade
8. Via
9. Warning

Cache-Control
--------------------
如果位于请求消息头,用于通知位于客户机和服务之间的代理服务器如何使用已缓存的页面,可以取值为:no-cache, no-store, max-age, max-stale, min-fresh, no-transform, only-if-cached等。
如果位于响应消息头,用于通知客户机和代理服务器如何缓存该页面,可以取值为:public, private, no-cache, no-store, no-transform, must-revalidate, proxy-revalidate, max-age, s-maxage等。

Connection
---------------
用于指定处理完本次请求/响应后,客户端与服务器是否还要继续保持连接。如果为Keep-Alive,则保持连接,如果为close,则关闭。HTTP1.1默认采用持久连接。

Date
---------
表示HTTP消息产生的当前时间。服务器回送的正常响应消息中,应该总是设置Date头字段。如果客户机发送的请求消息中包含有实体内容,也要设置Date。

Pragma
------------
只能固定为no-cache.

Trailer
-----------
一些头字段可以放置在整个HTTP消息的尾部。

Transfer-Encoding
---------------------
指定传输编码方式,目前标准的设置值只有chunked,用于把整个消息分成一连串的分段后进行传输。

Upgrade
------------
允许客户机指定它所支持并希望将当前协议切换到的通信协议。

Via
-----
用于指定HTTP消息所途径的中介代理服务器名称和所使用的协议。


请求头
=========
客户端可以接受的数据类型,压缩方法,语言,以及发出请求的超链接所属页面的URL地址等信息。

Accept:指出客户端程序能够处理的MIME类型。
Accept-Charset:用于指出客户端程序可以使用的字符集。
Accept-Encoding:客户机能够进行解码的数据编码方式。
Accept-Language:指定客户机期望服务器返回哪个国家语言的文档。
Authorization:两种认证方式BASIC,和DIGEST.
Except:
From:
Host: 指定资源所在的主机号和端口号。HTTP1.1中每个请求消息中都必须包含Host请求字段。
If-Match:
If-Modified-Since:
If-None-Match:
If-Range
If-Unmodified-Since
Max-Forwards:
Proxy-Authorization:
Range:
Referer: 当单击另一个网页上的超链接时发出的请求在Referer字段中指定URL。
TE:
User-Agent:

响应头
==========
Accept-Range, Age, Etag,
Location: 用于通知客户机应当到哪个新的地址去获取文档。状态码为300~399的响应消息都应该使用Location字段将新的文档地址告诉客户机,以便客户机自动重新连接到新地址并检索新文档。使用Location头的HTTP消息不应该有实体内容。所以,HTTP消息头中不能同时出现Location和Content-Type这两个头字段。
Proxy-Authenticate,Retry-After, Server, Vary, WWW-Authenticate。

实体头
========
是实体内容的元信息,描述了实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
Allow: 指定客户端请求的资源所支持的请求方法(如GET,POST等)。
Content-Encoding: 指定实体内容的压缩编码方式。
Content-Language:
Content-Length: 用于表示实体内容的长度(字节数),浏览器与Web服务器之间使用持久连接时,这个字段在非Chunked传输编码的响应消息中是必不可少的。
Content-Location: 指定响应消息中所封装的实体内容的实际位置路径。
Content-MD5, Content-Range, Content-Type
Expires: 指定当前文档应该在什么时候被认为过期,浏览器到哪个时候以后不能再继续使用本地缓存,而是在有需要时应该像服务器发出新的请求访问。
Last-Modified:文档的最后更改时间。

扩展头
========
现在流行的浏览器实际上都支持Cookie,Set-Cookie,Refresh和Content-Disposition等几个常用的扩展头字段。

Refresh: 告诉浏览器多少秒后自动刷新页面。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值