HTTP 详解

本文深入探讨HTTP协议的工作原理,包括其作为超媒体传输协议的角色、MIME类型及其在客户端-服务器模型中的作用。此外,还详细介绍了HTTP缓存机制,如何利用缓存规则提高网站性能,以及HTTP/2.0相对于HTTP/1.x的主要改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP的定义


超文本传输​​协议(HTTP)  是 用于传输超媒体文档(如HTML的 应用层协议。它专为Web浏览器和Web服务器之间的通信而设计,但也可用于其他目的。HTTP遵循传统的 客户端 - 服务器模型,客户端打开连接以发出请求,然后等待它收到响应。HTTP是 无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于TCP / IP层,但它可以在任何可靠的 传输层上使用 ; 也就是说,一种不会无声地丢失消息的协议

MIME 类型是一种标准化的方式来指示文件的性质和格式


语法构成:

type / subtype 类型 / 子类型

Type 类型描述实例
text表示文本解析,一般用来给浏览器引擎解析运行text/plaintext/htmltext/csstext/javascript
image代表任何类型的图像image/gifimage/pngimage/jpegimage/bmp,image/webpimage/x-iconimage/vnd.microsoft.icon
audio表示任何类型的音频文件audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video表示任何类型的视频文件video/webm, video/ogg
application表示任何类型的二进制数据。表示文件类型application/javascriptapplication/octet-streamapplication/pkcs12application/vnd.mspowerpointapplication/xhtml+xmlapplication/xmlapplication/pdf

其他类型 

类型描述
multipart/form-data用于上传文件与表单数据
application/x-www-from-urlencoded会将表单内的数据转换为键值对,比如,name=java&age = 23 ajax POST 默认提交方式

http1.x 与 http2.x 的主要区别

  • 它是一种多路复用协议。可以通过同一连接处理并行请求,删除HTTP / 1.x协议的顺序和阻塞约束
  • HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快,支持数据压缩

CORS 


跨源资源共享(CORS)是一种机制,跨域CORS 请求时如post,put 等都会产生预检

什么“预检”意味着:在浏览器尝试POST问题中的代码之前,它将首先向OPTIONS服务器发送请求 - 以确定服务器是否选择接收POST包含AuthorizationContent-Type: application/json标题的跨源

允许哪些源有可访问该资源权限:

Access-Control-Allow-Origin: <origin> | *
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header

表示预检请求多久被缓存 

Access-Control-Max-Age: <delta-seconds>

表示访问资源时允许的一种或多种方法 

Access-Control-Allow-Methods: <method>[, <method>]*

Access-Control-Allow-Methods: ['GET', 'POST', 'DELETE']

 HTTP的缓存


 缓存是一种存储给定资源副本并在请求时提供服务的技术。当Web缓存在其存储中具有请求的资源时,它会拦截该请求并返回其副本,而不是从原始服务器重新下载。这实现了几个目标:它减轻了不需要为所有客户端本身提供服务的服务器的负载,并且通过更靠近客户端来提高性能,即,传输资源所需的时间更少。对于网站而言,它是实现高性能的主要组成部分。另一方面,它必须正确配置,因为并非所有资源都永远保持相同:重要的是仅在资源更改之前缓存资源,而不是更长时间

缓存规则 


Cache request directives 

请求的指令

只有存在304状态的时候请求会带上此标头

If-Modified-Since:请求的HTTP标头发出请求的条件,请求修改的日期。对应response的Last-Modified

If-None-Match:请求的HTTP标头发出请求的条件,请求修改的日期。对应response的ETag

相匹配记标识读取本地资源 

缓存请求指令

Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-Control: no-cache 
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: only-if-cached //表示不检索新数据。在这种情况下,服务器希望客户端只获得一次响应然后缓存。从此刻起,客户端应继续发布缓存副本,并避免联系源服务器以查看是否存在较新的副本。

Cache response directives 

响应返回的指令

ETag:HTTP响应报头为资源的特定版本的标识符

Last-Modified:响应HTTP报头包含在其原始服务器认为该资源的最后修改日期和时间

缓存响应指令

Cache-Control: must-revalidate
Cache-Control: no-cache //缓存对比
Cache-Control: no-store // 强制不缓存每次都是重新读取
Cache-Control: no-transform
Cache-Control: public //表示任何缓存都可以缓存响应。
Cache-Control: private //表示响应仅供单个用户使用,不得由共享缓存存储。私有缓存可以存储响应
Cache-Control: proxy-revalidate
Cache-Control: max-age=<seconds> //缓存的最长时间
Cache-Control: s-maxage=<seconds>

 

http 请求状态:

//对比缓存
status code : 304 Not Modified

//在有效的时间内读取本地磁盘,以存在就直接读取本地
status code : 200 from disk cache

匹配:发起

主要查看缓存规则:

在请求的headers 头里面:

 

 

 

客户端发送Cache-Control 告知是否需要缓存

Cache-Control: no-store

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值