一、概述
超文本传输协议 (Hypertext Transfer Protocol, HTTP)是当今网络的重要角色之一,也是万维网 (World Wide Web, WWW)的核心组成。它的特点为:
- 无连接:
HTTP是一个无连接的协议,虽然基于TCP,但是每次进行数据交互之前,无需先建立HTTP连接。 - 无状态:
HTTP协议不保存任何连接的状态和连接时的数据信息,每一个新的连接都是完全陌生的。
它是一个基于 TCP 的协议,因此,每次连接的建立和关闭都要进行三次握手和四次挥手操作。
二、协议内容
2.1 请求报文
HTTP 请求的报文格式为:
|
1 2 3 4 5 6 7 |
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 响应报文
响应报文的格式为:
|
1 2 3 4 |
status-line headers <blank line> body |
status-line:响应的状态码,最常见的如 200 以及 404 等。
通常我们使用浏览器上网时,浏览器在内部就帮我们完成了这一系列请求,例如当我们打开百度的时候,浏览器实际上是执行了一次 GET 请求:
|
1 2 3 4 5 6 7 8 9 |
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 |
得到的响应:
|
1 2 3 4 5 6 7 8 9 10 11 |
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:服务暂时失效
















评论