小编Eri*_*ban的帖子

HTTP ETag 和 HTTP 重定向

我有一个网络服务器,它发出ETag响应的If-None-Match标头并检查来自客户端的标头(如果存在)。在这种情况下,客户端不是 Web 浏览器,而是 go 内置net/http http.Client类型的扩展。

这是我的代码

package util

import "net/http"
import "net/url"

type HttpClient struct {
    http.Client
    etags map[url.URL]string
}

func (hc *HttpClient) Do(req *http.Request) (*http.Response, error) {
    const ETAG_SERVER_HEADER = "ETag"
    const ETAG_CLIENT_HEADER = "If-None-Match"

    //Do not attempt to use ETags on non-GET requests
    if req.Method != "GET" {
        return hc.Client.Do(req)
    }

    //Check for an existing etag
    etag, ok := hc.etags[*req.URL]
    if ok { //If an ETag is present, send it along …
Run Code Online (Sandbox Code Playgroud)

etag http go

4
推荐指数
1
解决办法
3839
查看次数

睡觉和打印没有换行?

如果我运行此代码:

for x in range(10):
    time.sleep(1)
    print("a")
Run Code Online (Sandbox Code Playgroud)

它会做到它应该做的事情.但如果我运行这个:

for x in range(10):
    time.sleep(1)
    print("a", end="")
Run Code Online (Sandbox Code Playgroud)

它会等待整整10秒,然后打印10 a秒.

我怎么能阻止这个?

python

3
推荐指数
1
解决办法
411
查看次数

为什么 avr-gcc 会在函数的开头添加“push r1”指令?

我正在查看编译后编写的一些代码的生成程序集avr-gcc。具体来说,我是用-Os选项编译的。总的来说,输出是我所期望的,但我无法理解的是push r1正在发出的指令。更奇怪的是,函数末尾的补充指令是pop r0. 所以 的值r1正在被保存但它似乎被恢复到r0

根据此处的文档:

https://gcc.gnu.org/wiki/avr-gcc#Register_Layout

寄存器r1始终包含零,但函数可以在恢复寄存器时使用该寄存器。恢复它将是ldi r1, 0x0,不需要推动,从我的理解中弹出。

下面是编译版本的 C 代码和反汇编示例。它是用-Os. 它有点长,但我必须制作一个大函数才能让编译器发出它。

代码:

void mqtt_create_connect(mqtt_parser *p, mqtt_connect_config *cfg){
  uint8_t idx = 0;
  p->buffer[idx++] = MQTT_CTRL_CONNECT << 4;
  idx++; // skip remaining length for now
  p->buffer[idx++] = 0x0;
  p->buffer[idx++] = 0x4;
  p->buffer[idx++] = 'M';
  p->buffer[idx++] = 'Q';
  p->buffer[idx++] = 'T';
  p->buffer[idx++] = 'T';
  p->buffer[idx++] = 0x04; // protocol level 3.1.1
  p->buffer[idx++] = …
Run Code Online (Sandbox Code Playgroud)

assembly avr avr-gcc

2
推荐指数
1
解决办法
353
查看次数

标签 统计

assembly ×1

avr ×1

avr-gcc ×1

etag ×1

go ×1

http ×1

python ×1