HTTP协议(一):概述

一、概述

超文本传输协议(Hypertext Transfer Protocol, HTTP)是当今网络的重要角色之一,也是万维网(World Wide Web, WWW)的核心组成。它的特点为:

  • 无连接:HTTP是一个无连接的协议,虽然基于TCP,但是每次进行数据交互之前,无需先建立HTTP连接。
  • 无状态:HTTP协议不保存任何连接的状态和连接时的数据信息,每一个新的连接都是完全陌生的。

它是一个基于TCP的协议,因此,每次连接的建立和关闭都要进行三次握手四次挥手操作。

二、协议内容

2.1 请求报文

HTTP请求的报文格式为:

request-line
headers-1
headers-2
...
header-n
<blank line>
body

request-line:请求头,包含请求类型、请求URL以及协议版本号等,常用的请求类型:

GET:获取请求URL的数据内容。

POST:用于传输一个带数据信息的请求,唯一一个需要再body中携带数据的请求。

HEAD:和GET类似,只是服务端在返回数据时只会返回响应头,不带有数据部分。

header:请求头参数部分,例如user-agent等等。

body:只有POST请求才有的数据部分,用于携带传输的数据信息,一个特别要注意的地方是请求头和body之间必须要有一个空行隔开

2.2 响应报文

响应报文的格式为:

status-line
headers
<blank line>
body

status-line:响应的状态码,最常见的如200以及404等。

通常我们使用浏览器上网时,浏览器在内部就帮我们完成了这一系列请求,例如当我们打开百度的时候,浏览器实际上是执行了一次GET请求:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8

得到的响应:

HTTP/1.1 200 OK
Bdpagetype: 2
Bdqid: 0xb8b3ed5800004f2d
Bduserid: 1186263004
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 14 Dec 2017 14:06:03 GMT
Expires: Thu, 14 Dec 2017 14:06:03 GMT
Server: BWS/1.

2.3 首部字段

通常我们都会遇到以下的场景:当我们用手机打开一个PC网页时,系统往往都会默认跳转到该页面的手机版页面中去,这其中就用到了HTTP首部字段。

首部字段是HTTP协议中最重要的一部分,它包含了很多和服务端进行交互时的数据信息。

它格式为:key: value,例如user-agent: chrome,首部不区分大小写。一些常用的字段:

Accept:表示可接受的文件类型。

Accept-Encoding:可接受的编码格式。

Accept-Language:可接受的语言。

User-Agent:当前的浏览器信息。

2.4 响应状态码

服务端对客户端的响应放在数据包的第一行,表明本次请求的响应状态,常用的状态码及含义为:

20x:响应成功

200:OK,请求成功。

201:OK,新的资源建立( post命令)。

202:请求被接受,但处理未完成。

204:OK,但没有内容返回。

30x:重定向

301:所请求的资源已被指派为新的固定RUL。

302: 所请求的资源临时位于另外的URL。

304: 文档没有修改。

40x:客户端错误

400:错误的请求。

401:未被授权,该请求要求用户认证。

403:不明原因的禁止。

404:没有找到。

50x:服务器错误

500:内部服务器差错

501:没有实现

502:错误的网关;网关或上游服务器来的无效响应

503:服务暂时失效

最后修改:2017 年 12 月 15 日
如果觉得我的文章对你有用,请随意赞赏