HTTP报文

HTTP 报文是 HTTP 应用程序之间传递的格式化数据块,分为请求报文响应报文两类,两者的基本结构相同。

HTTP 报文由起始行首部主体(可选)三个部分组成。其中,起始行和首部均以一个行终止序列(即空行,可写作CRLF,包括一个回车符、一个换行符)作为结束符。主体是可选的数据块,可以包含文本、二进制数据或者为空。

起始行

所有 HTTP 报文都已起始行作为开始,请求报文和响应报文的起始行的语法有所不同。

请求报文起始行:

又称为请求行,告诉服务器要做什么。

语法:

  <method><request-URL><version>               如:GET www.google.com HTTP/1.0

  方法(method):常用的有

           ① GET:从服务器上获取资源

           ② POST:向服务器发送需要处理(更新)的数据

           ③ PUT:将请求主体存储于(写入)服务器上的指定路径(请求的 URL)

           ④ DELETE:请求服务器删除资源,但无法保证被执行,因为服务器可以在不通知客户端的情况下撤销请求

           ⑤ HEAD:从服务器获取资源首部,必须确保与 GET 请求返回的首部完全相同

           ⑥ OPTIONS:确定服务器可以执行的方法;使客户端不同实际访问资源就能判断访问资源的最优方法。

           ⑦ TRACE:对可能经过代理服务器的报文进行跟踪

   其中 GET 和 HEAD 方法被认为是安全的,因为这两种请求不会在服务器上产生什么结果。

响应报文起始行:

又称为响应行,告诉客户端发生了什么。

语法:

<version><status><reason-phrase>                如:HTTP/1.0 200 OK

  状态码(status-code):数字状态码,便于程序进行差错处理;每个状态码第一位数字都用于描述状态的一般类型。其中

      100-199:表示信息提示,100-101 已被定义

           100 Continue 表示服务器收到了请求的初始部分,请客户端继续。一般当客户端需要发送一个大实体或判断服务器能否处理实体时,可以在首部添加 Expect: 100 Continue。如果客户端不需要发送实体,就不应该发送该首部字段。

      200-299:表示成功,200-206 已被定义

           200 OK 请求成功,主题包含所请求的资源。

      300-399:表示资源被移走,300-305、307 已被定义

           301 Moved Permanently 永久重定向;

           302 Found 临时重定向(HTTP/1.0);

           303 See Other 临时重定向(HTTP/1.1);

           304 Not Modified 所请求资源未被修改,使用缓存资源;

           307 Temporary Rederect 与 301 类似(HTTP/1.1);

      400-499:表示客户端请求出错,400-415 已被定义

           401 Unauthorized 客户端在获取资源的访问权之前,对自己进行认证;

           403 Forbidden 请求被服务器拒绝,通常在服务器不想说明拒绝原因时使用;

           404 Not Found 请求的资源不存在;

           405 Method Not Allowed 请求中带有所请求 URL 不支持的方法;

           406 Not Acceptable 服务器不存在客户端可接受的与请求 URL 匹配的资源;

      500-599:表示服务器出错,500-505 已被定义

           500 Internal Server Error 服务器发生错误;

           501 Not Implemented 请求超出服务器的能力范围(如使用服务器不支持的请求方法);

           503 Service Unavalable 服务器暂时无法为请求提供服务,但将来可以;

           504 Gateway Timeout 响应超时,来自网关或代理;

           505 HTTP Version Not Supproted 请求使用了服务器无法或不愿支持的协议版本;

  原因短语(reason-phrase):以文本形式描述操作状态;便于人们理解,因此只对人类有意义(一般程序只检查状态码)

首部

为报文添加一些附件信息;本质上是一些名/值对列表。首部分为:

  通用首部:

    缓存首部:Cache-Control、Pragma

  请求首部:

    Accept首部:Accept、Accept-Charset、Accept-Encoding、Accept-Language、TR

    条件首部:Expect、If-Match、If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match

    安全首部:Authorization、Cookie、Cookie2

    代理首部:Max-forward、Proxy-Authorization、Proxy-Connection

  响应首部:

    信息性首部:Age、public...

    安全首部:Proxy-Authenticate、Set-Cookie、Set-Cookie2

  实体首部:

    信息性首部:Allow、Location

    内容首部:Content-Type、Content-length、Content-Language

    缓存首部:ETag、Expires、Last-Modified

  扩展首部。

主体

HTTP 要传输的内容,可以为图片、视频、HTML 文档、软件应用程序等。

参考:HTTP 权威指南

原文地址:https://www.cnblogs.com/zhangyubao/p/7003733.html