剖析http协议——面试必问的考点

294 阅读5分钟

1.什么是HTTP协议

HTTP(Hypertext Transfer Protocol)是一种用于在互联网上传输超文本的协议。它是Web上任何数据交换的基础,也是Web浏览器和服务器之间通信的协议。

1.1HTTP协议用于客户端和服务器端之间的通信

http用于客户和服务器之间的通信,请求访问文本等资源的一端称为客户端,而提供资源响应的一端称为服务器端。用http协议可以明确区分哪端是客户端,哪端是服务端。

1.2通过请求和响应的交换达成通信

http协议规定,先从客户端建立通信,服务器端在没有接收请求之前是不会发送响应的。

1.3HTTP是不保存状态的协议

http是一种不保存状态的协议,即无状态(stateless)协议。http协议不会保存请求和响应之间的通信状态。

1.4告知服务器意图的http方法

  1. GET方法:用来请求访问被URI识别的资源,可以传递参数给服务器,经过服务器解析后返回响应的内容,其参数被称为内容体,附在URL后面。
  2. POST方法:向服务器提交数据的方法,它通常用于将数据发送到服务器以创建新资源或更新现有资源。相对于GET方法会更加安全,请求的数据不会附在URL上。
  3. PUT方法:用来传输文件,但是PUT方法自身不带验证机制,任何人都可以上传文件到服务器,所以一般不会使用这种方法。
  4. HEAD方法:和GET方法一样,但是不返回报文(即交互的信息)主体部分。用于确认URI的有效性即资源更新的日期,时间等。
  5. DELETE方法:删除文件,用来删除指定的资源

2.HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,客户端的HTTP报文叫做请求报文,服务器端的叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本。

2.1 请求报文和响应报文的结构

HTTP请求报文和响应报文都遵循一定的结构,由起始行、头部(Headers)、空行和消息体(Message Body)组成。以下是它们的基本结构:

HTTP 请求报文结构:

  1. 起始行(Start Line):

    • 包括请求方法(GET、POST等)、请求的URI(Uniform Resource Identifier)和HTTP协议的版本。
    vbnetCopy code
    GET /path/to/resource HTTP/1.1
    
  2. 头部(Headers):

    • 包括一系列键值对,提供有关请求的附加信息。例如,内容类型、授权信息等。
    makefileCopy code
    Host: www.example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
    
  3. 空行(CRLF):

    • 由一个回车符(CR)和一个换行符(LF)组成,用于分隔头部和消息体。
    scssCopy code
    (CRLF)
    
  4. 消息体(Message Body):

    • 包含实际的数据,例如表单数据、JSON、文件等。并非所有请求都具有消息体。
    makefileCopy code
    key1=value1&key2=value2
    

HTTP 响应报文结构:

  1. 起始行(Start Line):

    • 包括协议版本、状态码和状态短语。状态码指示请求的结果,例如200表示成功,404表示未找到,500表示服务器内部错误等。
    Copy code
    HTTP/1.1 200 OK
    
  2. 头部(Headers):

    • 提供有关响应的附加信息,类似于请求报文的头部。
    yamlCopy code
    Content-Type: text/html
    Content-Length: 1234
    
  3. 空行(CRLF):

    • 用于分隔头部和消息体。
    scssCopy code
    (CRLF)
    
  4. 消息体(Message Body):

    • 包含实际的响应数据,例如HTML文档、JSON数据、图像等。并非所有响应都具有消息体。
    phpCopy code
    <!DOCTYPE html>
    <html>
    <body>
    <h1>Hello, World!</h1>
    </body>
    </html>
    

这种结构的组合使得HTTP报文能够携带请求或响应的相关信息,使通信双方能够理解彼此的意图和所传输的数据。

3.HTTP状态码

HTTP状态码是服务器向客户端提供的一个三位数的数字,用于表示特定HTTP请求的结果。状态码由三个数字组成,第一个数字定义了响应的类别,后两个数字没有分类的作用。HTTP状态码主要分为以下五类:

  1. 1xx(Informational): 表示请求已被接收,继续处理。

    • 100 Continue: 服务器已经接收到请求头,并且客户端应继续发送请求体。
    • 101 Switching Protocols: 请求者已要求服务器切换协议。
  2. 2xx(Successful): 表示请求已成功被服务器接收、理解、并接受。

    • 200 OK: 请求成功。
    • 201 Created: 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立。
    • 204 No Content: 服务器成功处理了请求,但没有返回任何内容。
  3. 3xx(Redirection): 重定向,表示需要客户端采取进一步的操作才能完成请求。

    • 301 Moved Permanently: 资源被永久移动到其他位置。
    • 302 Found: 资源被临时移动到其他位置。
    • 304 Not Modified: 资源未被修改,可使用缓存的版本。
  4. 4xx(Client Error): 表示客户端似乎有错误,请求包含错误或无法完成请求。

    • 400 Bad Request: 请求无效,服务器无法理解请求的语法。
    • 401 Unauthorized: 请求要求身份验证,客户端没有提供有效的身份验证。
    • 403 Forbidden: 服务器理解请求,但拒绝执行。
    • 404 Not Found: 服务器找不到请求的资源。
  5. 5xx(Server Error): 表示服务器在尝试处理请求时发生错误。

    • 500 Internal Server Error: 服务器遇到不可预知的情况,导致无法完成请求。
    • 502 Bad Gateway: 服务器作为网关或代理,从上游服务器收到无效响应。
    • 503 Service Unavailable: 服务器暂时过载或维护,无法处理请求。

这些状态码使客户端能够了解服务器对其请求的处理结果,从而采取适当的行动。状态码是HTTP通信中的重要部分,用于标识和传达请求和响应的状态。