HTTP协议


HTTP协议

超文本传输协议(HyperText Transfer Protocol, HTTP)。

特点:

  • 无状态。不会进行信息的存储。
  • 以请求 / 应答的方式运行。Request / Response。
  • 可拓展。如自定义头部字段。
  • 自描述。可以是文本、图片、视频。
  • 与基于网络的超文本信息系统灵活互动。HTML

1.HTTP报文格式

HTTP协议1

三大部分

  • 起始行(start line):描述请求和响应的基本信息。
  • 头部字段合集(header):使用key-value的形式更详细地说明报文。
  • 消息正文(entity):实际传输的数据。

起始行
for example:
请求 GET /index.html HTTP/1.1
响应 HTTP/1.1 200 OK

头部字段集合
for example:
Connection: keep-alive

消息正文

<html>
  <head>
    <title>hello world</title>
  </head>
  <body>
    hello world
  </body>
</html>

2.请求行报文格式

HTTP协议2.jpeg

  • 请求方法:如GET/POST,表示对资源进行的操作。
  • 请求目标:通常是一个URI,标记了请求方法要操作的资源。
  • 版本号:表示报文使用的HTTP的协议版本。

tips:
这里提到URI,就展开说说URI和URL的区别:
URI(Uniform Resource Identifier)是统一资源标识符,适用于标识某一互联网资源名称的字符串。该标识允许用户通过特定的协议对任何(本地或互联网)的资源进行交互操作。由
三个部分组成访问资源的命名机制、存放资源的的主机名和资源自身的名称。最后由路径统一表示出来。
URL(Uniform Resource Locator)统一资源定位符。是URI的子集,突出一个定位,即用定位的方式标识。

3.响应行报文格式

HTTP协议3.jpeg

  • 版本号:表示报文所使用的HTTP协议版本
  • 状态码:一个三位数,表示处理的结果,如200是成功,500是服务器的错误。
  • 原因:作为数字状态码的补充,是更详细的解释文字,帮助人理解原因

4. HTTP头字段

头部字段是key-value的形式,keyvalue 之间用:隔开,最后用 CRLF 换行表示字段结束。比如使用Content-type进行数据的类型的协商,如Content-type:application/json。不仅可以使用标准里的Host、Connection等已有头,也可以任意添加自定义头进行拓展。

tips:

  • 字段名不区分大小写,不允许出现空格,可以使用-但不能使用_,字段名紧接着:不能有空格,但:后的字段值前可以有多个空格。
  • 字段顺序不会影响语义。
  • 字段原则上不重复,但存在特殊情况如:如果这个字段本身的语义允许,比如你想设置多个cookie值,你可以使用多个Set-Cookie

5.常用头字段

  • 请求字段:Host(标识当前的链接如哪个服务进行建立),Referer(防盗链相关)。
  • 响应头:Server(服务器类型,nginx/apache)。
  • 通用字段:Content-type(约定数据类型),Connection(链接的类型)

文章作者: Ziki
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ziki !
  目录