一、HTTP协议介绍
概念:
HTTP 协议的全称是(HyperText Transfer Protocol,超文本传输协议),是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片、音乐、视频、超链接等等都属于超文本。传输 HTTP 协议格式的数据是基于 TCP 传输协议的,发送数据之前需要先建立连接。
作用:
它规定了浏览器和 Web 服务器通信数据的格式,也就是说浏览器和web服务器通信需要使用http协议。
特点:
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
二、 HTTP 请求报文
HTTP请求报文组成:
请求行、请求头、空行和请求体
2.1请求行
请求行必须在http请求格式的第一行。
请求行(请求方式 资源路径 协议/版本)
2.2请求方式
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
请求方式 | 说明 | 特点 |
---|---|---|
GET | 获取web服务器数据 | 将请求参数追加在url后面,相对不安全;url长度限制get请求方式数据的大小;没有请求体;一般的HTTP请求大多都是GET。常见get请求:地址栏直接访问、< a href="" >、< img src="" >等 |
POST | 向web服务器提交数据 | 请求参数在请求体处,较安全;请求数据大小没有显示;只有表单设置为method=“post”才是post请求,其他都是get请求 |
HEAD | 与GET相似 | 服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。 |
DELETE | 删除某一个资源 | |
OPTIONS | 用于获取当前URL所支持的方法 | 若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。 |
PUT | 指定资源位置更新内容 | 本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。 |
TRACE | 回显服务器收到的请求 | 主要用于测试或诊断。 |
CONNECT | 是HTTP/1.1协议预留的 | 能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。 |
- GET方式的请求报文没有请求体,只有请求行、请求头、空行组成。
- POST方式的请求报文可以有请求行、请求头、空行、请求体四部分组成,注意:POST方式可以允许没有请求体,但是这种格式很少见。
2.3请求头
开发者工具查看HTTP请求头(GET请求方式)
GET 请求报文说明:
---- 请求行 ----
GET /weixin_45455015 HTTP/1.1 # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: blog.csdn.net # 服务器的主机地址和端口号
Connection: keep-alive # 和服务端保持长连接
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 # 用户代理,也就是客户端的名称
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 # 可接受的数据类型
Accept-Encoding: gzip, deflate, br # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9 #可接受的语言
Cookie: xxxx... # 登录用户的身份标识
---- 空行 ----
因为GET没有正文,所以下面为空
请求原始报文的每项数据之间使用:\r\n
三、HTTP响应报文
HTTP请求报文组成:
响应行、响应头、空行和响应体
3.1响应行
响应行是由三部分组成:HTTP协议版本 状态码 状态描述
3.2状态码
状态码的类别:
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informational(通知状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
状态码大全
状态码 | 名称 | 原因短语 |
---|---|---|
100 | Continue | 请求者应当继续提出请求,服务器返回此代码表示已收到初始的请求,正在等待其余部分 |
101 | Switching Protocols | 切换协议, 请求者已要求服务器切换协议,服务器已确认并准备切换 |
200 | OK | 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页,对GET和POST请求的应答文档跟在后面。 |
201 | Created | 已创建,请求成功并且服务器创建了新的资源,Location头给出了它的URL。 |
202 | Accepted | 已接受,服务器已接受请求,但尚未处理。该请求最终可能会或可能不会被执行,因为在实际处理时可能不允许该请求。 |
203 | Non-Authoritative Information | 非授权信息,服务器已成功处理了请求,但返回的信息可能来自另一来源。 |
204 | No Content | 无内容,服务器成功处理了请求,但没有返回任何内容 |
205 | Reset Content | 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。 |
206 | Partial Content | 客户发送了一个带有Range头的GET请求(分块请求),服务器成功处理了部分 GET 请求。 |
300 | Multiple Choices | 多种选择, 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 |
301 | Moved Permanently | 永久移动,请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 |
302 | Moved Temporatily | 类似于301,但是移动是临时的。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
303 | See Other | 查看其它位置,请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。即该状态码存在的最主要意义是为了处理POST请求重定向到GET请求的情况 |
304 | Not Modified | 未修改,自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 |
305 | Use Prox | 使用代理,请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。 |
307 | Temporary Redirect | 临时重定向,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
400 | Bad Request | 错误请求,服务器不理解请求的语法。 |
401 | Unauthorized | 未授权,访问被拒绝, 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 |
403 | Forbidden | 禁止访问, 服务器拒绝请求。 |
404 | Not Found | 未找到, 服务器找不到请求的网页。是一个常见的状态码。 |
405 | Method Not Allowed | 方法禁用,禁用请求中指定的方法。 |
406 | Not Acceptable | 不接受,指定资源已找到,但无法使用请求的内容特性响应请求的网页。 |
407 | Proxy Authentication Required | 需要代理授权验证,此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 |
408 | Request Timeout | 请求超时,服务器等候请求时发生超时 |
409 | Conflict | 冲突,服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。 |
410 | Gone | 已删除,如果请求的资源已永久删除,服务器就会返回此响应。返回410表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。 |
411 | Length Required | 需要有效长度,服务器不接受不含有效内容长度标头字段的请求。 |
412 | Precondition Failed | 未满足前提条件, 服务器未满足请求者在请求中设置的其中一个前提条件。 |
413 | Request Entity Too Large | 请求实体过大,服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 |
414 | Request URI Too Long | 请求的 URI(通常为网址)过长,服务器无法处理。 |
415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持。 |
416 | Requested Range Not Satisfiable | 请求范围不符合要求,如果页面无法提供请求的范围,则服务器会返回此状态代码。 |
417 | 未满足期望值 | 服务器未满足"期望"请求标头字段的要求。 |
423 | 锁定的错误 | |
500 | Internal Server Error | 服务器内部错误,服务器遇到错误,无法完成请求 |
501 | Not Implemented | 尚未实施, 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 |
502 | Bad Gateway | 错误网关, 服务器作为网关或代理,从上游服务器收到无效响应。 |
503 | Service Unavailable | 服务不可用, 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。 |
504 | Gateway Timeout | 网关超时,服务器作为网关或代理,但是没有及时从上游服务器收到请求。 |
505 | HTTP Version Not Supported | HTTP 版本不受支持,服务器不支持请求中所用的 HTTP 协议版本。 |
3.3响应头
开发者工具查看HTTP响应头
响应报文说明::
--- 响应行/状态行 ---
HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述
--- 响应头 ---
Date: Wed, 04 Sep 2019 09:47:27 GMT # 服务端的响应时间
Content-Type: text/html; charset=UTF-8 # 内容类型
Transfer-Encoding: chunked # 发送给客户端内容不确定内容长度,发送结束的标记是0\r\n, Content-Length表示服务端确定发送给客户端的内容大小,但是二者只能用其一。
Connection: keep-alive # 和客户端保持长连接
Server: openresty # 服务器名称
--- 空行 ---
--- 响应体 ---
<!DOCTYPE html><html lang=“en”> …</html> # 响应给客户端的数据
原始响应报文的每项数据之间使用:\r\n
四、浏览器访问
web服务器的通信过程
五、URL
URL的英文全拼是(Uniform Resoure Locator),统一资源定位符,通俗理解就是网络资源地址,也就是我们常说的网址。
URL例子:
https://blog.csdn.net/weixin_45455015
- 协议部分: https://、http://、ftp://
- 域名端口部分: www.csdn.net (https端口默认443,http默认80)
- 资源路径部分:/weixin_45455015
- 查询参数部分: ?page=1&count=10 (?后面的参数)
六、短连接和长连接
-
短连接
短连接的操作步骤是: 建立连接- ->数据传输- ->关闭连接… …建立连接- ->数据传输- ->关闭连接
如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。 -
长链接
长链接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。长链接操作步骤: 建立连接- ->数据传输…(保持连接)…数据传输- ->关闭连接
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间