#1 - 2018-6-2 20:39
upsuper
https://api.bgm.tv 上有一些非常方便的获取数据用的API对组件的开发非常有帮助。

通过API调用,既省去了组件脚本加载和解析页面的麻烦,又减小了服务器的处理负担。

然而现在并不能在组件中向API发送请求,因为存在跨域。

因此希望能够至少为API服务器增加如下CORS头:
Access-Control-Allow-Origin: https://bgm.tv, http://bgm.tv, http://bangumi.tv, http://chii.in

以方便在组件的实现中使用API来获取数据。
#2 - 2018-6-2 20:44
(19914)
+10086 急需 (bgm38)
#3 - 2018-6-5 14:40
(Awesome!)
好了,试试看
#3-1 - 2018-6-5 14:53
upsuper
看起来可以了,非常感谢!
不过有一个小问题,似乎Access-Control-Allow-Origin的值是根据请求的referrer或者origin来决定的?如果这样的话,可能需要将相应的头加入vary头,不然的话在一个域名下请求后到另一个域名下再请求同样的内容会被拒绝。
因为API在HTTPS上,所以唯一可能影响的情况应该也就是一个人通过多个不同域名登入然后请求同一个网址了。大概大多数时候不会成为一个问题。
#3-2 - 2018-6-5 15:53
Sai🖖
upsuper 说: 看起来可以了,非常感谢!
不过有一个小问题,似乎Access-Control-Allow-Origin的值是根据请求的referrer或者origin来决定的?如果这样的话,可能需要将相应的头加入va...
加上了
#3-3 - 2018-6-5 18:14
upsuper
Sai 说: 加上了
不对啊……vary没加上,Access-Control-Allow-Origin也没了啊(
#3-4 - 2018-6-5 18:31
Sai🖖
upsuper 说: 不对啊……vary没加上,Access-Control-Allow-Origin也没了啊(
我这有哇
Response
:status: 200
Content-Type: application/json; charset=utf-8
Pragma: no-cache
Date: Tue, 05 Jun 2018 10:30:11 GMT
Cache-Control: no-cache, must-revalidate
Server: cloudflare
Access-Control-Allow-Origin: https://bgm.tv
Content-Encoding: gzip
Vary: Accept-Encoding
cf-ray: 4261f65fbb2ba960-SIN
#3-5 - 2018-6-5 19:21
upsuper
Sai 说: 我这有哇
Response
:status: 200
Content-Type: application/json; charset=utf-8
Pragma: no-cache
Date: Tue,...
现在又有了……可能跟我之前用GM来调试有关系,缓存了一些没有orign的请求……
所以Vary还是没有加上的样子?
#3-6 - 2018-6-5 19:29
Sai🖖
upsuper 说: 现在又有了……可能跟我之前用GM来调试有关系,缓存了一些没有orign的请求……
所以Vary还是没有加上的样子?
有文档么?不就是 Vary: Accept-Encoding 这个?
#3-7 - 2018-6-5 19:59
upsuper
Sai 说: 有文档么?不就是 Vary: Accept-Encoding 这个?
不不不,我的意思是说,浏览器或者中间代理节点可能对请求返回服务器之前的回复。像这里这样根据请求头里的Origin或者Referer来决定Access-Control-Allow-Origin的值的情况,如果通过一个域名请求过,在通过另一个域名请求的时候就可能因为使用缓存数据的关系,出现Access-Control-Allow-Origin与所在域名不匹配的情况导致CORS失败。

为了避免这种情况发生,服务器返回的时候应该说明,返回的结果会根据Origin/Referer发生变化,如果请求头中相应字段的值不同,需要重新向服务器发送请求,而不能使用缓存的结果。也就是说,Vary应该加上Origin或者Referer(取决于具体你使用的方式),比如说变成
Vary: Accept-Encoding, Origin


文档可以参考 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary
#3-8 - 2018-6-6 11:46
Sai🖖
upsuper 说: 不不不,我的意思是说,浏览器或者中间代理节点可能对请求返回服务器之前的回复。像这里这样根据请求头里的Origin或者Referer来决定Access-Control-Allow-Origin的值的情况...
Response 里面 no-cache 也会被缓存么?
#3-9 - 2018-6-6 13:29
upsuper
Sai 说: Response 里面 no-cache 也会被缓存么?
那应该就不会了,但你现在的response里面是 cache-control: max-age=3600 允许缓存一个小时呢
#3-10 - 2018-6-8 04:39
本集美食
upsuper 说: 那应该就不会了,但你现在的response里面是 cache-control: max-age=3600 允许缓存一个小时呢
最后老板只允许了一个域名吗?
https://bgm.tv/*
(bgm38) 中文化脚本在其他域名不管用
#3-11 - 2018-6-8 06:16
upsuper
本集美食 说: 最后老板只允许了一个域名吗?https://bgm.tv/* 中文化脚本在其他域名不管用
如果你在多个域名用的话会因为上面说的原因导致问题……不过我刚刚想到或许我可以在脚本里给请求加上后缀来绕过这个问题
#3-12 - 2018-6-8 06:36
铃猫
upsuper 说: 如果你在多个域名用的话会因为上面说的原因导致问题……不过我刚刚想到或许我可以在脚本里给请求加上后缀来绕过这个问题
或者你也可以使用我的反代 https://mirror.bgm.rin.cat/api/ (bgm38)
#3-13 - 2018-6-8 06:52
upsuper
本集美食 说: 最后老板只允许了一个域名吗?https://bgm.tv/* 中文化脚本在其他域名不管用
啊等等,这是我的错……忘记把其他域名加进去了(
#3-14 - 2018-6-23 09:05
Genius🌟小乖💯
MagicFish1990一边吃草一边 说: 或者你也可以使用我的反代 https://mirror.bgm.rin.cat/api/
How to use your RPed API? https://mirror.bgm.rin.cat/api/user/sai/ returns nothing.
#3-15 - 2018-6-23 11:19
铃猫
Genius、小乖 说: How to use your RPed API? https://mirror.bgm.rin.cat/api/user/sai/ returns nothing.
修好了(bgm38)
#3-16 - 2018-6-23 12:49
Genius🌟小乖💯
MagicFish1990一边吃草一边 说: 修好了
Thank you for your quick fix. BTW, how long do you cache an API request?
#3-17 - 2018-6-23 13:18
铃猫
Genius、小乖 说: Thank you for your quick fix. BTW, how long do you cache an API request?
30min
#3-18 - 2018-11-22 10:30
Kei
upsuper 说: 看起来可以了,非常感谢!
不过有一个小问题,似乎Access-Control-Allow-Origin的值是根据请求的referrer或者origin来决定的?如果这样的话,可能需要将相应的头加入va...
今天测试似乎没有看到Access-Control-Allow-Origin头 大佬能帮忙再看一下吗?
#4 - 2018-6-21 12:57
(天生万物以养人,人无一物以报天)
想问一下 最后api允许的域名只有一楼提到的4个bgm自身的域名吗…
#5 - 2018-7-3 16:39
(天生万物以养人,人无一物以报天)
嘛- -
建议也允许一下文档页面`https://bangumi.github.io/api/`的跨域请求
这个文档本身是可以直接尝试调用api的,但是被跨域挡住了..