HTTP · ABNF · 请求头 · 响应头 · 状态码 · form提交 · 跨域 · Cookie · Session
提示:本系列文章已经修订完毕,修改了纰漏,优化了文章结构。为了获得更好的阅读体验,请查看以下新专栏或新站点
CSDN 新专栏:
https://blog.csdn.net/keeppromise/category_12489629.html
我的个人博客(Github Page):
https://blog.lens-shrine.top/categories/学习记录:网络协议/
HTTP
版本
标准
报文格式
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(新)
核心规则
报文格式
整体
request-line、status-line
header-filed、message-body
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报文与服务器交互
- 可以更清晰、直观地看到请求报文、响应报文的内容
- 可以检验请求报文格式的正确与否
请求方法
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
PUT:用于对已存在的资源进行整体覆盖
PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)
DELETE:用于删除指定的资源
TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断
CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)
- 可以用来访问采用了 SSL (HTTPS) 协议的站点
头部字段(Header Field)
请求头字段
响应头字段
状态码(Status Code)
在 RFC 2616 10.Status Code Definitions 规范中定义
状态码指示HTTP请求是否已成功完成
常见状态码
form提交
常用属性
multipart/form-data
参考 RFC 1521
同源策略
浏览器有个同源策略 (Same-Origin Policy)
它规定了:默认情况下,AJAX请求只能发给同源的URL
同源是指3个相同:协议、域名(IP)、端口
img、script、link、iframe、video、audio 等标签不受同源策略的约束
跨域资源共享
Cookie、Session
Cookie
客户端(浏览器)存储的一些数据,存储到本地磁盘(硬盘)
服务器可以返回Cookie交给客户端去存储
Session
服务器存储的一些数据,存储到内存中