面试题准备(二十七):HTTP 超文本传输协议

概述

超文本传输协议(Hyper Text Transfer Protocol,HTTP)

  • HTTP 是客户端与服务端通信必须遵守的传输协议
  • 客户端要以 HTTP 协议要求的格式把数据提交到服务器
  • 服务器要以 HTTP 协议要求的格式把数据响应给客户端

发展

HTTP/0.9

需求是仅用于传输简单的 HTML 文件

请求过程

  1. 根据 IP 地址、端口和服务器建立 TCP 连接 — 三次握手
  2. 使用 GET 方法向服务器发送请求
  3. 服务器收到请求后,以ASCII字符流的形式响应给客户端
  4. 文档传输完后,连接断开 — 四次挥手

特点

  1. 仅用来传输体积较小的 HTML 文件
  2. 请求没有请求头和请求体,只有一个请求行
  3. 响应没有响应头,只有响应体

HTTP/1.1

为了适应传输多种格式文件的需要
HTTP/1.0 增加了请求头和响应头,以键值对形式保存
HTTP/1.1 增加了对持久连接、cookie 等技术的支持

需要解决的问题

  1. 浏览器需要知道返回的数据的类型,才能对不同文件进行针对性处理
  2. 浏览器还需要知道需要提供的语言版本
  3. 浏览器还需要知道文件的编码类型

针对上述问题对请求和响应作出改进

请求

客户端发送给服务器的消息,称 HTTP 请求消息,又称 HTTP 请求报文
报文由请求行、请求头、请求体三部分组成

在这里插入图片描述

请求行

由请求方式、URL、协议版本三个部分组成

在这里插入图片描述
图中的请求方式是 GET,URL 是 /api/getbooks,协议版本是 HTTP/1.1

请求头

用于描述客户端基本信息,从而把客户端信息告知服务器
由多个键值对组成

在这里插入图片描述

  • 各字段含义
头部字段说明
Host要请求的服务器域名
Connection客户端与服务器的连接方式( close 或 keepalive )
Content-Length用来描述请求体的大小
Accept客户端可识别的响应内容类型列表
User-Agent产生请求的浏览器类型
Content-Type客户端告诉服务器实际发送的数据类型
Accept-Encoding客户端可接收的内容压缩编码形式
Accept-Language用户期望获得的自然语言的优先顺序
空行

位于最后一个请求头字段后,通知服务器 请求头至此结束

请求体

存放的是需通过 POST 方式 提交到服务器的数据
只有 POST 请求才有了请求体,GET 请求没有请求体

响应

响应消息就是服务器响应给服务端的消息内容,也称响应报文

在这里插入图片描述

状态行

由 HTTP 协议版本、状态码、状态码描述文本三部分组成,由空格隔开
在这里插入图片描述
如图协议版本为 HTTP/1.1 状态码为 200 状态码描述文本为 OK

请求头

描述服务器的基本信息,由 键值对 组成

头部字段说明
Access-Control-Allow-Origin是否可以跨域共享
Content-Type当前内容的 MIME 类型
Content-Length响应体的长度
Content-Language响应体所使用的语言
Date词条消息被推送的日期和事件
Connection用于指示链接建立完成后,会不会断开
ETag对于某个资源的特定版本的标识符,通常是一个消息队列
空行

最后一个响应头字段结束,紧跟一空行,表示响应头至此结束

响应体

服务器响应给客户端的资源内容

请求方法

用于表明要对服务器上资源进行的操作,常用的是 GET 和 POST

序号方法描述
1GET(查询) 发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。
2POST(新增) 向服务器提交资源(例如提交表单或上传文件)。数据被包含在请求体中提交给服务器。
3PUT(修改) 向服务器提交资源,并使用提交的新资源,替换掉服务器对应的旧资源。
4DELETE(删除) 请求服务器删除指定的资源。
5HEADHEAD 方法请求一个与 GET 请求的响应相同的响应,但没有响应体。
6OPTIONS获取 http 服务器支持的 http 请求方法,允许客户端查看服务器的性能,比如 ajax 跨域时的预检等。
7CONNECT建立一个到由目标资源标识的服务器的隧道。
8TRACE沿着到目标资源的路径执行一个消息环回测试,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

响应状态码

HTTP Status Code 属于 HTTP 协议的一部分,用于标识响应的状态
位于响应的状态行中返回给浏览器

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作(实际开发中很少遇到 1** 类型的状态码)
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值