HTTP基础

HTTP协议,中文翻译为超文本传输协议(HyperText Transfer Protocol),是一个比较简单的请求-响应协议,它制定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。设计HTTP最初的⽬的是为了提供⼀种发布和接收HTML⻚⾯的⽅法

完整版的教程

URI

通过HTTP或者HTTPS协议请求的资源由统⼀资源标识符(Uniform Resource Identifiers,URI)来标识,也就是我们常说的网页地址

URI的标准格式为:

协议类型:[//服务器地址[:端⼝号]][/资源⽂件路径]⽂件名[?查询][#⽚段ID]

例如 https://baike.baidu.com/item/http/243074?fr=aladdin

请求和响应

请求,即客户端发送给服务器的消息,用来请求获得服务器上的某个资源;响应,是服务器对于对应请求的应答。因为HTTP是一个协议,所以它严格规定了请求和响应的格式,我们就着例子简单介绍一下:

GET / HTTP/1.1
Host: baidu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36

上面是我们访问baidu.com的时候的请求头节选,可以看到它的格式:

  • 第一行,写明了请求方法GET,请求资源目录/,HTTP协议版本1.1
  • 第二行,请求的URI

第三行及第四行,就是一些辅助的头部字段,用来控制该请求相关的一些属性。Connection字段,表示让服务器一直维持这个连接;User-Agent字段,代表你的客户端的信息

发出请求之后,如果你的网络正常,那么就会收到服务器的响应,我们也节选一下上面请求的响应内容:

HTTP/1.1 200 OK
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html

<!DOCTYPE html>
<!--STATUS OK-->
...(此处省略n字)

我们来看看它说了什么:

  • 第一行,写明了HTTP协议版本1.1,而后是HTTP状态码200以及该状态码的说明OK,表示请求成功
  • Cache-Control,说明了该请求的缓存策略
  • Connection字段,同上
  • Content-Encoding字段,表示响应内容的编码
  • Content-Type字段,表示响应内容的类型

在空行之后,就是服务器给你返回的具体资源了,我们称之为响应正文

HTTP请求方法

根据HTTP标准,HTTP请求可以用不同的几种方法,具体如下:

方法 描述
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

HTTP状态码

当你向服务器发出一个请求时,服务器的响应会带有一个HTTP状态码,表示该请求相关的信息,常用的状态码有:

  • 200:请求成功
  • 404:请求的资源不存在
  • 500:服务器内部错误,无法完成请求

全部的HTTP状态码以及它们的含义,参考这里