目录
HTTP是一种用于传输数据的协议(超文本传输协议)是客户端与服务器通信的一种标准。
客户端和服务器都遵循HTTP协议,就能从彼此发送的信息中提取自己想要的数据
http协议的特点
简单 | 使用的 请求-响应模型 | 客户端向服务器发送请求,才能得到服务器的响应信息 |
无状态 | 服务器不会跟踪客户端的状态信息 | 客户端和服务器之间,请求/响应完成以后,建立的连接会断开。 服务器会认为每次请求的用户都是新用户,无法区分两次请求的用户是否为同一个用户 |
短连接 | 占用80端口 | 请求/响应完成后,建立的连接会立即关闭,连接时间很短,这样就可以释放服务器资源,下一次请求需要重新建立TCP连接 |
长连接 | http1.1后推出 | 在客户端和服务器之间响应结束后,并不会马上断开,而是会持续一段时间,在该时间内,如果还有链接资源需要下载,则不会重新建立连接,从而提高访问效率 |
http协议的处理流程
-
客户端和服务器 建立连接
-
客户端向服务器 发送http请求
-
服务器 产生http响应信息
-
关闭连接
http协议请求信息的组成
请求行 | 描述请求方式、请求URL路径、http协议版本 |
请求头 | 以键值对方式描述客户端相关的信息 |
空行 | 表示请求头和消息体之间的分隔符 |
消息体(POST) | 描述客户端请求的表单数据 |
GET /index.html HTTP/1.1 //请求行,指定请求方法、URL和HTTP协议版本
Host: www.example.com //请求头,指定请求的主机名
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 //请求头,指定浏览器的User-Agent信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 //请求头,指定客户端能够接受的内容类型及优先级
Accept-Language: en-US,en;q=0.5 //请求头,指定客户端能够接受的自然语言
Accept-Encoding: gzip, deflate //请求头,指定客户端能够接受的内容编码方式
Connection: keep-alive //请求头,指定客户端与服务器之间的连接方式
Upgrade-Insecure-Requests: 1 //请求头,指定客户端是否支持HTTPS协议,1表示支持
If-Modified-Since: Tue, 07 Jul 2020 10:00:00 GMT //请求头,用于实现HTTP缓存,指定上次修改时间
If-None-Match: "etag12345" //请求头,用于实现HTTP缓存,指定上次响应的ETag值
http协议的请求方式
GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT
GET | 用于获取资源。GET请求会向服务器请求指定的资源,并返回响应。GET请求可以在URL中传递参数,但是参数会暴露在URL中,不适合传递敏感信息 |
POST | 用于提交数据。POST请求会向服务器提交指定的数据,并返回响应。POST请求可以在请求正文中传递参数,适合传递大量或者敏感的信息 |
PUT | 用于更新资源。PUT请求会向服务器上传指定的资源,如果资源已经存在,会将其更新。PUT请求可以用于创建资源,但是不常用 |
DELETE | 用于删除资源。DELETE请求服务器删除指定的资源。例如文件、数据库记录等等 |
使用场景
GET
-
用户在浏览器中,输入URL路径访问服务器资源
-
用户点击超链接
-
用户提交表单,表单的method属性为GET,或不写
POST
<form action="" method= "post">
GET 和 POST 的区别
GET | POST | |
流格式的区别 | 只有请求行、请求头、空行,表单数据附加在URL后面 | 有请求头、请求行、空行、消息体,在消息体中描述表单数据 |
传输性能的区别 | 只能传输小文本数据;由于URL中会附加我们的表单数据,所以在浏览器中会显示表单数据 | 可以传输大小文本数据,也可以传输二进制数据;由于表单数据由消息体描述,所以,在浏览器中不会显示表单数据 |
用途的区别 | 资源的查找 比如{ 请求静态页面或图形文件 } | 数据的传输 比如{ 发送大数据、上传文件、发送密码或其他保密信息的时候 } |
http协议的响应信息
状态行 | 包括HTTP版本、状态码和状态描述 |
响应头 | 以键值对方式描述服务器相关信息 包括服务器信息、内容类型、内容长度、缓存控制等信息 |
空行 | 用于分隔响应头和消息体 |
消息体 | 即响应的内容,例如网页HTML代码、图片、音频、视频等 |
HTTP/1.1 200 OK //响应行,指定HTTP协议版本、状态码和状态信息
Date: Tue, 07 Jul 2020 10:30:00 GMT //响应头,指定响应的日期和时间
Content-Type: text/html //响应头,指定响应的内容类型为text/html
Content-Length: 1234 //响应头,指定响应消息体的长度为1234字节
Server: Apache/2.4.18 (Ubuntu) //响应头,指定响应的服务器类型和版本号
Last-Modified: Tue, 07 Jul 2020 09:00:00 GMT //响应头,用于实现HTTP缓存,指定上次修改时间
ETag: "etag12345" //响应头,用于实现HTTP缓存,指定本次响应的ETag值
Accept-Ranges: bytes //响应头,指定服务器是否支持分块传输和部分请求
Connection: close //响应头,指定服务器与客户端之间的连接方式
<!DOCTYPE html> //消息体,HTML页面的文档类型声明
<html> //消息体,HTML页面的开始标签
<head> //消息体,HTML页面的头部
<title>Example Page</title> //消息体,HTML页面的标题
</head> //消息体,HTML页面的头部结束标签
<body> //消息体,HTML页面的正文
<h1>Welcome to Example Page</h1> //消息体,HTML页面的一级标题
<p>This is an example page.</p> //消息体,HTML页面的段落内容
</body> //消息体,HTML页面的正文结束标签
</html> //消息体,HTML页面的结束标签
http协议的状态码
HTTP协议的状态码是指服务器向客户端返回的响应状态码,用于表示服务器对请求的处理结果,常见的状态码有以下几种:
1xx(信息性状态码) | 表示请求已被接收,需要继续处理 |
2xx(成功状态码) | 表示请求已成功被服务器接收、理解、并接受 |
3xx(重定向状态码) | 表示需要客户端进一步操作才能完成请求 |
4xx(客户端错误状态码) | 表示客户端请求有语法错误或请求无法实现 |
5xx(服务器错误状态码) | 表示服务器未能完成显然有效的请求 |
常见的状态码:
-
401 nauthorized:没有进行身份验证或验证未通过
-
403 Forbidden:请求被服务器拒绝
-
404 Not Found:请求的资源不存在
MIME类型
MIME类型用于标识HTTP请求和响应中传输的文件类型。服务器产生响应信息时,告诉客户端发送的是什么数据类型,客户端会根据不同的MIME类型,来决定如何解析响应信息
常用的
text/html | HTML文档 |
text/xml | XML格式 |
image/jpeg | JPEG图像文件 |
application/json | JSON数据格式 |
video/mp4 | MP4视频文件 |