一、概述
超文本传输协议(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
:服务暂时失效
评论