HTTP基础之二(HTTP Message和Headers)

打个比方:如果说HTTP协议是互联网的快递员,那么HTTP Message(消息)就是快递员手中的包裹。所有的HTTP Message都只有两种类型:请求消息和响应消息

请求消息格式如下:

<method> <request-URL> <version>

<headers>

<body>

响应消息格式如下:

<version> <status> <reason-phrase>

<headers>

<body>

这里主要解释下reason-phrase,其实就是响应行最后的“OK”.这个主要是状态码的可读性,例如200 ok,404 not found

 

起始行(Start Line)

所有的HTTP消息都是以起始行开始,针对请求消息,它意味着:what to do 针对响应消息,它意味着:what happened 请求方法(Method)GET,POST,PUT,DELETE,HEAD,etc 告诉服务器“我要干嘛”

 

 

头(Header)

name:(空格)value

 

方法(Method)

GET和HEAD:这两个方法非常类似,都是请求服务器发送一段内容,这是HEAD方法只要求服务器发送头信息,不需要body。

PUT:写入一个新的文档到服务器,比如一些发布系统允许用户创建一个页面安装在服务器上,如果要创建的文档存在了,则替换。这个操作需要验证权限。

POST:发送表单元素的数据到服务器

TRACE:主要让客户端看到到服务器端中间过程的跟踪信息,没有body内容。

OPTIONS:通过header返回服务器支持的Method。例如:

DELETE:让服务器删除一个资源,但是并不能保证执行,因为HTTP协议允许服务器重写这个方法。

 

状态码(Status Code)

状态码告诉浏览器发生了什么?因为当请求到达服务器时,服务器会做很多事情。状态码对应的含义如下:

当然目前的HTTP协议只是定义了一些code,随着HTTP协议的发展,状态码也会发展。

 

100-199:信息

100 Continue:请求初始化部分已经被服务器接收,客户端应该继续发送内容。这个是一个优化处理,当客户端需要请求的body很多大,不确定服务器能否处理时,可以先请求头Expect:100-continue。服务器端接收到该请求进行响应(100 Continue 或错误码),但是如果服务器已经接收到了请求的body,则不再发送100 Continue,因为客户端已经开始发送body了,无需确认了。

101 Switching Protocols:服务器正在改变协议

200-299:成功状态码

200 OK:请求OK,响应的body包含请求的资源

201 Created:针对创建服务器对象(PUT)的请求,并且包含资源的Location头

202 Accepted:请求被接收,但是服务器没有执行任何操作,也不保证服务器会处理请求

203 Non-Authoritative Information:未验证权限

204 No Content:响应消息不包含body

205 Reset Content:主要针对浏览器,告诉浏览器清除当前页面表单元素的内容

206 Partial Content:一部分请求成功

 

300-399:重定向状态码

告诉浏览器使用另外一个URL请求内容,有一些重定向可以让浏览器使用本地的资源副本(缓存的),客户端可以发送一个请求头If-Modified-Since,如果资源没有在这个时间以后更改,则返回一个304.

300 Multiple Choices:请求的URL对应的内容有多个选择,例如不同语言的版本,浏览器可以选择一个进行访问。

301 Moved Permanently:资源永久移动,返回的响应头包含Location,值为现在资源的URL,以后也是直接请求新的URL

302 Found:临时使用响应头Location请求资源,以后还是使用原来的URL 类似301

303 See Other:告诉浏览器使用响应的头Location中的URL

304 Not Modified:资源没有更新

305 Use Proxy:指示当前资源必须通过代理访问

306:目前未使用

307 Temporary Redirect:临时重定向,类似302

 

400-499:客户端错误码

400 Bad Request:错误请求

401 Unauthorized:客户端需要输入验证

402:目前未使用

403 Forbidden:请求被服务器拒绝

404 Not Found:没有找到该资源

405 Method Not Allowed:请求的Method不被允许

406 Not Acceptable:客户端可以指定接收的类型,服务器没有匹配的该类型的资源。

407 Proxy Authentication Required:必须使用代理验证

408 Request Timeout:请求超时

409 Conflict:告诉客户端有冲突的请求

410 Gone:类似404,只是服务器曾经拥有该资源

411 Length Required:服务器需要一个Content-Length的请求头

412 Precondition Failed:客户端发起条件请求,其中有些条件失败

413 Request Entity Too Large:请求内容过大

414 Request URI Too Long:请求的URL过长

415 Unsupported Media Type:使用的Content-Type值不支持

416 Requested Range Not Satisfiable:请求资源的访问没有被认证或者不能满足

417 Expectation Failed:使用了Expect请求头时,服务器不能满足

 

500-599:服务器端错误码

500 Internal Server Error:服务器内部错误

501 Not Implemented:服务器没有能力处理该请求

502 Bad Gateway:无法连接当前网关或代理

503 Service Unavailable:当前服务器不可用

504 Gateway Timeout:网关或代理超时

505 HTTP Version Not Supported:HTTP版本不支持

 

头(Header)

分类:通用头,请求头,响应头,实体头,扩展头

通用头

Connection:指定请求和响应的连接选项

Date:提供一个时间戳,内容创建时间

MIME-Version:发送方MIME版本

Trailer:在以块为单位(chunked transfer encoding)消息尾部列出头集合

Transfer-Encoding:告诉接收端执行了什么编码,为了安全传输

Upgrade:给出一个升级用的版本或协议

Via:现实消息通过的代理或网关

缓存头:Cache-Control,Pragma

请求头

Client-IP:客户端IP地址

From:客户端用户的Email

Host:服务器的主机名和端口

Referer:来路url

User-Agent:客户端信息

 

Accept头

Accept:告诉服务器,客户端接收什么MIME类型

Accept-Charset:告诉服务器,客户端接收什么字符集

Accept-Encoding:告诉服务器,客户端接收什么编码

Accept-Language:告诉服务器,客户端接收什么语言

TE:Transfer-Encoding Headers

 

条件请求头

Expect:列出服务器端允许的Method

If-Match:如果entity tag和当前的文档的entity tag匹配则获取文档

If-Modified-Since:如果资源在指定的日期后修改,则获取服务器端的文档,否则获取本地的副本

If-None-Match:如果entity tag和当前的文档的entity tag不匹配则获取文档

If-Range:允许条件请求一系列文档

If-Unmodified-Since:如果资源在指定的日期后没有修改,则获取服务器端的文档,否则获取本地的副本

Range:请求一个范围的资源

 

请求安全头

Authorization:包含客户端提交给服务器验证的数据

Cookie:提交一个Token给服务器

 

代理请求头

Max-Forwards:一次请求转发到网关或代理的最大次数

Proxy-Authorization:代理验证

Proxy-Connection:代理连接

 

响应头

Age:响应的时间

Public:支持的Method列表

Retry-After:资源不可用多久以后重试

Server:服务器的名称和版本

Title:HTML文档源

Warning:警告信息

Accept-Ranges:针对资源服务器接收范围

Vary:返回一个头列表表示服务器寻找最佳的版本发给客户端

 

实体头(entity header)entity可以理解为body

Allow:列出可行的请求Method

Location:告诉客户端entity真实的url

Content-Base:基URL,用来解析body里面的相对URL

Content-Encoding:编码

Content-Language:理解body最佳的语言

Content-Length:body的大小

Content-Location:资源实际的地址

Content-MD5:MD5校验

Content-Range:资源的字节范围

Content-Type:body类型

ETag:entity tag与body相关

Expires:entity过期时间

Last-Modified:entity上一次修改时间

作者:张雪飞
出处:https://zhangxuefei.site/p/1006
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注