新增加的HTTP状态码 -- 103

13 篇文章 0 订阅
5 篇文章 0 订阅

IETF公布了新的HTTP状态码-103, 总结一下就是提前预加载(css、js)文档,提升用户的访问速度。

Summary: a new status code that lets the server send headers early, before the main headers. This helps with optimisations like preloading. Example from the document:

     HTTP/1.1 103 Early Hints
     Link: </main.css>; rel=preload; as=style

     HTTP/1.1 103 Early Hints
     Link: </style.css>; rel=preload; as=style
     Link: </script.js>; rel=preload; as=script

     HTTP/1.1 200 OK
     Date: Fri, 26 May 2017 10:02:11 GMT
     Content-Length: 1234
     Content-Type: text/html; charset=utf-8
     Link: </main.css>; rel=preload; as=style
     Link: </newstyle.css>; rel=preload; as=style
     Link: </script.js>; rel=preload; as=script

The client can start preloading the CSS and JavaScript before the main headers arrive. This is a nice optimisation.
There are various security risks with sending multiple headers to non-conforming clients hence: “Therefore, a server might refrain from sending Early Hints over HTTP/1.1 unless the client is known to handle informational responses correctly.”

在头部信息到达之前,用户可以开始预加载CSS和JavaScript文件,这是一个很好的优化。
因此,向不合格的客户机发送多个标头存在各种各样的安全风险:“因此,如果客户不知道正确处理信息响应,服务器可能会避免发送HTTP / 1.1的早期提示。”

本段英文引入地址

以下是一个使用STM8F103解码NEC红外信号的示例程序: ```c #include <iostm8.h> // 红外接收引脚 #define IR_PIN GPIO_PIN_3 // 定时器溢出时间,单位为us #define TIMER_OVERFLOW_TIME 20000 // 红外解码状态 #define IR_IDLE 0 #define IR_START 1 #define IR_DATA 2 #define IR_REPEAT 3 // 红外解码缓存大小 #define IR_BUFFER_SIZE 32 // 红外解码缓存 volatile uint16_t irBuffer[IR_BUFFER_SIZE]; volatile uint8_t irIndex = 0; // 红外解码状态 volatile uint8_t irState = IR_IDLE; // 定时器计数值 volatile uint16_t timerCount = 0; // 初始化红外接收模块 void IR_Init() { // 设置输入引脚 GPIO_Init(IR_PIN, GPIO_MODE_IN_FL_IT); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY); // 初始化定时器 TIM2_TimeBaseInit(TIM2_PRESCALER_16, TIMER_OVERFLOW_TIME / 16); TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_Cmd(ENABLE); } // 处理红外信号 void IR_Handle() { uint8_t i; uint16_t data; // 检查是否接收到有效的红外信号 if (irState != IR_DATA || irIndex < 2) { return; } // 计算红外数据 data = 0; for (i = 0; i < 16; i++) { data <<= 1; if (irBuffer[i + 2] > 1000) { data |= 0x0001; } } // 处理红外数据 switch (data) { case 0x00FF: // NEC重复码 irState = IR_REPEAT; break; case 0x807F: // NEC开头 irIndex = 0; irState = IR_START; break; default: // NEC数据 if (irIndex < IR_BUFFER_SIZE) { irBuffer[irIndex++] = data; } irState = IR_DATA; break; } } // 定时器中断处理函数 void TIM2_UPD_OVF_IRQHandler(void) { if (TIM2_GetITStatus(TIM2_IT_UPDATE) == SET) { // 增加计数值 timerCount += TIMER_OVERFLOW_TIME; // 处理红外信号 IR_Handle(); // 复位计数值 timerCount = 0; TIM2_ClearITPendingBit(TIM2_IT_UPDATE); } } // 外部中断处理函数 void EXTI_PORTB_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_IT_PORTB) == SET) { switch (irState) { case IR_IDLE: // 等待信号 break; case IR_START: // 接收到开头 timerCount = 0; irState = IR_DATA; break; case IR_DATA: // 接收到数据 if (irIndex >= IR_BUFFER_SIZE) { irState = IR_IDLE; } break; case IR_REPEAT: // 接收到重复码 irState = IR_IDLE; break; } EXTI_ClearITPendingBit(EXTI_IT_PORTB); } } int main() { CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_HSICmd(DISABLE); CLK_ClockSecuritySystemEnable(); IR_Init(); enableInterrupts(); while (1) { // 等待红外信号处理 } } ``` 该程序将红外信号解码为16位数据,并根据数据的类型进行相应的处理。使用该程序需要修改红外接收引脚、定时器溢出时间和红外解码协议等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值