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