图解HTTP -- HTTP协议

2 章 HTTP 协议

HTTP 协议和 TCP/IP 里众多协议一样,用于客户端和服务器之间的通信。

HTTP 协议规定。请求从客户端发出,服务端响应请求并返回。

请求报文和响应报文

请求方法,请求 URI,协议版本,可选的请求首部字段和内容实体,如下:

POST /form/entry HTTP/1.1
Host:hackr.jp
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Content-Length:16
name=ueno&age=37

接受到请求的服务器,会将请求内容的处理结果以响应的形式返回

HTTP/1.1 200 OK
Date:....
Content-Length:362
Content-Type:text/html
<!-- 空行分隔 -->
<html>
<!-- .... -->

响应报文是以协议版本,状态码,解释状态码的原因短语,可选的首部响应字段以及实体主体构成

无状态的协议

HTTP 是不保存状态,即无状态的协议。本身不对请求和响应之间的通信状态进行保存。就是说不做持久化处理。

协议本身不保存之前一些的请求或响应报文的信息。主要是为了处理大量事物,确保协议的可伸缩性。但是很多时候我们其实是需要保存一些状态的,比如用户的登录状态。这个时候就出现了 Cookie 技术!!

请求 URI 定位资源

  • 使用完整的请求 URI 来访问
  • 在首部字段 Host 中写明网络域名或 IP 地址
  • 对服务器本身发出请求,直接以一个*来代替请求 URI。

HTTP 方法

GET:获取资源

用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。如果请求的是文本,那就原样返回。如果是 CGI 那样的程序,就返回经过执行后的输出结果。

GET /index.html HTTP/1.1
Host:www.hackr.jp
If-Modified-Since:...

返回时间段之后更新过的页面内容,如果没有更新,就以状态码 304 作为响应返回。

POST:传输实体主题

POST 方法用来传输实体的主体

虽然 GET 方法也可以传输实体的主体,但是我们一般都是使用 POST,虽然 POST 与 GET 很相似,但是 POST 主要不是为了获取响应的主题内容

PUT:传输文件

用来传输文件的,在请求报文的主体包含文件内容,然后包含到请求的 URI 指定的位置。主要是协议的 PUT 方法不带验证机制,存在安全性问题。一般不适用,如果配合验证机制。或者架构采用 REST 标准,可能会开放 PUT 方法。

一般的返回就是个 204,代表成功了,但是没有数据返回。

最开始的时候只有文件服务器的概念,所以才会有这些个名字的方法,所以所有的方法都是不安全的,鉴权这层肯定得自己做的。REST 服务只是一种习惯。

HEAD:获得报文首部

与 GET 方法类似,不过他不用获得报文主体的内容,用于确认 URI 的有效性和资源更新的日期时间

比如请求了某个 html,最后返回的就是有关的响应首部

DELETE:删除文件

用来删除文件,与 PUT 相反,DELETE 就是按请求的 URI 删除指定的资源。,同样不带验证机制。

OPTIONS:询问支持的方法

查询针对请求的 URI 指定的资源支持的方法

TRACE:追踪路径

就是发送请求的时候,带个 Max-Forwards,每经过一个服务器端就将数字减 1,当为 0 的时候,停止继续传输。主要是为了查询发出去的请求是怎样被加工修改/篡改的。很少会使用。

CONNECT:要求使用隧道协议连接代理

要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL 和 TLS 协议把通信内容加密后经网络隧道传输。

这个方法就是 HTTPS 时代出现的,因为我们使用代理的时候,代理拿到的是加密后的数据,不知道往哪里发,所以先发一个 connect 请求,告诉代理我要连接这个地址,然后发过来的加密报文就直接发过去了。就是一个隧道了。

持久化链接

就是 TCP 连接只建立一次,然后不断地请求,响应,都不需要建立重复的连接。这里的连接实际上是 TCP 连接,一般会有个限制时间,几秒内有请求就不会断开。

管线化

持久连接使得管线化方式成为可能,就是可以同时并行发送多个请求,不需要一个一个等待响应。这个是浏览器实现的吧。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:图解HTTP -- HTTP协议

文章字数:1.3k

本文作者:泽鹿

发布时间:2019-08-28, 16:45:23

最后更新:2019-08-28, 16:45:23

原始链接:http://panyifei.github.io/2019/08/28/读书笔记/图解HTTP/2章HTTP协议/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