求助~~~问一个 CORS 协议的问题

2018-01-17 15:49:14 +08:00
 mskf

对于 HTTPS 请求,浏览器中会对不属于 Allow-Origin 的 CORS 请求进行拦截,但是使用诸如 POSTMAN 这样的工具去模仿浏览器的请求,是怎样进行请求和接受响应的

1799 次点击
所在节点    问与答
6 条回复
mskf
2018-01-17 16:03:56 +08:00
PS:我是在 POSTMAN 里尝试请求 b 站的视频地址时发现这个问题的,预检请求返回值是正常的( 200 ),但是视频请求的返回结果是 error 473
p2pCoder
2018-01-17 16:23:31 +08:00
如果要准确理解,建议你 抓包,然后对比一下,就可以知道了
浏览器进行请求的时候 header 能设置的参数有限 origin refer 这些参数是没法设置的,而 postman 以及很多爬虫库,对于 http 请求的所有 header 参数都可以设置
mskf
2018-01-17 16:35:58 +08:00
@p2pCoder 那么直接通过浏览器导入的请求,和浏览器中的返回结果不一样的原因可能是什么(假如不包含 cookies 和时间片等验证)
p2pCoder
2018-01-17 16:43:35 +08:00
@mskf 按理说是完全一样的,但是很多请求都有 前置的一些验证之类的,有些是 js 动态生成,有些是请求后端生成
有些参数,只能用一次,一次之后就失效了,最好,看下请求的每个参数的产生过程
gongpeione
2018-01-17 16:47:36 +08:00
1. 不只是 HTTPS 才有跨域拦截问题。
2. 跨域请求被拦截的原因是浏览器遵从同源策略( Same-origin policy ),所以大多数的跨域请求其实都是成功的,只是内容被浏览器拦了下来,诸如 Postman 这样的客户端软件或是爬虫是不需要遵从这个的。
3. 这些工具做的是根据你的配置项添加 header、body 等,生成对应的请求。
4. 473 错误和应该和跨域无关。
mskf
2018-01-17 17:22:21 +08:00
@gongpeione
@p2pCoder

ok,我看了下请求参数,确实有可能存在时间片的加盐 hash,不过很奇怪的是,在当前页面中直接插入 GET 请求地址对应的 A 标签,就可以获取正确的相应结果了,待会抓包试试看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/423659

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX