问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HTTP协议详解:从基础概念到实战应用

创作时间:
作者:
@小白创作中心

HTTP协议详解:从基础概念到实战应用

引用
CSDN
1.
https://blog.csdn.net/weixin_51398164/article/details/145800435

本文详细介绍了HTTP协议的基础知识,包括HTTP协议的定义、请求方法、响应码、URI的组成等。文章内容详尽,涵盖了HTTP协议的各个方面,适合对计算机网络和HTTP协议感兴趣的读者。

基础内容分类

从TCP/IP协议栈为依托,由上至下、从应用层到基础设施介绍协议。

  1. 应用层:
  • HTTP/1.1
  • Websocket
  • HTTP/2.0
  1. 应用层的安全基础设施
  • LTS/SSL
  1. 传输层
  • TCP
  1. 网络层及数据链路层
  • IP层和以太网

HTTP协议

网络页面形成基本

流程:其中当在浏览器上面的网址搜索界面点击搜索的时候如果出现了一些记录就相当于图片中右边蓝色的“浏览器引擎”去搜索数据存储,然后找到发现一些存储在浏览器中的数据。

详细操作:

定义

一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式、与基于网络的超文本信息系统灵活的互动

基于ABNF(元语言)语法的HTTP格式:

  1. " “字符:用来分隔定义中的各个元素
  2. ”/“选择:表示多个规则都是可供选择的规则
  3. ”%c##-###“:表示从字符 ##到 ###
  4. ”()"序列组合:将规则组合起来,视为单个元素
  5. "mn"不定量重复:
  • 表示零个或更多元素
  • 1表示1个或更多元素
  • 24表示两个或者至多4个元素
  1. []可选序列:包体是可选的,可有可无的

操作符为:根据上面的规则来分析格式

HTTP-message:表示http消息

start-line:起始行

request-line/status-line:表示请求行或者响应行构成起始行

request-line=method SP request-target SP HTTP-version CRLF:请求行有 方法 空格 请求路径 空格 HTTP版本 换行

status-line=HTTP-version SP status-code SP reason-phrase CRLF :响应行由 HTTP版本 空格 响应码(三位数字) 空格 字符串形式描述的原因 换行

详细分析请求头

method——常见的方法有:

  • GET:主要的获取信息方法
  • HEAD:类似GET方法,但服务器不发送BODY,用以获取HEAD元数据,幂等方法
  • POST:常用于提交HTML FROM表单、新增资源等
  • PUT:更新资源、带条件时是幂等方法
  • DELETE:删除资源、幂等方法
  • CONNECT:建立tunnel隧道
  • OPTION:显示服务器对访问资源支持的方法,幂等方法————跨域
  • TRACE:回显服务器手到的请求,用于定位问题。

Linux中使用:

curl static.taohui.tech -X OPTIONS

可以查看允许使用的方法

用于文档管理的

  • PROPFIND:从Web资源中检索以XML格式存储的属性——查看目录
  • PROPPATCH:在单个原子性动作中更改和删除资源的多个属性
  • MKCOL:创建集合或者目录
  • COPY:将资源从一个URI复制到另一个URI
  • MOVE:将资源从一个URI移动到另一个URI
  • LOCK:锁定一个资源
  • UNLOCK:接触资源的锁定

详细分析响应行

响应码的规范:

1XX:表示请求已经被服务器接收到了,需要进一步处理才能完成更进一步的操作

  • 100 Continue:上传大文件前使用
  • 101 Switch Protocols:协议升级使用
  • 102 Proccessing:表示服务器已经收到了请求但是这个响应需要很长的时间处理,放置客户端超市。

2XX:成功处理请求

  • 200 OK :成功返回响应
  • 201 Created: 有新资源在服务器端杯成功创建
  • 202 Accepted:服务器接收并开始处理请求,请求并没有处理完成。异步、需要很长时间处理的任务
  • 203 Non-Authoritative Information:当代理服务器修改了origin server 的原始响应包体时。
  • 204 NO Content:成功执行了请求且不携带响应包体,并暗示客户端无需更新当前的页面视图。
  • 205 Reset Contern:成功执行了请求切不携带响应包体,同时指明客户端需要更新当前页面视图。
  • 206 Partial Content:使用range协议时返回部分响应内容时的响应码,多线程下载
  • 207 Multi-Status:在WEBDAV协议汇
  • 208 Already Reported:为了解决WEb协议

