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
:服务暂时失效
此处评论已关闭