首页 > 其他分享 >介绍HTTP

介绍HTTP

时间:2022-12-03 12:32:00浏览次数:36  
标签:状态 HTTP 请求 报文 介绍 服务器端 客户端

介绍 HTTP

HTTP 协议用于客户端和服务器端之间的通信。请求访问资源的一端被称为客户端, 而提供资源响应的一端被称为服务器端。

HTTP 是一种不保存状态的协议,即无状态(stateless) 协议,它不对之前发生过的请求和响应的状态进行管理。也就是说, 无法根据之前的状态进行本次的请求处理。

HTTP 报文

用于 HTTP 协议交互的信息被称为 HTTP 报文。 请求端(客户端) 的 HTTP 报文叫做请求报文, 响应端(服务器端) 的 HTTP 报文叫做响应报文。

HTTP 报文本身是由多行(用 CR+LF 作换行符) 数据构成的字符串文本。HTTP 报文大致可分为报文首部和报文主体两块。报文首部和报文主体由最初出现的空行(CR+LF)来划分。

  • 请求报文的报文首部由请求行、首部字段和其他组成。请求行由请求方法、 请求 URI、协议版本组成
  • 响应报文的报文首部由状态行、首部字段和其他组成。状态行由协议版本、状态码、 用以解释状态码的原因短语组成

其他 可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。


HTTP 报文的结构如下图所示:

image-20221128185223348.png


请求报文及响应报文的结构如下图所示:

image-20221128185315110.png

image-20221128185517028.png

请求方法

请求方法是请求访问服务器的类型。

请求方法的作用是:告知服务器端,请求的意图。

  • GET : 获取资源
  • POST: 传输资源实体的主体(entity body)
  • PUT: 传输文件
  • DELETE: 删除文件
  • HEAD: 获得报文首部

HEAD 方法和 GET 方法一样, 只是HEAD 方法的响应不返回报文主体部分。HEAD 方法用于确认 URI 的有效性及资源更新的日期时间等。

状态码 & 原因短语

响应报文的状态码用来表示客户端发送的 HTTP 请求的处理结果、 标记服务器端的处理是否正常、 通知客户端出现的错误等。

状态码以 3 位数字组成。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下 5 种。

  • 1XX:Informational(信息性状态码) 通知客户端,接收的请求正在处理
  • 2XX Success(成功状态码) 通知客户端,请求被正常处理完毕
  • 3XX Redirection(重定向状态码) 通知客户端,需要进行附加操作
  • 4XX Client Error(客户端错误状态码) 通知客户端,服务器无法处理请求
  • 5XX Server Error(服务器错误状态码) 通知客户端,服务器处理请求出错

2XX Success(成功状态码) 通知客户端,请求被正常处理完毕

  • 200 OK:该状态码代表服务器接收的请求已成功处理。
  • 204 No Content:该状态码代表服务器接收的请求已成功处理, 但在返回的响应报文中不含报文主体部分。

3XX Redirection(重定向状态码) 通知客户端,需要进行附加操作。表明浏览器需要执行某些特殊的处理以正确处理请求

  • 301 Moved Permanently:永久性重定向。 该状态码表示请求的资源已被分配了新的 URI,希望用户以后使用新的 URI 访问,新的 URI 在 Location 响应首部字段中指定。
  • 302 Found:临时性重定向。 该状态码表示请求的资源已被分配了新的 URI,希望用户本次使用新的 URI 访问,新的 URI 在 Location 响应首部字段中指定。

4XX Client Error(客户端错误状态码) 通知客户端,服务器无法处理请求

  • 400 Bad Request:该状态码表示请求报文中存在语法错误。 当错误发生时, 需修改请求的内容后再次发送请求。
  • 403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。 服务器端没有必要给出拒绝的详细理由, 但如果想作说明的话, 可以在报文主体部分 对原因进行描述, 这样就能让用户看到了。
  • 404 Not Found:该状态码表明服务器上无法找到请求的资源。
  • 405 Method Not Allowed:该状态码表明服务器接收到了不支持的 HTTP 方法。当响应返回该状态码,同时响应也会返回 Allow 实体首部字段来通知客户端,服务器端能够支持 Request-URI 指定资源的所有 HTTP 方法。

5XX Server Error(服务器错误状态码) 服务器处理请求出错

  • 500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误。
  • 502 Bad Gateway:通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
  • 503 Service Unavailable:该状态码表明服务器暂时处于超负载或正在进行停机维护, 现在无法处理请求。 如果事先得知解除以上状况需要的时间, 最好写入 RetryAfter 首部字段再返回给客户端。

