一. HTTP请求

HTTP请求是由客户端发出的消息,用来使服务器执行动作.发出的消息包括起始行,Headers,Body.

起始行

起始行包含三个元素:

  1. HTTP方法
    一个动词(像GET,PUT或者POST)或者一个名词(想HEAD或者OPTIONS),用来描述要执行的动作.例如,GET表示要获取资源,POST表示向服务器推送数据等.
  2. 请求目标
    • 请求目标,通常是一个URL,或者是协议,端口和域名的绝对路径.
    • 请求的各式会根据不同的HTTP方法而异,可以是:
    • 一个绝对路径,末尾跟上一个'?'和查询字符串,这种形式成为原始形式,通常被GET,POST,HEAD和OPTIONS方法所使用.
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
* 一个完整的URL,被称为绝对形式,主要在GET连接到代理时使用.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
* 由域名和可选端口(以':'为前缀)组成的URL的authority component,称为authority form,仅在使用CONNECT简历HTTP隧道时才使用.
CONNECT developer.mozilla.org:80 HTTP/1.1
* 星号形式(asterisk form),一个简单的星号("*").配合OPTIONS方法使用,代表整个服务器.
OPTIONS * HTTP/1.1
  1. HTTP版本(HTTP version),定义了剩余报文的结构

Headers

请求的HTTP headers遵循和HTTP header相同的基本结构:不区分大小写的字符串,紧跟着的冒号(':')和一个结构取决于header的值.整个header(包括值)由一行组成.

  • 请求头可以分为很多组:
    • General headers:例如Via,适用于整个报文.
    • Request headers:例如User-Agent,Accept-Type等
    • Entity headers:例如Content-Length,适用于请求的body.
      ALT

Body

请求的最后一部分是它的body,不是所有的请求都有一个body,如GET,HEAD,DELETE和OPTIONS等获取资源的请求,通常不需要body.有些类似于POST请求将数据发送到服务器以更新数据的请求,就会需要body.

  • Body可以分为两类:
    • Single-resource bodies:由一个单文件组成.该类型body由两个header定义:Content-Type和Content-Length.
    • Multiple-resource bodyies:由多部分组成,每一部分包含不同的信息位.

二. HTTP响应

状态行

HTTP响应的起始行被称作状态行,包含以下信息:

  1. 协议版本:通常为HTTP/1.1
  2. 状态码(status code):表明请求是成功或失败.常见的成功码有200,201,300等,失败码有400,401,500等.
  3. 状态文本(status text):一个简短的,纯粹的信息,通过状态码的文本描述,帮助人们解读HTTP消息.
    典型的状态码:HTTP/1.1 404 Not Found。

Headers

响应的HTTP headers和其他header相同的结构:不区分大小写的字符串,紧跟着的冒号(':')和一个结构取决于header类型的值.

  • 响应头可以分为几组:
    • General headers:例如Via,适用于整个报文.
    • Request headers:例如Vary和Accept-Ranges,提供其他不符合状态行的关于服务器的信息.
    • Entity headers:例如Content-Length,适用于请求的body.如果请求中没有任何的body,则不会发送这类的头文件
      ALT

Body

响应最后一部分是body,不是所有的响应都有body,具有状态码(如201或204)的响应,通常不会有body.

  • Body可分为三类:
    • Single-resource bodies:由已知长度的单个文件组成.该类型body由两个header定义:Content-Type和Content-Length.
    • Single-resourcebodies:由未知长度的单个文件组成,通过将Transfer-Encoding设置为chunked来使用chunks编码.
    • Multiple-resource bodies:由多部分body组成,每部分包含不同的信息段.
posted on 2018-03-08 16:54  magicianyin  阅读(3426)  评论(0编辑  收藏  举报