前言
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP 是基于 TCP/IP 协议通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。本文主要介绍http有关的一些基础概念
网络基础简述
-
网络分层:网络分层就是将网络节点所要完成的数据的发送或转发、打包或拆包,控制信息的加载或拆出等工作,分别由不同的硬件和软件模块去完成。这样可以将往来通信和网络互连这一复杂的问题变得较为简单。
- 链路/物理层:物理传输
- 网络层:处理网络上流动的数据包,解决路由选择、拥塞控制和网络互连等
- 传输层:提供处于网络连接中的两台计算机之间的数据传输(TCP/UDP)
- 应用层:向用户提供应用服务时通信的活动(HTTP,DNS)
一、HTTP协议主要特点
- 简单快速:客户端向服务器请求时,只需要传送请求的方法和路径。由于HTTP协议简单,所以服务器程序规模小,通信速度很快。
- 灵活:可以传输任意类型的数据对象。
- 无连接:每次连接只处理一次请求,请求应答后断开;采用这种传输可以节约时间。
- 无状态:协议本身并不会保留之前一切的请求或响应的报文信息。这是为了处理大量的事物,确保协议的可伸缩性,而特意设计得简单。
二、HTTP报文的组成部分
报文由报文首部、空行、报文主体组成,根据角色不同分请求报文和响应报文。
请求报文
- 请求行:方法 资源路径 协议版本
- 请求头:关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。
- 空行:这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
- 请求体:内容实体
响应报文
- 响应行:版本协议 HTTP状态码 状态码短语
- 响应头:关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。
- 空行:这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
- 响应体:内容实体
三、HTTP方法
- GET:请求指定的页面信息,并返回实体主体。
- POST:向指定资源提交数据进行请求(例如提交表单或商上传文件)。数据包含在请求体中。
- PUT:从客户端向服务器传送的数据取代指定的文档内容。
- DELETE:请求服务端删除指定资源。
- HEAD:只获取报文的头部信息。
- OPTIONS:客户端查询服务端指定资源支持的方法。
四、POST与GET的区别
-
参数相关:
- GET请求参数会被完整的保留在浏览器历史记录中,而POST不会。
- GET请求参数通过URL传递,POST放在Request body中
- GET请求在URL中传送的参数有长度限制2kb,而POST没有
-
浏览器相关:
- GET在浏览器回退时时无害的,而POST会再次提交请求
- GET请求浏览器会主动缓存,而POST不会,除非手动设置
五、HTTP状态码*
- 1xx:指示信息;表示请求已经接收,继续处理
-
2xx:成功;表示请求已经成功接收、理解、接受
- 200:请求成功
- 204:请求成功,但不需要返回任何实体内容
- 206:分段传输
-
3xx:重定向;表示请求需要更进一步的操作
- 301:永久重定向
- 302:临时重定向
- 304:使用本地缓存
-
4xx:客户端错误;请求语法错误或请求无法实现
- 400:客户端代码错误
- 403:对请求页面的访问被禁止
- 404:请求资源不存在
-
5xx:服务端错误;服务器未能实现合法响应
- 500:服务端错误
- 503:服务端宕机
六、持久化连接
HTTP初始版本中,每次HTTP通信都会建立断开一次连接;持久化连接就是为了减少TCP通信的开销
HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。![]()
七、管线化
管线化是在持久化连接基础上,衍生出来的。客户端可以连续请求无需等待上一条请求响应。
参考资料
- 《图解HTTP》[日] 上野宣 著
- 关于Http协议,你必须要知道的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。