Cookie 技术

HTTP 是一种不保存状态的协议,即无状态(stateless) 协议,它不对之前发生过的请求和响应的状态进行管理。也就是说, 无法根据之前的状态进行本次的请求处理。如果我们要求必须登录认证才能访问资源,那么每次跳转新页面不是要再次登录,就是需要每次请求时在请求报文中附加参数来管理登录状态。于是引入 了 Cookie 技术。

Cookie 的工作机制是用户识别及状态管理。 Web 网站为了管理用户的状态会通过 Web 浏览器, 把一些数据临时写入用户的计算机内。 接着当用户访问该 Web 网站时, 可通过通信方式取回之前发放的 Cookie。Cookie 技术通过在请求和响应报文中写入 Cookie 信息来管理客户端的状态。

  • 客户端:客户端(Web 浏览器)会根据服务器端发送的响应报文内的 Set-Cookie 响应首部字段,保存 Cookie。当下次客户端再往该服务器发送请求时, 客户端会自动在请求报文中加入 Cookie 首部字段后再将请求报文发送出去。
  • 服务器端
    • 服务器端发现客户端发送过来的 Cookie 后, 会去检查究竟是从哪一个客户端发来的连接请求, 然后对比服务器上的记录, 最后得到之前的状态信息。
    • 如果服务器端发现客户端发送过来的请求报文中没有 Cookie 首部字段,那么服务器端会生成 Cookie 信息,在响应报文中加入 Set-Cookie 首部字段后,服务器端将响应报文发送给客户端。

参考资料

《图解HTTP》

标签:状态,HTTP,请求,报文,介绍,服务器端,客户端
From: https://blog.51cto.com/haofeiyu/5908517

相关文章

  • K8s架构|全面整理K8s的架构介绍
    K8S架构与核心技术介绍1.架构图1.1整体结构图1.2组件间的协议CNI:CNI是ContainerNetworkInterface的是一个标准的,通用的接口;用于连接容器管理系统和网络......
  • Flutter 陈航 课程介绍 环境 Dart 语言概览
    本文地址目录目录目录Flutter核心技术与实战开篇词|大前端都应该学习Flutter01|预习篇·搭建Flutter环境02|预习篇·Dart语言概览Dart是什么?Dart的特......
  • 记一次nginx配Https踏过的坑-单域名证书只能配置一个域名
    域名申请下来之后是可以访问了,但是如果需要用到小程序上面的话,还是需要支持https调用的。但是想着这还不难嘛。直接上ssl证书就好了。那么问题就来了,白嫖一时爽。。。。。。......
  • 【Docker】Failed to create docker image: org.apache.http.client.ClientProtocolEx
    使用Jenkins打包docker镜像时报这个错,并且还是在有别的项目正常打包的情况下,新建的任务就不好使了。完整的错误信息:[Docker]ERROR:Failedtoexecstart:null[Docker]ERR......
  • HTTP_请求消息_请求行以及请求体
    HTTP_请求消息_请求行以及请求体请求消息数据格式1.请求行请求行:请求方式 请求url 请求协议/版本GET/login.htmlHTTP/1.1请求方式:......
  • 卡尔曼滤波(Kalman filter)(不完全介绍)
    来自  https://www.cnblogs.com/litecdows/p/KalmanFilter.html  1.Kalmanfilter基本介绍卡尔曼滤波(Kalmanfilter)是一种高效的自回归滤波器,它能在存在诸多不确......
  • 原生OKHttp的Get和Post请求思路
    原生OKHttp的Get和Post请求思路引入pom依赖<!--接收OKHttp返回json信息依赖-->   <dependency>     <groupId>com.squareup.okhttp3</groupId> ......
  • c# HttpClient post get 同步调用
    ///<summary>///发起GET同步请求///</summary>///<paramname="url"></param>///<paramname="headers"></param>///......
  • Servlet_urlpartten配置以及HTTP_概述
    Servlet_urlpartten配置urlpartten:Servlet访问路径1.、一个Servlet可以定义多个访问路径@WebServlet({"/demo5","d5"})publicclassServletDemo5extendsHttpSe......
  • DevOps的流程与规范介绍
    在DevOps中想要实现快速、高质量的业务交付,流程和规范是至关重要的。流程包含软件从需求提出到产品上线投产全套生命周期的所有环节,如需求提出、代码提交、上线流程等。规范......