http协议简介
http协议:超文本传输协议 HyperText Transfer Protocol
web就是建立在http协议之上的。用于客户端(浏览器)和服务端(服务器)之间传输数据,是一种请求,响应的数据模型。
一:协议的基本格式
先看一个实际列子
当我们在浏览器上输入 www.baidu.com 的时候,按下F12,然后回车。
以chrome浏览器为例,按照上面的操作,然后找到
- Network -> 找到第一行 www.baidu.com 这个域名 -> 点击域名 -> 查看右边 Headers
-
Headers 下面的 Request Headers ,点击view source,会出现如下所示的内容(http的请求头)
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0 -
Headers 下面的 Response Headers ,点击view source,会出现如下所示的内容(http响应头)
HTTP/1.1 200 OK
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
上面格式解释
上面的Request Headers中
- 起始行GET表示请求服务器的类型,称为方法(method), 随后的 / 斜线表示请求服务器的资源,斜线一般表示默认请求服务器的首页index.html或者default.html等,一般由服务器设置,最后的 HTTP/1.1 表示请求的协议是http,版本是1.1。
- 下面的Host,Connection,Cache-Control 表示请求的头部属性,请求的首部字段
这时候你也许会问,那我们提交搜索的数据在哪里呢?
好,在输入框中输入 你好 2个字进行搜索, 同样按照上面的步骤,按下F12进行观察,其实在上面的提交中会有这一段
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
ie=utf-8&csq=1&pstg=20&mod=2&isbd=1&cqid=902ac78a000166d9&istc=277&ver=02dxTNAIQrLaje7ap_CI639W2bBrWSCUDIG&chk=5aa67b24&isid=27E4AA0692B22650&wd=%E4%BD%A0%E5%A5%BD&rsv_spt=1&rsv_iqid=0xa47ae6fc000016a4&issp=1&f=3&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=7&rsv_sug1=4&rsv_sug7=100&rsv_t=e6dal9luCwDrB6UKogflrgtWlwBQYVvvZTZc9ctjGuy5aI2HyqGKCyjJmZbFqAPQCNO7
多出了最后一段内容,这个就是请求的内容了,只不过它是通过GET的方式提交的,把 你好 进行了编码,wd这个参数,然后还提交了很多其他的参数
上面的Response Headers中
- 起始行开头 HTTP/1.1 表示服务器对应的HTTP协议版本,紧接着的 200 OK 表示处理的结果状态码和简单的原因,后面的Cache-Control,Connection,Content-Encoding 这些都是返回的头部字段属性
实际上后面还有返回的内容,就是搜索的结果,内容和头部属性会以一行空格来隔开,这个内容称为资源实体
以上实际就是http的报文格式了
二:http报文格式
报文格式 | 请求报文 | 响应报文 |
---|---|---|
报文首部 | GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Cache-Control: max-age=0 |
HTTP/1.1 200 OK Cache-Control: private Connection: Keep-Alive Content-Encoding: gzip |
空行(CR+LF) | ||
报文主体 | ie=utf-8&csq=1&pstg=20&mod=2 | 服务器返回的内容 |
三:返回的status code
code | message |
---|---|
2xx | 响应结果表明被正常处理了 |
3xx | 响应结果表明浏览器需要执行一些重定向请求 |
4xx | 表示客户端发生错误 |
5xx | 表示服务端发生错误 |
code | message |
---|---|
200 | ok |
301 | 永久重定向 |
302 | 临时重定向 |
304 | 304状态码返回时,不包含任何响应的主体部分内容 |
307 | 临时重定向。和302有着相同的含义。307会遵照浏览器标准,不会从POST变成GET |
400 | 请求中存在语法错误 |
401 | 表示发送的请求需要通过http认证。如果之前认证过一次,则表示认证失败 |
403 | 表示请求资源访问被服务器拒绝了 |
404 | 表示服务器上无法找到该资源 |
500 | 表示服务器执行请求时发送错误 |
503 | 表明服务器超载了,无法完成请求 |
四:http请求的方法
method | message | 支持的协议版本 |
---|---|---|
GET | 获取资源 | 1.0、 1.1 |
POST | 用来传输实体 | 1.0、 1.1 |
PUT | 用来传输文件 | 1.0、 1.1 |
HEAD | 返回报文首部信息 | 1.0、 1.1 |
DELETE | 删除文件 | 1.0、 1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 与代理服务器通信时建立隧道 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINK | 断开连接关系 | 1.0 |