网络协议03-http协议

346 阅读2分钟

本文正在参与 “网络协议必知必会”征文活动

前言

在浏览器中输入:https://juejin.cn/,可以看到掘金的首页。

当你请求掘金地址时,整个过程发生了什么?

  • 浏览器将域名发送给DNS服务器,让它解析为IP地址
  • 首先建立TCP连接,三次握手和四次挥手
  • 连接建立后,就是发送HTTP请求
  • 服务端响应请求并返回结果给浏览器,浏览器渲染结果

Http协议

超文本传输协议【HyperText Transfer Protocol】, 是应用层的协议,用于分布式、协作式和超媒体信息系统的通信的协议。

主要特点:

  • 支持客户端/服务端模式
  • 请求简单快速,使用GET、POST、HEAD等方法和请求路径向服务器发送请求。因HTTP协议简单,所以通信快
  • 允许传输任意类型的数据对象,通过Content-Type 标记
  • 无连接: 每次http 连接只处理一个请求,服务端接收到客户端请求并应答后即断开连接,这种方式可以节省传输时间
  • HTTP协议是无状态协议。不记录任何信息,如果后续需要处理前面信息都需要重新传输

URL

`https://juejin.cn/是请求URL,也是一种位置表示,其格式如下:

http://host[":"port][abs_path]

  • http 是网络协议
  • host 是合法网络的主机域名或IP地址
  • port 是指定端口号,缺省端口是80
  • abs_path 请求资源的URI,统一资源定位符

请求

http 请求时主要有三部分组成

  • 请求行:格式:[Method] [Request-URI] [HTTP-Version] CRLF

    • Method表示请求方法;支持 GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS
    • Request-URI是一个统一资源标识符;
    • HTTP-Version表示请求的HTTP协议版本;
    • CRLF表示回车和换行
  • 消息报文

    • HTTP消息报头都包含普通报头、请求报头、响应报头、实体报头
  • 请求正文

响应

服务端接收到请求消息后,需要返回一个HTTP响应消息,响应也是有三部分组成

  • 状态行,格式:HTTP-Version Status-Code Reason-Phrase CRLF

    • HTTP-Version表示服务器HTTP协议的版本;
    • Status-Code表示服务器发回的响应状态代码;
    • Reason-Phrase表示状态代码的文本描述

常见的状态码:

  • 状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

    • 1xx:指示信息--表示请求已接收,继续处理
    • 2xx:成功--表示请求已被成功接收、理解、接受
    • 3xx:重定向--要完成请求必须进行更进一步的操作
    • 4xx:客户端错误--请求有语法错误或请求无法实现
    • 5xx:服务器端错误--服务器未能实现合法的请求
  • 消息报文
  • 响应正文