HTTP请求和响应状态码

144 阅读9分钟

什么是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…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。