HTTP权威指南学习笔记——第三章:HTTP报文

学习目标:
报文是如何流动的;
HTTP报文的三个组成部分;
请求和响应报文之间的区别;
请求报文支持的各种功能;
响应报文返回的各种状态码;
各种各样的HTTP首部都是用来干什么的。

  1. 报文是如何流动的:
    请求报文从客户端流向服务器,中间会经过若干代理。
    应答报文从服务器流向客户端,流动路径一般与请求报文完全相反。

  2. HTTP报文的三个组成部分:
    HTTP报文分为三个部分组成:起始行、包含属性的首部块、可选的主体部分。

    请求命令的报文格式:
    请求行: 请求方法|空格|URL|空格|协议版本|回车换行
    请求头部: 头字段|:|值|回车换行

    头字段|:|值|回车换行
    空行: 回车换行
    请求数据: …

     实例:
     	GET /hello.txt HTTP/1.1
     	User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
     	Host: www.example.com
     	Accept-Language: en, mi
    

    响应结果的报文格式:
    状态行: 协议版本|空格|响应状态码|空格|描述字符串|回车换行
    消息报头: 头字段|:|值|回车换行

    头字段|:|值|回车换行
    空行: 回车换行
    响应正文: …

     实例:
     	HTTP/1.1 200 OK
     	Date: Mon, 27 Jul 2009 12:28:53 GMT
     	Server: Apache
     	Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
     	ETag: "34aa387-d-1568eb00"
     	Accept-Ranges: bytes
     	Content-Length: 51
     	Vary: Accept-Encoding
     	Content-Type: text/plain
     			
     	<HTML>
     	Hello, World!
     	</HTML>
    
  3. 请求和响应报文之间的区别:
    请求报文起始行是HTTP方法、URL、HTTP版本,应答报文起始行是的HTTP版本、状态码、原因短句。
    请求报文和应答报文的首部字段不同。
    大部分的请求报文没有主体部分。

  4. 请求报文支持的各种功能:
    GET: 请求指定的页面信息,并返回实体主体。安全方法,不会改变服务器的资源。
    HEAD: 类似于GET请求,但不返回具体的内容,只获取报头。安全方法,不会改变服务器的资源。
    POST: 向指定资源提交数据进行处理请求。数据被包含在请求体中,可能会导致新的资源的建立或已有资源的修改。
    PUT: 从客户端向服务器传送数据取代指定文档的内容。无论执行多少次,产生的效果是一致的。
    PUTCH: 对PUT方法的补充,用来对已知资源进行局部更新。
    DELETE: 请求服务器删除指定的页面,但操作不一定会被执行。
    CONNECT: 预留给能够将连接改为管道方式的代理服务器。
    OPTIONS: 允许客户端查看服务器的性能。
    TRACE: 回显服务器收到的请求,主要用于测试或诊断。

  5. 响应报文返回的各种状态码:
    分类 分类描述
    1** 信息,服务器收到请求,需要请求者继续执行操作
    2** 成功,操作被成功接收并处理
    3** 重定向,需要进一步的操作以完成请求
    4** 客户端错误,请求包含语法错误或无法完成请求
    5** 服务器错误,服务器在处理请求的过程中发生了错误

    HTTP状态码列表:

状态码	状态码英文名称			状态码描述
100	Continue			收到了请求的初始部分,请客户端继续。
101	Switching Protocols		服务器根据客户端Update首部的指定切换协议。

200	OK				请求成功。一般用于GET与POST请求。
201	Created				用于创建服务器对象的请求,服务器应在发送这个请求前创建好对象,并在Location首部包含对对象的引用URL。
202	Accepted			已经接受请求,但并未处理完成。实体部分或许有对请求完成时间的估计。
203 	Non-Authoritative Information 	非授权信息。请求成功,但返回的实体首部信息不是来自源端服务器,而是一个副本。
204	No Content			没有实体的主体部分。主要用于浏览器不转为显示新文档的情况下,对其进行更新。
205	Reset Content			服务器处理成功,浏览器应重置文档视图。
206	Partial Content			服务器成功处理了一个范围请求。响应首部中必须包含Content-Range、Date、ETag或者Content-Location。

300	Multiple Choices		客户端请求一个实际指向多个资源的URL时会返回这个状态码。返回这个状态码时会带有一个选项列表供用户选择。如果同时返回了Location首部,则Location首部包含首选URL。
301	Moved Permanently		请求的资源已被永久移动。响应Location首部中会包括新的URL,今后任何新的请求都使用新的URL代替。
302	Found				与301类似,但只是临时移动,当前操作使用新的URL,今后应继续使用原有URL。
303	See Other			告知客户端应使用另一个URL来获取资源。新的URL位于响应的Location首部。主要目的允许POST请求的响应将客户端定向到某个资源。
304	Not Modified			未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。
305	Use Proxy			所请求的资源必须通过代理访问。代理的位置由Location首部给出。
306	Unused				已经被废弃的HTTP状态码。
307	Temporary Redirect		临时重定向,与302类似。
		
400	Bad Request			客户端请求的语法错误,服务器无法理解。
401	Unauthorized			要求客户端的身份认证。
402	Payment Required		保留。
403	Forbidden			服务器理解客户端的请求,但是拒绝执行。并且不想说明拒绝原因。
404 	Not Found			服务器无法根据客户端的请求URL找到资源。
405	Method Not Allowed		客户端请求中的方法被禁止。在响应首部中应包含Allow首部,已告知对所请求的资源可以使用哪些方法。
406	Not Accepted			服务器无法根据客户端请求的内容特性完成请求。
407	Proxy Authentication Required	与401类似,但是是代理使用的。
408	Request Timeout			服务器等待客户端发送的请求时间过长。可能关闭连接。
409	Conflict			服务器完成客户端的PUT请求时可能此代码,代表服务器处理请求时发生了冲突
410	Gone				客户端请求的资源已经不存在。但曾经拥有过此资源。
411	Length Required			服务器无法处理客户端发送的不带Content-Length的请求信息。要求客户端在请求中包含Content-Length首部。
412	Precondition Failed		客户端发起了条件请求。但有条件失败。
413	Request Entity Too Large	客户端请求实体过大,服务器无法处理,因此拒绝请求,服务器可能关闭连接。如果只是暂时无法处理,则会包含一个Retry-After的响应信息。
414	Request-URL Too Large		请求的URL过长,服务器无法处理。			
415	Unsupported Media Type		服务器无法处理附带的媒体格式。
416	Requested range not satisfiable	客户端进行范围请求但是请求的范围无效时使用。
417	Expectation Failed		服务器无法满足客户端Expect首部。
		
500	Internal Server Error		服务器内部错误,无法完成请求。
501	Not Implemented			服务器不支持请求的功能,无法完成请求。
502	Bad Gateway			作为网关或者代理尝试执行请求时,从响应链的下一条链路收到了一条伪响应。
503	Service Unavailable		由于超载或系统维护,服务器暂时无法处理客户端的请求,但将来可以。如果知道资源什么时间可用,在Retry-After首部包含可用的日期。
504	Gateway Time-out		网关或代理服务器未及时从远端服务器获取请求。
505	HTTP Version not supported	服务器不支持请求的HTTP协议的版本,无法完成处理。
  1. 各种各样的HTTP首部都是用来干什么的:
    首部和方法配合工作,共同决定了客户端和服务器能做什么事情。
		首部				描述
	通用首部:
		Connection			允许客户端和服务器指定与连接有关的选项,包括keep-alive、close、代理删除逐跳首部
		Date				提供报文创建的格林威治时间
		MIME-Version			给出了使用的MIME版本
		Trailer				如果报文采用了分块传输编码,就可以使用这个首部列出报文拖挂的首部。
		Transfer-Encoding		告知接收端报文采用了什么编码方式。
		Update				给出了发送端想要使用的新版本或协议
		Via				显示了报文经过的中间节点
		Cache-Control			用于随报文传送缓存指示
		Pragma				随报文传送指示
	请求首部:
		Client-IP			提供了运行客户端的机器的IP地址
		From				提供了客户端用户的E-mail地址
		Host				给出了接受请求的服务器的主机名和端口号
		Referer				提供了包含当前请求URL的文档的URL
		UA-Color			提供了与客户端显示器的显示颜色有关的信息
		UA-CPU				给出了客户端CPU的类型或制造商
		UA-Disp				提供了与客户端显示器(屏幕)能力有关的信息
		UA-OS				给出了运行在客户端机器上的操作系统名称及版本
		UA-Pixels			提供了客户端显示器的像素信息
		User-Agent			将发起请求的应用程序名称告知服务器
		
		Accept				告诉服务器能够发送哪些媒体类型
		Accept-Charset			告诉服务器能够发送哪些字符集
		Accept-Encoding			告诉服务器能够使用哪些编码方式
		Accept-Datetime			设置接受的版本时间
		Accept-Language			告诉服务器能够发送那些语言
		TE				告诉服务器能够使用哪些扩展传输编码	
		
		Expect				允许客户端列出某请求所要求的服务器行为
		If-Match			如果实体标记与文档当前的实体标记相匹配,就获取这份文档
		If-Modified-Since		除非在指定的日期之后资源被修改过,否则就限制这个请求
		If-None-Match     		如果提供的实体标记与当前文档的实体标记不相符,就获取这份文档
		If-Range  			允许对文档的某个范围进行条件请求
		If-Unmodified-Since   		除非在指定的日期之后资源没有被修改过,否则就限制这个请求
		Range				如果服务器支持范围请求,就请求资源的指定范围
		
		Authorization			包含了客户端提供给服务器,以便对其自身进行认证的数据
		Cookie				客户端用它向服务器传送一个令牌(它并不是真正的安全首部,但确实隐含了安全功能)
		Cookie2				用来说明请求端支持的cookie版本
		
		Max-Forwards			在通往远端服务器的路径上,将请求转发给其它代理或网关的最大次数——与TRACE方法一起使用
		Proxy-Authorization		与Authorization首部相同,但这个首部是在与代理建立连接时使用的
		Proxy-Connection		与Connection首部相同,但用于代理
		
	响应首部:
		Age				响应持续时间
		Public				服务器资源支持的请求方法列表
		Retry-After			如果资源不可用的话,在此日期或时间重试
		Server				服务器应用程序的名称和版本
		Title				主体的标题
		Warning				比原因短句中更详细一点的警告报文
		
		Accept-Ranges			服务器可接受的范围类型
		Vary				服务器查看的其它首部的列表
		
		Proxy-Authorization		来自代理对客户端的质询列表
		WWW-Authentication		来自服务器对客户端的质询列表
		
		Allow				列出了可以对此实体执行的请求方法
		Location			告知客户端实体实际上位于何处;用于将接收端定向到资源的位置
		Content-Base			解析主体中的相对URL时使用的基础URL
		Content-Encoding		对主体执行的任意编码方式
		Content-Language		理解主体时最适宜使用的自然语言
		Content-Length			主体的长度或尺寸
		Content-Location		资源实际所处的位置
		Content-MD5			主体的MD5校验和
		Content-Range			在整个资源中此实体表示的字节范围
		Content-Type			主体的MIME类型
		
		ETag				与实体相关的实体标记
		Expires				实体的有效日期
		Last-Modified			实体最后被修改的时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值