使用S3生成的预签名URL,python可以使请求正常进行,但是,只要在正文中指定了数据,javascript抓取和XMLHttpRequest都会返回403禁止的错误。它们都在本地调用。
相关的中篇文章,获取文档,XMLHttpRequest文档,请求文档。
python请求:
req = requests.put(url, data='placeholder')
JavaScript:
fetch(url, {
method: 'PUT',
body: 'placeholder'
}
当未指定正文时,JavaScript返回200,但是在指定正文时返回403。无论是否包含data参数,Python都会返回状态200。
答案 0 :(得分:0)
基本上,问题在于Javascript提取会自动生成标头“ Content-Type”。在该URL前面加标签的API网关/ Lambda不会使用“ Content-Type”标头,因此JavaScript会出错,而Python不会。我通过指定Lambda允许的Content-Type来解决它,并在JavaScript方面对其进行了硬编码。