什么是http协议 ?
即超文本传输协议(HyperText Transfer Protocol), 它规定了客户端与服务器之间进行网页内容的传输时, 所必须遵守的传输格式 . 客户端要以HTTP协议要求的格式把数据提交到服务器; 服务器要以HTTP协议要求的格式把内容响应给客户端
什么是http请求消息?
由于http协议属于客户端浏览器和服务器之间的通信协议, 因此客户端发起的请求也叫http请求, 客户端发送到服务器的消息, 叫做http请求消息,又叫做http报文
HTTP 请求消息结构
请求行(请求方式/URL/协议版本);
请求头部(由多行键值对组成, 用来描述客户端的基本信息,从而把客户端相关的信息告知服务器, 比如User-Agent 用来说明当前是什么类型浏览器; Content-Type 用来描述发送到服务器的数据格式; Accept用来描述客户端接收什么类型的返回内容; Accept-Language用来描述客户端期望接收哪种人类语言的文本内容),
空行(最后一个请求头字段的后面是一个空行, 通知服务器请求头部至此结束, 用来分隔请求头部和请求体), 和
请求体 (请求体中存放的,是通过POST方式提交到服务器的数据, GET请求没有请求体) 4 个部分组成
HTTP 响应消息结构
状态行(HTTP协议版本/状态码/状态码的描述文本);
响应头部(由多行键值对组成, 用来描述服务器的基本信息, Content-Type: 用来描述服务器相应的数据格式; Date:响应发生的时间),
空行(最后一个响应头字段的后面是一个空行, 通知客户端响应头部至此结束, 用来分隔响应头部和响应体), 和
响应体 (响应体中存放的,是服务器响应给客户端的资源内容) 4 个部分组成
HTTP请求方法
请求方法的作用: 用来表明要对服务器上的资源执行的操作, 最常用的请求方法 GET(查询) 和 POST(新增) PUT(修改) DELETE(删除)
HTTP响应状态码
属于HTTP协议的一部分, 用来标识响应的状态, 会随着响应消息一起被发送至客户端浏览器, 浏览器根据返回的响应状态码,判断请求成功还是失败
HTTP状态码分为5种类型:
1** 信息, 服务器收到请求, 需要请求者继续执行操作
2** 成功, 操作被成功接收并处理
- 200 OK 请求成功, 一般用于GET与POST请求
- 201 Created 已创建 成功请求并创建了新的资源, 通常用于POST和PUT请求
- 204 No Content 表示请求成功,但是响应报文不含实体的主体部分
- pre对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。
- 206 Partial Content 进行范围请求成功
3** 重定向, 需要进一步操作以完成请求
- 301 Moved Permanently 永久移动 , 请求的资源已被永久的移动到新的URL,返回信息会包含新的URL, 浏览器会自动定向到新URL, 今后请求都使用新的URL替代
- 302 Found 临时移动 ,与301类似, 但资源只是临时被移动
- 303 See other 表示资源存在另一个URL,应使用GET方法获取资源, 对于301/302/303响应,几乎所有浏览器都会删除报文主体并自动用GET重新请求
- 304 Not Modified 未修改 , 不会返回任何资源(响应消息中不包含响应体),客户端通常会缓存访问过得资源
- 307 Temporary redirect 临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
4** 客户端错误, 请求包含语法错误或无法完成请求
- 400 Bad Request 1. 语义有误 2. 请求参数有误
- 401 Unauthorized 当前请求需要用户验证, 发送的请求需要具有HTTP认证的认证信息
- 403 Forbidden 服务器拒绝执行
- 404 Not Found 服务器无法根据客户端的请求找到资源
- 408 Request Timeout 请求超时,服务器等待客户端发送的请求时间过长
5** 服务器错误, 服务器在处理请求的过程中发生了错误
- 500 Internal Server Error 服务器内部错误, 无法完成请求
- 501 Not Implemented 服务器不支持该请求方法, 无法完成请求, 只有GET 和HEAD请求方法是要求每个服务器必须支持的,
- 503 Service Unavailable 由于超载或系统维护, 服务器暂时无法处理客户的请求
客户端与服务器
服务器: 负责存放和对外提供资源的电脑
客户端 : 负责获取和消费资源的电脑
url :统一资源定位符 地址
url地址一般由三部分组成
1.客户端与服务器之间的通信协议
2.存有该资源的服务器名称
3.资源在服务器上具体的存放位置
客户端与服务器的通信过程 分为请求-处理-响应三个步骤
1.客户端请求服务器
2.服务器处理这次请求,找到相应资源
3.服务器响应客户端
网页中如何请求资源, 需要用到XMLHttpRequest对象
// XMLHttpRequest是浏览器提供的js成员,通过它,可以请求服务器上的数据资源
GET和POST请求区别
客户端请求服务器时,请求的方式有很多种,最常见的两种请求方式分别为get和post
1.get请求通常用于获取服务端资源(向服务器要资源)
例如:根据url地址,从服务器获取HTML文件 ,图片文件,数据资源等
2 .post请求通常用于向服务器提交数据(往服务器发送资源)
例如:登录时向服务器提交登录信息,等各种数据提交操作
两者区别 : get常用于向服务器获取资源,post常用于向服务器提交数据,
1. 安全性?
post请求更安全
2. 请求参数位置,和大小 ?
post请求发送的数据更大,能发送更多的数据类型,get请求有url长度限制
传参的方式不同,get请求参数通过url传递,post请求放在请求体中
HTTP content-type
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式
以application开头的媒体格式类型:
- application/xhtml+xml :XHTML格式
- application/xml: XML数据格式
- application/atom+xml :Atom XML聚合格式
- application/json: JSON数据格式
- application/pdf:pdf格式
- application/msword : Word文档格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
HTTP2
-
多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1 一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量。
-
二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。
-
头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。
-
服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。
-
改进的安全性:HTTP/2 默认使用 TLS(Transport Layer Security)加密传输数据,提高了安全性。
-
兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1 共存,服务器可以同时支持 HTTP/1.1 和 HTTP/2。如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。
总的来说,HTTP/2在性能、安全性和可用性方面都有显著的改进,可以使 Web 应用更加快速、高效和可靠。 对数据传输采用多路复用,让多个请求合并在同一 TCP 连接内
websocket
因为 HTTP 协议有一个缺陷:通信只能由客户端发起。只能是客户端向服务器发出请求, 服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。
这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。
最大特点: 双向通信
其他特点包括:
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。
(4)可以发送文本,也可以发送二进制数据。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是ws
(如果加密,则为wss
),服务器网址就是 URL。
作者:知来者之可追
链接:juejin.cn/post/723064…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。