小编yoo*_*nes的帖子

getline()带有文件描述符而不是文件指针

据我所知,没有getline()与文件描述符相同的libc ,而不是使用FILE *.

是否有(技术)原因?

c posix libc getline

7
推荐指数
1
解决办法
5184
查看次数

URI 中的 JWT 是不好的做法吗?

我有一个存储在 Redis 中的令牌 (JWT) 后备列表,并希望让我网站的用户能够以 RESTful 方式将他们的令牌列入黑名单。

我可以:

  1. /sessions/<token>使用 DELETE 方法构建路由
  2. /sessions/使用 DELETE 方法和请求正文中发送的令牌构建路由。

第一个解决方案很简单,但令牌存储在服务器的日志和用户浏览器的历史记录中。

第二种解决方案似乎更好,但我不确定发送带有正文的 DELETE 请求是否违反了 HTTP RFC 的幂等性原则。

在这种情况下,最佳做法是什么?

http jwt

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

WebAssembly.instantiateStreaming 需要一个可选参数

Uncaught (in promise) TypeError: second argument must be an object当我运行以下代码时出现错误:

async function loadWasm(url) {
  const fetchPromise = fetch(url)
  const { module, instance } = await WebAssembly.instantiateStreaming(fetchPromise)
  // [...]
}
loadWasm('http://localhost:3000/path/to/file.wasm')
Run Code Online (Sandbox Code Playgroud)

查看文档,它说WebAssembly.instantiateStreaming( importObject) 的第二个参数是可选的,所以我不明白为什么浏览器仍然强制它?

我已经在 Firefox 78.7.0esr(64 位)和 Chrome 88.0.4324.96(官方版本)(64 位)中对此进行了测试。如果它很重要,代码会在 ruby​​ on Rails 6.1 应用程序中使用 webpack 5 进行转译。

更新:

在 mdn 的 github 存储库上提出了一个问题,认为文档可能需要更新。到目前为止,文档似乎很好,所以这可能是一个实现问题。有待证实。

更新:

这既不是实施问题,也不是文档错误。我在下面的答案中发表了关于这个问题的结论。

javascript parameters webassembly

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

为什么write()不应该返回0呢?

我遇到过write()在远程关闭的客户端上使用服务器端不返回0的情况.

根据男子2 write:

成功时,返回写入的字节数(零表示没有写入).出错时,返回-1,并正确设置errno.

根据我的理解:当在远程关闭的套接字上使用read/ 时write,第一次尝试应该失败(因此返回0),并且下一次尝试应该触发断开的管道.但事实并非如此.write()就好像它在第一次尝试时成功发送数据一样,然后在下次尝试时我得到一个破损的管道.

我的问题是为什么?

我知道如何妥善处理破损的管道,这不是问题.我只是想了解为什么在这种情况下write不会返回0.

下面是我写的服务器代码.在客户端,我尝试了一个基本的C客户端(使用close()和shutdown()来关闭套接字)和netcat.这三个人给了我相同的结果.


#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

#define MY_STR "hello world!"

int start_server(int port)
{
  int fd;
  struct sockaddr_in sin;

  fd = socket(AF_INET, SOCK_STREAM, 0);
  if (fd == -1)
    {
      perror(NULL);
      return (-1);
    }
  memset(&sin, 0, sizeof(struct sockaddr_in));
  sin.sin_addr.s_addr = htonl(INADDR_ANY);
  sin.sin_family = AF_INET;
  sin.sin_port = htons(port); …
Run Code Online (Sandbox Code Playgroud)

c sockets linux broken-pipe

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

标签 统计

c ×2

broken-pipe ×1

getline ×1

http ×1

javascript ×1

jwt ×1

libc ×1

linux ×1

parameters ×1

posix ×1

sockets ×1

webassembly ×1