HTTP权威指南----第三章:
由于前两章内容比较浅显易懂,因此未进行整理。
HTTP的报文:
-
http的报文类型包括请求(request)和响应(response)
1.1 请求(request)是client向server发送的
1.2 响应(response)是server向client回复的
-
报文的组成:
2.1 请求和响应的报文基本机构相同,都是包括“起始行(START LINE)”、“首部(HEADERS)”和“主体( ENTITY-BODY)”。
请求报文的格式:
<method> <request-URL> <version> <headers> <entity-body>
响应报文的格式:
<version> <status> <reason-phrase> <headers> <entity-body>
请求报文(request)中包含的信息:
START LINE:
GET:method
*.php:request-URL
HTTP/1.1:version
HEADERS:
Host:host
ENTITY-BODY:
本请求中不包括
响应报文(response)中包含的信息:
START LINE:
HTTP/1.1:version
200:status
OK:reason-phrase
HEADER:
date:日期和时间
server:apache搭建的服务
X-Powered-By:PHP版本
Transfer-Encoding:chunked 分块编码。关于分块编码后续会有讲到,等不及可以先看这个blog:https://www.cnblogs.com/jamesvoid/p/11297843.html
content-type:text/html 内容类型及文本编码标准。
ENTITY-BODY:
Hello World!:主体(body)
2.2 起始行(START LINE)
起始行分为请求行和响应行。顾名思义:请求报文(request)的起始行即为请求行;响应报文(response)的起始行即为响应行。
请求行:
请求报文请求服务器对资源进行一些操作。请求报文的起始行即为请求行。包含了一个方法(method)和一个请求 URL(request-URL)。这个方法描述了服务器应该执行的操作,请求URL描述了要对服务器的哪个资源执行这个方 法。请求行中包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。
响应行:
响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行即为响应行,包含了响应 报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。所有这些字段都由空格符进行分隔。 在HTTP/1.0之前,并不要求在响应中包含响应行。
2.2.1 方法(method)
GET:通常用于请求服务器某个资源
HEAD:与GET类似,但是服务器只返回收不,不返回实体的主体部分。
PUT:与GET相反,其会向服务器写入数据。
POST:用来向服务器发送(非写入)数据,通常用来向服务器发送表单。服务器再将表单中的内容发送到指定的地方。
TRACE:客户端发送的请求可能会被中间穿越的firewall、proxy、gateway等程序修改。因此在服务器收到TRACE请求后 会向客户端回复该TRACE请求。基于此,客户端可判断该TRACE请求在到达服务器之前是否被 修改或被修改了哪些内容。(主要用于诊断)
OPTIONS:可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。
DELETE:使服务器删除请求URL所指定的资源。
扩展方法:(扩展请求方法均非常危险,实现此操作之前应该通过用户认证)
LOCK:允许用户“锁定”某个正在编辑的资源,避免该资源同时被其他人修改。
MKCOL:允许用户创建资源。
COPY:在服务器上复制资源。
MOVE:在服务器上移动资源。
2.2.2 状态码:
方法(method)是客户端告知服务器要做什么;状态码(status)则是服务器告知客户端发生了什么事情。状态码是在每 条响应报文的起始行中返回的。会返回一个数字状态(例如:200)和一个可读的状态(例如:OK)。数字码便于程 序进行差错处理,而原因短语则更便于人们理解。
状态码定义:https://tools.ietf.org/html/rfc2616#section-10
状态码分类:
状态码解释:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
状态码RFC对应列表:http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
2.2.3 原因短语:
原因短语和状态码成对出现。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明在请求期间发生了什么情况。
2.2.4 版本号:
版本号会以HTTP/x.y的形式出现在请求和响应报文的起始行中。为HTTP应用程序提供了一种将自己所遵循的协议版本告 知对方的方式。
使用版本号的目的是为使用HTTP的应用程序提供一种线索,以便互相了解对方的能力和报文格式。在与使用HTTP1.1的 应用程序进行通信的HTTP1.2应用程序应该知道,它不能使用任何新的1.2特性,因为使用老版本协议的应用程序很 可能无法实现这些特性。
2.3 HEADERS(首部)
HTTP首部字段向请求和响应报文中添加了一些附加信息。本质上来说,他们只是一些名/值对的列表。
通用首部:既可以出现在请求报文中,也可以出现在响应报文中。例如Date首部,显示日期和时间。
请求首部:提供更多有关请求的信息。例如Accept首部,用来告知服务器,客户端会接受与其请求相符的任意媒体类型。
响应首部:提供更多有关响应的信息。例如Server首部,服务器用来告知客户端,目前客户端是与哪个服务进行交互。
实体首部:描述主体的长度和内容,或者资源自身。例如Content-Type首部,服务器用来告知客户端目前响应的信息类型 和编码方式。
扩展首部:非标准首部,由应用程序开发者创建,但还未 添加到已批准的HTTP规范中取。即使不知道这些扩展首部的含 义,HTTP程序也要接受他们并对其进行转发。
注:每个HTTP首部都有一种简单的语法。名字后面跟着冒号(:),然后跟上可选的空格,再跟上字段值,或者是一个CRLF(/r/n)。
注:https://blog.csdn.net/lishuoboy/article/details/84768748
CR:Carriage Return,对应ASCII中转义字符\r,表示回车
LF:Linefeed,对应ASCII中转义字符\n,表示换行
CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行
2.3.2 首部延续行
将长的首部行分为多行可以提高可读性,多出来的每行前面至少要有一个空格或制表符(tab)。
2.4 实体的主体部分
HTTP报文的第三部分是可选的实体主体部分。实体主体是HTTP报文的负荷(payload)。就是HTTP要传输的内容。
HTTP报文可以承载很多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。
That is all!