【Linux 网络】理解并应用应用层协议
HTTP的请求与响应格式请求格式请求行请求方法(GET) 空格 URI(资源地址) 空格 HTTP版本(HTTP/1.1) 换行符(\r\n)请求报头表示请求的属性。冒号分割的键值对每组属性之间使用 \r\n 分隔遇到空行表示Header部分结束。请求正文空行后面就是请求正文请求正文允许为空但如果有内容在请求报头中就必须有 Content-Length属性的报头来标记正文长度。响应格式状态行HTTP版本(HTTP/1.1) 空格 状态码 空格 状态码描述符 换行符(\r\n)响应报头表示响应的属性。冒号分割的键值对每组属性之间使用 \r\n 分隔遇到空行表示结束。响应正文空行后面就是响应正文可以为空但如果有内容在响应报头中就必须有 Content-Length属性的报头来标记正文长度。HTTP请求方法简单介绍两个常用方法GET方法用途用于URL指定的资源例如GET /index.html HTTP/1.1特点将指定资源解析后由服务器返回响应内容给客户端POST方法用途传输数据其数据存放在请求正文中。常用于传输表单数据。例如POST /submit.cgi HTTP/1.1特点可以发送大量数据给服务器并且数据都在请求体中。状态码响应格式状态行中表示当前状态的数字。最常用200 表示成功404 表示资源不存在302 表示重定向常用具体状态码速查表状态码英文名称含义通俗版常见场景200OK成功最常见的表示你的请求服务器收到了也没出问题东西给你拿回来了。301Moved Permanently永久重定向比如网站换网址了收藏夹里的旧链接会自动跳到新链接。302Found临时重定向比如你点“我的订单”因为没登录系统把你暂时跳到“登录页”。304Not Modified资源未修改这是一个缓存机制。服务器告诉你“你本地存的那张图片没变不用重新下载了直接用吧”。400Bad Request请求错误通常是参数写错了。比如服务器要数字你传了个字符串。401Unauthorized未授权“你是谁” 表示你没登录或者 Token 过期了。403Forbidden禁止访问“我知道你是谁但我不让你进”。比如普通用户想进管理员后台。404Not Found未找到这个最出名。要么是你网址输错了要么是那个页面被删了。500Internal Server Error服务器内部错误后端代码抛异常了Bug比如空指针、数据库连不上。完全是服务器的锅。502Bad Gateway网关错误通常是中间件如 Nginx虽然是好的但后端的服务如 Tomcat/Python挂了或没响应。理解重定向重定向分为302临时重定向 301永久重定向重定向首先我们先理解一下什么叫做重定向。重定向简单来说就是让客户端访问指定的地址时转头访问另一个地址重定向主要用于当一个资源更换位置的时候为了保证之前的旧地址依然可以有效。对旧地址进行重定向到新地址。临时重定向(302)资源的临时转移使用临时重定向举个例子一个店面由于装修等缘故临时搬到另一个地方在店门口贴上公告“由于装修本店暂时搬到xxxx”。对于临时重定向客户端都是默认先访问旧地址再根据新地址去访问对于资源。永久重定向(301)资源的永久转移使用永久重定向再举个例子一个店面由于要扩大直接搬到了一个更大的店面在店门口贴上公告“本店从今日起永久搬到xxxx”。对于永久重定向来说客户端会直接访问最新的地址HTTP报头常用的报头如下Content-Type数据的格式JSON 还是表单Content-Length数据的大小Host你要访问的域名区分虚拟主机Cookie/Set-Cookie登录状态和身份识别User-Agent你是手机还是电脑是谷歌浏览器还是 IE关于Connection报头HTTP中的 Connection 字段是HTTP报头的⼀部分它主要用于控制和管理客户端与服务器之间的连接状态。核心作用管理持久连接connect字段用于管理持久连接(长连接)。持久连接允许客户端和服务器在请求/响应完成后不立即关闭TCP连接以便于在同一连接上发送发送多个请求和接收多个响应。持久链接在HTTP/1.1中默认使用持久连接。当客户端和服务器都不明确关闭连接的时候连接将保持打开状态。以便于后续请求和响应可以复用同一个连接。在HTTP1.0中默认使用的是非持久连接。如果想要实现持久连接这想要在报头中显式的设置Connect: keep-aliveConnect: keep-alive表示希望进行持久连接。Connect: close表示请求or响应完成后应该关闭TCP连接。代码实现首先我们要知道HTTP协议的实现是基于TCP协议的。所以我们想要接收客户端的信息就必要要通过TCP协议来接收信息。