3XX:重定向

  • 300 Multiple Choices:允许客户端主动的显示
  • 301 Moved Permanently:表示资源永久的重定向
  • 302 Found:表示资源临时的重定向。
  • 303 See Other:重定向到其他资源
  • 304 Not Modified:客户端可复用的缓存
  • 307 Temporary Redirect:明确重定向后请求方法必须与原请求方法相同
  • 308 Permanent Redirect:类似301

4XX:客户端出现错误

  • 400 Bad Request:服务器认为客户端出现了错误,但不能明确判断那种错误
  • 401 Unauthorized: 用户认证信息缺失
  • 407 Proxy Authentication Required :对需要经有代理的请求,认证信息为通过代理服务器的验证
  • 403 Forbidden: 服务器理解请求的含义,但没有权限执行此请求
  • 404 Not Found: 服务器没有找到相对应的资源
  • 410 Gone :服务器没有找到对应的资源,且明确的知道该位置永久性找不到资源————对404补充
  • 405 Method Not Allowed:服务器不支持请求行中的method方法
  • 406 Not Acceptable:对客户端指定的资源表述不存在————语言不兼容
  • 408 Request Timeout:服务器接收请求超时
  • 409 Conflict:资源冲突
  • 411 Length Required:请求中未携带Content-Length头部
  • 412 Precondition Failed:条件类请求不满足时候返回
  • 413 Payload Too Large/Request Entity Too Large:请求的包体超出服务器能处理的最大限度
  • 414 URI Too Long:请求的URI超出服务器的最大长度
  • 415 Unsupported Media Type:上传的文件类型不支持
  • 416 Range Not Satisfiable: 无法提供Range请求中指定的那段包体
  • 417 Expectation Failed: 对于Expect 请求头部期待的情况无法满足
  • 421 Misdirected Request: 服务器认为该请求不该发给它
  • 426 Upgrade Required:服务器拒绝基于当前HTTP协议提供服务,必须要Upgrade告知客户端升级
  • 428 Precondition Required:用户请求中缺少条件类头部
  • 429 Too Many Requests:客户端发送请求的速率太快
  • 431 Request Header Fields Too Large:请求的头部大小超过限额
  • 451 Unavailable For Legal Reasons :由于法律原因资源不可访问

5XX:表示服务端出现错误

  • 500 Internal Server Error :服务器内部错误
  • 501 Not Implemented: 服务器不支持实现请求所需要的功能
  • 502 Bad Gateway:代理服务器无法获取到合法响应
  • 503 Service Unavailable :服务器资源尚未准备好处理当前请求
  • 504 GateWay Timeout:代理服务器无法及时的从上游获得响应
  • 505 HTTP version Not Supported: 请求的HTTP协议版本不支持
  • 507 Insufficient Storage:服务器没有足够的空间处理请求————存在安全错误
  • 508 Loop Detected:访问资源是检测到循环
  • 511 Network Authentication Required:代理服务器发现客户端需要进行身份验证才能获取网络访问权限

*(header-field CRLF):表示0个或多个以CRFL为结尾的http头部

header-field = field-name":"OWS field-value OWS 表示由一个头部名称 中间分隔符号为:和头部的值构成

OWS = *(SP / HTAB ) : 表示由零个或者多个空格或者横向制表符构成

field-name = token

field-value = *(field-content/obs-fold)

后续介绍field-name/value

CRLF:空行

message-body: 表示由二进制的包传递的

利用telnet 工具查看

telnet www.taohui.pub 80

对比上面发现发现

请求构成

GET SP request-target SP HTTP/1.1 CRLF

符合请求头的格式

Host : www.xxx.com

表示的就是header-field : field-value

响应构成

上面一大串就是status-line

分隔开的单独的CRLF(空行,表示从这里开始这一行就没有了)

最后的那一段就是message-body

网络为什么要分层

OSI 概念模型

  • 应用层:解决业务问题–七层设备nginx等
  • 表示层:把网络中的消息转化成为应用层的东西(TLS/LLS加密)
  • 会话层:建立关系连接/握手————概念层
  • 传输层:解决进程与进程的关系,TCP协议等–四层设备
  • 网络层:确保在广域网中从一个ip发送到另一个ip上–三层设备
  • 数据链路层:利用mac地址连接到局域网的交换机的–二层设备
  • 物理层:物理介质

