08. HTTP · ABNF · 请求头 · 响应头 · 状态码 · form提交 · 跨域 · Cookie · Session

网络协议从入门到底层原理


提示:本系列文章已经修订完毕,修改了纰漏,优化了文章结构。为了获得更好的阅读体验,请查看以下新专栏或新站点

CSDN 新专栏:
https://blog.csdn.net/keeppromise/category_12489629.html

我的个人博客(Github Page):
https://blog.lens-shrine.top/categories/学习记录:网络协议/

HTTP

图06

版本

图07

标准

图08

报文格式

图09

ABNF

ABNF(Augmented BNF)
是BNF(Backus-Naur Form,译为:巴科斯-瑙尔范式)的修改、增强版
在 RFC 5234 中表明:ABNF用作 internet 中通信协议的定义语言
ABNF是最严谨的HTTP报文格式描述形式,脱离ABNF谈论HTTP报文格式,往往都是不严谨的

关于HTTP报文格式的定义:
RFC 2616 4.HTTP Message(旧)
RFC 7230 3.Message Format(新)

核心规则

图01

报文格式

整体

图02

request-line、status-line

图03

header-filed、message-body

图04

URL编码

URL中一旦出现了一些特殊字符(比如中文、空格),需要进行编码
在浏览器地址栏输入URL时,是采用 UTF-8 进行编码。

比如:
编码前:https://www.baidu.com/s?wd=百度
编码后:https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6

Xshell + telnet

安装一个 Xshell(安全终端模拟软件),在 Xshell 中使用 telnet

  • 可以直接面向HTTP报文与服务器交互
  • 可以更清晰、直观地看到请求报文、响应报文的内容
  • 可以检验请求报文格式的正确与否

图05
图06

请求方法

RFC 7231, section 4: Request methods:描述了 8 种请求方法:
GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE

RFC 5789, section 2: Patch method:描述了 PATCH 方法


GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)

POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)

HEAD:请求得到与GET请求相同的响应,但没有响应体

  • 使用场景举例:在下载一个大文件前,先获取其大小(HEAD),再决定是否要下载(GET)。以此可以节约带宽资源。

OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法

  • OPTIONS * HTTP/1.1

图07

PUT:用于对已存在的资源进行整体覆盖

PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)

DELETE:用于删除指定的资源

TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断

CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)

  • 可以用来访问采用了 SSL (HTTPS) 协议的站点

头部字段(Header Field)

图08

请求头字段

图09
图10
图11

响应头字段

图12
图13
图14

状态码(Status Code)

RFC 2616 10.Status Code Definitions 规范中定义

状态码指示HTTP请求是否已成功完成

图01

常见状态码

图02

图03

图04

form提交

常用属性

图05

multipart/form-data

参考 RFC 1521

图06

同源策略

浏览器有个同源策略 (Same-Origin Policy)
它规定了:默认情况下,AJAX请求只能发给同源的URL
同源是指3个相同:协议域名(IP)端口
图01
img、script、link、iframe、video、audio 等标签不受同源策略的约束

跨域资源共享

图02

Cookie、Session

Cookie

客户端(浏览器)存储的一些数据,存储到本地磁盘(硬盘)
服务器可以返回Cookie交给客户端去存储

图03

图04
图05
图06

Session

服务器存储的一些数据,存储到内存中

图07

总结

图08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值