HTTP 协议详解

HTTP协议简介

HTTP (HyperText Transfer Protocol - 超文本传输协议) 是应用层上的一种 客户端 / 服务端(C / S)模型的通信协议,它由请求和相应构成,且是无状态的。(暂不介绍 HTTP2)

  • 协议
    协议规定了通信双方必须遵循的数据传输格式,这样通信按照双方约定的格式才能准确的通信
  • 无状态
    无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息
  • 客户端 / 服务端模型(C / S)
    在这里插入图片描述

OSI 七层网络模型与 TCP/IP 四层模型

在这里插入图片描述

URL 构成

在这里插入图片描述

协议内容

请求(Request)
客户端发送一个 HTTP 请求到服务端的格式:

  • 请求行
  • 请求头
  • 请求体
    在这里插入图片描述
    响应(Response)
    服务端相应客户端格式:
  • 状态行
  • 响应头
  • 响应体
    在这里插入图片描述
    状态码
    HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP 状态码共分为 5 种类型:
分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

请求方法
截止到 HTTP1.1 共有下面集中方法:

方法描述
GETGET请求会显示指定的资源,一般来说 GET 方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。它期望的应该是安全的和幂等的。这里的安全指的是,请求不会影响到资源的状态。
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。
PUTPUT请求会向指定资源位置上传其最新内容,PUT 方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。
PATCHPATCH 方法出现的较晚,它在 2010 年的 RFC 5789 标准中被定义。PATCH 请求与 PUT 请求类似,同样用于资源的更新。二者有以下两点不同:1.PATCH 一般用于资源的部分更新,而 PUT 一般用于资源的整体更新。2.当资源不存在时,PATCH 会创建一个新的资源,而 PUT 只会对已有资源进行更新。
DELETEDELETE 请求用于请求服务器删除所请求 URI(Uniform Resource Identifier,统一资源标识符)所标识的资源。DELETE 请求后指定资源会被删除,DELETE 方法也是幂等的。
OPTIONS允许客户端查看服务器的性能。
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
TRACE回显服务器收到的请求,主要用于测试或诊断。

请求和相应常见通用头

名称作用
Content-Type请求体 / 响应体的类型,如:text/plain、application/json
Accept说明接收的类型,可以多个值,用 , (半角逗号)分开
Content-Length请求体/响应体的长度,单位字节
Content-Encoding请求体/响应体的编码格式,如 gzip,deflate
Accept-Encoding告知对方 我方接受的 Content-Encoding
ETag给当前资源的标识,和 Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制
Cache-Contral取值一般为 no-cache 或 max-age=XX,XX 为整数,表示该资源缓存有限期(秒)

注意
Content-type,内容类型,一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。

常见的媒体格式类型如下:

Content-Type(Mime-Type)描述
text/htmlHTML 格式
text/plain纯文本格式
text/xmlXML 格式
image/gifgif 图片格式
image/jpegjpg 图片格式
image/pngpng 图片格式

以 application 开头的媒体格式类型

Content-Type(Mime-Type)描述
application/xmlXML 数据格式
application/jsonJSON 数据格式
application/pdfpdf 数据格式
application/mswordWord 数据格式
application/octet-stream二进制数据流(如常见的文件下载)
application/x-www-form-uriencodedform 表单数据被编码为 key/value 格式发送到服务器(表单默认的提交数据的模式)
multipart/form-data需要在表单中进行文件上传时,就需要使用该格式

常见请求头

名称作用
Authorization用于设置身份认证信息
User-Agent用户标识,如:OS 和浏览器的类型和版本
If-Modified-Since值为上一次服务器返回的 Last-Modified 值,用于确定某个资源是否被更改过,没有更改过(304)就从缓存中读取
If-None-Match值为上一次服务器返回的ETag值,一般会和 If-Modified-Since 一起出现
Cookie已有的 Cookie
Referer表示请求引用自哪个地址,比如你从页面 A 跳转到页面 B 时,值为页面 A 的地址
Host请求的主机和端口号

常见响应头

名称作用
Date服务器的日期
Last-Modified该资源最后被修改时间
Transfer-Encoding取值一般为 chunked ,出现在 Content-Length 不能确定的情况下,表示服务器不知道响应体的数据大小,一般同时还会出现 Content-Encoding 响应头
Set-Cookie设置 Cookie
Location重定向到另一个 URL,如输入浏览器就输入 baidu.com 回车,会自动跳到 https://www.baidu.com,就是通过这个响应头控制的
Server后台服务器

总结

清楚地知道这些内容之后,不仅仅是为了应对面试官,而是能实实际际的在提高自己的效率,这一点在前后端联调借口最明显,当你在应用中去请求其他接口或转发请求时这些也要知道的,不然出现问题的概率会大大提高。


本文转载自 码上实战 公众号,原作者为 flyhero

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值