分层的好处是:每一层只需要关注自己这一层的东西(封装)不需要关心其他层做了什么。这样技术迭代的时候就不用担心兼容问题。

坏处:因为分层之间需要数据处理,就需要更长的时间影响了效率。

每一层的详细处理:

架构风格

1.数据流风格

优点:简单性、可进化性、可扩展性、可配置性、可重用性

管道与过滤器:每个Filter都有输入端和输出,只能从输入端读取数据,处理后再从输出端输出数据

统一接口的管道与过滤器:在PF上增加了统一接口的约束,所有的Filter过滤器必须具有同样的接口

2.复制风格

优点:用户可察觉的性能、可伸缩性、网络效率、可靠性

复制仓库(RR):多个进程提供相同的服务,通过反向代理对外提供集中服务

缓存:RR的变体,通过复制请求的结果,为后续请求服用

3.分层风格

优点:简单性、可进化性、可伸缩性

客户端服务器(CS):由客户端触发请求,服务端监听到请求后响应,客户端一直等待收到响应后,会话结束

分层系统(LS):每一层为其上的层服务,并使用在其下的层所提供的服务,如:TCP/IP

分层客户端服务器(LCS):LS+CS,如正向代理/反向代理,从空间上分为外部层与内部层

无状态、客户端服务器(CSS):基于CS、服务器不允许有session state会话状态

缓存、无状态、客户端服务器(C$SS):提升性能

4.移动代码风格

优点:可扩展性、网络效率

虚拟机(VM):分离指令与实现

远程求值(REV):基于CS的VM,将代码发送至服务器执行

按需代码(COD):服务器在响应发回处理代码,在客户端执行

5.点对点风格

优点:可进化性、可重用性、可拓展性、可配置性

EBI:基于事件集成系统

使用Chrome抓包

控制器:控制面板的外观与功能。

过滤器:过滤请求列表中显示的资源

概览:显示HTTP请求、响应的时间轴

请求列表:默认时间排序,可选择显示列

概要:请求总数、总数据量、总花费时间等

浏览器的加载过程

  1. 解析HTML结构
  2. 加载外部脚本和样式表文件
  3. 解析并执行脚本代码//部分脚本会阻塞页面的加载
  4. DOM树构建完成//DOMContentLoaded事件
  5. 加载图片等外部文件
  6. 页面加载完毕//load事件

请求时间详细分布:

  • Queueing:浏览器在排队
  • Stalled:请求可能会因Queueing中描述的任何原因停止
  • DNS Lookup:浏览器正在解析请求的IP地址
  • Proxy Negotiation:浏览器正在与代理服务器协商请求
  • Request sent :正在发送请求
  • ServiceWorker Preparation:浏览器正在启动Service Worker
  • Request to ServiceWork:正在将请求发送到Service Workder
  • Waiting(TTFB):将浏览器正在等待响应的第一个字节
  • Content Download:浏览器正在接受响应
  • Receiving Push:浏览器正在通过HTTP/2服务器推送接受此响应数据
  • Reading Push:浏览器正在读取之前的本地数据

URI

定义:

Uniform Resource Identifier 统一资源标识符

组成:

scheme, user information, host, port(HTTP默认43), path, query,fragment(分段)

用元语表示URI:

URI= scheme “:” hire-pary[“?“query][”#“fragment]

解释:

scheme=ALPHA*(ALPHA/DIGIT/”+”/“-”/“.”)

如:https,http,ftp,mailto,file,telnet等

ALPHA表示字母

DIGIT表示数字

hire-pary=“//” authority path-abempty / path-absolute /path-rootless /path-empty

authority=[ userinfo"@“]host[”:" port]————用户信息@域名:端口

userinfo=*(unreserved /pct-encoded /sub-delims/“:”)

host=IP-literal/ipv4address/reg-name

port=*DIGIT

query=*(pchar/“//”?“)————以”?"开头的可选项

fragment=*(pchar/“/”/“?”)————以"#"开头的可选项

相对URI:去除绝对路径只留下/html/rfc7231?test=1#page-7

学习来源:极客时间

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号