HTTP 协议|青训营笔记

127 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记

HTTP 协议

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。 HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。传输HTTP协议格式的数据是基于TCP传输协议的,发送数据之前需要先建立连接。

HTTP的作用

规定了浏览器和web服务器通信数据的格式,也就是说浏览器和web服务器通信需要使用http协议

HTTP协议的特点

  1. 支持客户端/服务器模式
  2. 简单快速
  3. 灵活
  4. 无连接
  5. 无状态

浏览器和服务器传递数据的过程

  1. 浏览器通过DNS将域名进行解析成IP地址
  2. 浏览器获取ip地址
  3. 浏览器与服务器建立连接
  4. 浏览器向服务器发送http请求数据
  5. 服务器根据请求获取资源
  6. 服务器返回资源给web服务器
  7. 返回http响应数据给浏览器

URL格式

http://localhost:8080/news/index.html?uid=123&page=1

协议部分:“http”,常见的协议有HTTP,HTTPS、FTP等
域名部分:“localhost”,也可以使用IP地址作为域名使用
端口部分:“8080”,端口可以省略,默认端口(HTTP:80,HTTPS:443,FTP:21)
资源路径部分:“/news/index.html”
查询参数部分:“uid=123&page=1”,可以允许有多个参数,多个之间用“&”作为分隔符

HTTP请求

由三部分组成:请求头、请求行、请求体

请求行

请求行用来说明请求方法、要访问的资源以及所使用的协议版本

常用请求方法:
GET:从服务器获取资源(一项或多项)
POST:在服务器新建一个资源
PUT:在服务器更新资源(客户端提供改变后的完整资源)
DELETE:从服务器删除资源
其他请求方法(了解):
HEAD:请求获取由Request-URI所标识的资源的响应消息报头
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT:保留将来使用
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

请求头

请求头紧接着请求行,请求头部由键值对组成,每行一对。 请求头部通知服务器有关于客户端请求的信息,典型 的请求头有:

User-Agent:产生请求的浏览器类型
Accept:客户端可识别的内容类型列表
Content-Type:请求体数据的类型,常见的类型有:
text/html: HTML格式
text/plain:纯文本格式
image/jpeg:jpg图片格式
application/json: JSON数据格式
application/x-www-form-urlencoded: form表单数据被编码为key/value格式发送到服务器(表单默认的提 交数据格式)
multipart/form-data: 在表单中进行文件上传时使用

请求体

请求体不在GET方法中使用,经常在POST、PUT方法中使用
请求体的数据可以是:表单数据、文本、XML、JSON
与请求数据相关的最常使用的请求头是Content-Type和Content-Length

HTTP响应

HTTP响应也由三个部分组成,分别是:状态行、响应头、响应体

状态行

状态行由协议版本号、状态码、状态消息三部分组成

状态码有三位数字组成,第一个数字定义了响应的类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理 响应数据

响应体

响应体就是响应的消息体,数据可以是普通文本、XML、JSON、HTML源码

Ref:

字节跳动青训营 - HTTP 框架修炼之道

百度百科 - HTTP