HTTP框架修炼之道 | 青训营

45 阅读5分钟

HTTP框架修炼之道

碎碎念

青训营的课程感觉讲的都好深好范啊,感觉并不太适合我这个初学者,不过作为从本科开始就一直在弄计算机网络相关的一名同学,还是先从自己熟悉的领域做起。今天简单整理一下课程中讲的内容。

  1. http1.1
  2. http2.0和QUIC(简单介绍) 毕竟现在还是http1.1大行其道,对于http协议我也还是个初学者,一点一点学吧。

HTTP1.1详解

HTTP,即超文本传输协议(Hypertext Transfer Protocol)。至于超文本是什么,简单理解就是html文件。html文件里面有一些标记,有一些超链接,让浏览器能够以特定格式给用户展示超文本,并且方便用户获取互联网上的资源。

HTTP协议报文结构

HTTP协议的上层使用的是TCP协议,TCP协议它是一个面向连接的,全双工的,可靠的 ,传输字节流的一个协议。这就让HTTP协议在实现的时候只用考虑应用层的功能,反正TCP协议确保了传输信息的可靠性,也不在乎传输数据的大小。

Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时, 你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请 求后会组织响应数据封装成一个Http响应返回给浏览器。即没有请求就没有响应.

HTTP报文结构大致可以分为三部分。

  1. 请求行/状态行
  2. 请求头/响应头
  3. 请求体/响应体

HTTP请求分类

在HTTP1.1中,有以下集中请求方法

  1. GET
  2. POST
  3. HEAD
  4. PUT
  5. DELETE
  6. CONNECT
  7. OPTIONS
  8. TRACE
  9. PATCH

GET请求:

将请求参数追加在url后面,不安全

url长度限制get请求方式数据的大小

没有请求体

一般的HTTP请求大多都是GET。

POST请求:

请求参数在请求体处,较安全。

请求数据大小没有显示

只有表单设置为method=“post”才是post请求,其他都是get请求

PUT请求:

把一个资源存放在指定的位置上。

本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。

DELETE请求:

删除某一个资源。

CONNECT请求:

CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

HEAD请求:

HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。

OPTIONS请求:

用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

TRACE请求:

回显服务器收到的请求,主要用于测试或诊断。

PATCH请求:

patch方法是一种用于更新或修改已存在资源的HTTP请求方法。它通常用于对资源进行局部更新,而不是完全替换整个资源。

常见的响应状态码

状态码:由3位数字组成,第一个数字定义了响应的类别

1xx:指示信息,表示请求已接收,继续处理

2xx:成功,表示请求已被成功接受,处理。

  • 200 OK:客户端请求成功
  • 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
  • 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容

3xx:重定向

  • 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
  • 302 Found:临时重定向,表示请求的资源临时搬到了其他位置
  • 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
  • 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
  • 304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有

4xx:客户端错误

  • 400 Bad Request:客户端请求有语法错误,服务器无法理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务
  • 404 Not Found:请求资源不存在。比如,输入了错误的url
  • 415 Unsupported media type:不支持的媒体类型

5xx:服务器端错误,服务器未能实现合法的请求。

  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,

未来展望

http2.0

相比于HTTP1.1, 主要有两个变化

  1. 多路复用:一个连接可同时处理多个请求,解决了HTTP1.1的短连接和请求阻塞问题
  2. 二进制传输数据:HTTP2.0采用二进制格式传输数据,而非http1.1文本格式,二进制格式在协议的解析和优化扩展上带来了跟多的优势和可能。

QUIC

QUIC(Quick UDP Internet Connections)是一种基于UDP的协议,旨在替代HTTP/2.0。