sjtug / mirror-requests

新镜像请求 & BUG 汇报
https://mirrors.sjtug.sjtu.edu.cn
49 stars 2 forks source link

crates.io反代没有正确处理302请求 #52

Closed DCjanus closed 5 years ago

DCjanus commented 5 years ago

类别:Bug反馈

目前上交镜像为Rust官方构建工具Cargo的包管理的索引和下载都提供了镜像服务,非常感谢上交同学的无私奉献。

但目前相关镜像配置存在一定的问题,具体细节是:

Cargo通过读取一个Git repo作为所有包的索引,同时这个Git repo的根目录存在一个名为config,json的文件,目前上交对这个Git repo的代理镜像是git/crates.io-index,git clone到本地后查看根目录config.json,内容为

{
  "dl": "https://crates-io.mirrors.sjtug.sjtu.edu.cn/api/v1/crates",
  "api": "https://crates.io/"
}

以下载名为libc的依赖包0.1.0版本为例,使用上面的配置,Cargo会访问https://crates-io.mirrors.sjtug.sjtu.edu.cn/api/v1/crates/libc/0.1.0/download用于下载依赖包,也就是目前名为crates.io的镜像。猜测上交镜像使用反向代理实现的crates.io这个镜像,也就是https://crates-io.mirrors.sjtug.sjtu.edu.cn/api/v1/crates/libc/0.1.0/download会被反向代理到https://crates-io/api/v1/crates/libc/0.1.0/download,然而使用CURL访问这个URL,结果如下:

curl -i https://crates-io.mirrors.sjtug.sjtu.edu.cn/api/v1/crates/libc/0.1.0/download                                                                                                             

HTTP/2 302 
content-security-policy: default-src 'self'; connect-src 'self' https://docs.rs https://static.crates.io; script-src 'self' 'unsafe-eval' https://www.google.com; style-src 'self' https://www.google.com https://ajax.googleapis.com; img-src *; object-src 'none'
date: Wed, 08 May 2019 15:43:35 GMT
location: https://static.crates.io/crates/libc/libc-0.1.0.crate
server: Caddy
server: nginx
set-cookie: cargo_session=sJIiNcfM9yvCHoGNENQaO8JrPoTF1c7xuZ6xe/LTieY=; HttpOnly; Secure; Path=/
strict-transport-security: max-age=31536000
vary: Accept, Accept-Encoding, Cookie
via: 1.1 vegur
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
content-length: 0

即该次HTTP请求被302重定向到了https://static.crates.io/crates/libc/libc-0.1.0.crate,随后Cargo从这个网站完成实际的依赖包下载,即事实上没有起到镜像的作用。

解决方案:

git/crates.io-index这个镜像内名为config.json的文件内容改成

{
  "dl": "https://mirrors.sjtug.sjtu.edu.cn/static.crates.io/crates/{crate}/{crate}-{version}.crate",
  "api": "https://crates.io/"
}
skyzh commented 5 years ago

感谢你的反馈!关于 302 在反代和部分文件浏览模式中的跳转缺 prefix 问题,caddy 上游一直没有修。我们会尽快合掉 https://github.com/sjtug/mirror-docker/pull/27

htfy96 commented 5 years ago

感谢贡献。请问 static.crates.io/crates/{crate}/{crate}-{version}.crate这个地址是否稳定?

DCjanus commented 5 years ago

请问 static.crates.io/crates/{crate}/{crate}-{version}.crate这个地址是否稳定?

目前来说没有官方的文档规定这件事,但是crates.io本身也没有明确的文档说明详细的机制,~所以只能暂时先用了,出问题再修复~

至少这个地址已经稳定两三年了,目前来看也没有修改的必要。