http(Hyper Text Transfer Protocol)是什么

http不是什么

常见状态码

6-五大类HTTP状态码.webp

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

常见字段

Host字段

客户端发送请求时,用来指定服务器的域名。

Content-Length 字段

服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。

Connection 字段

Connection 字段最常用于客户端要求服务器使用「HTTP 长连接」机制,以便其他请求复用。

HTTP/1.1 版本的默认连接都是长连接,但为了兼容老版本的 HTTP,需要指定 Connection 首部字段的值为 Keep-Alive

Content-Type 字段

Content-Type 字段用于服务器回应时,告诉客户端,本次数据是什么格式。

Content-Encoding 字段

Content-Encoding 字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式

Accept-Encoding

用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。

常见方法

方法名 安全性 幂等性
GET
HEAD
OPTIONS
DELETE
PUT
POST

RESTful的四个方法:GET,PUT,POST,DELETE

安全的方法不会修改资源状态,尽管多次调用的返回值可能不一样(被其他非安全方法修改过)。

幂等性:指该方法多次调用返回的效果(形式)一致,客户端可以重复调用并且期望同样的结果。

安全的方法都是只读的方法(GET、HEAD、OPTIONS),不会改变资源状态,显然,这三个方法也是幂等

PUT请求的幂等性可以这样理解,将A修改为B,它第一次请求值变为了B,再进行多次此操作,最终的结果还是B,与一次执行的结果是一样的,所以PUT是幂等操作。 同理可以理解DELETE操作,第一次将资源删除后,后面多次进行此删除请求,最终结果是一样的,将资源删除掉了。

POST不是幂等操作,因为一次请求添加一份新资源,二次请求则添加了两份新资源,多次请求会产生不同的结果,因此POST不是幂等操作。

GET 请求可以带 body 吗?

RFC 规范并没有规定 GET 请求不能带 body 的。理论上,任何请求都可以带 body 的。只是因为 RFC 规范定义的 GET 请求是获取资源,所以根据这个语义不需要用到 body。

另外,URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的。

URI和URL

URI(Uniform Resource Identifier),中文名称是 统一资源标识符,使用它就能够唯一地标记互联网上资源。URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分

Untitled

键入网址再按下回车,后面究竟发生了什么

HTTP 协议基于底层的 TCP/IP 协议,所以必须要用 IP 地址建立连接;

如果不知道 IP 地址,就要用 DNS 协议去解析得到 IP 地址,否则就会连接失败;

建立 TCP 连接后会顺序收发数据,请求方和应答方都必须依据 HTTP 规范构建和解析报文;

为了减少响应时间,整个过程中的每一个环节都会有缓存,能够实现“短路”操作;

虽然现实中的 HTTP 传输过程非常复杂,但理论上仍然可以简化成实验里的“两点”模型。