介绍 HTTP

简介: 本篇文章主要介绍了HTTP报文、HTTP请求方法、HTTP响应的状态码、Cookie技术

介绍 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》

相关文章
|
6月前
|
网络协议 安全 网络安全
2.什么是HTTP
2.什么是HTTP
98 0
|
24天前
|
网络协议 前端开发 算法
什么是HTTP/2?
HTTP/2作为HTTP协议的重要进化,通过一系列技术创新显著提升了Web性能和用户体验。随着技术的普及和成熟,它已成为现代Web开发和部署的标准组成部分。尽管面临一些实施挑战和持续的性能优化空间,HTTP/2无疑代表了Web通信协议的一个重要里程碑,为未来协议的演进奠定了基础。
40 2
|
3月前
|
安全 网络安全 数据安全/隐私保护
http-referr
http-referr
61 1
|
5月前
|
网络协议
|
6月前
|
算法 数据安全/隐私保护 UED
什么是HTTP2
【4月更文挑战第12天】HTTP/2是1999年后HTTP协议的首次重大更新,由IETF的httpbis小组开发。关键特性包括头部压缩(使用HPACK算法)、多路复用(提高效率,减少延迟)、二进制传输(更灵活高效)和支持服务器推送(优化用户体验)。虽然语义不变,但HTTP/2已广泛应用于gRPC等服务,并强制要求使用HTTPS。这一更新显著提升了Web性能和用户体验。
45 5
|
6月前
|
Web App开发 缓存 网络协议
HTTP 前世今生
HTTP 前世今生
72 2
|
Web App开发 存储 网络协议
Http中你必须知道那点事
HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。 如果想知道具体的格式,可以打开浏览器,点击F12打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容,如下图所示:
95 0
Http中你必须知道那点事
|
安全 算法 网络协议
大话http(三)
大话http(三)
|
存储 缓存 网络协议
|
网络协议 网络架构
浅读 HTTP
浅读 HTTP
193 0
浅读 HTTP