首页 > 解决方案 > 使用“接受:应用程序/json”请求 JSON 文件,给出“资源无法显示”错误

问题描述

我正在尝试使用@actions/http-client从众所周知的端点(json.schemastore.org )获取 JSON 文件。该客户端出现错误,使用 cURL 尝试请求时出现相同错误:

$ curl --header "Accept: application/json" https://json.schemastore.org/eslintrc.json
The resource cannot be displayed because the file extension is not being accepted by your browser.

向请求添加Content-Type标头会使其成功并返回 JSON 文件,但前提是它位于Accept传递给 cURL 的列表中的标头之前(Accept: application/json;Content-Type: application/json导致上述相同的错误):

curl --header "Content-Type: application/json;Accept: application/json" https://json.schemastore.org/eslintrc.json

如果我省略--headercURL 的参数,请求也会成功:

curl https://json.schemastore.org/eslintrc.json

使用上述(无标头参数),cURL 正在发送此请求:

GET /eslintrc.json HTTP/1.1
Host: json.schemastore.org
User-Agent: curl/7.71.1
Accept: */*

json.schemastore.org使用上述 cURL 命令(无标头参数)收到的响应标头是:

HTTP/1.1 200 OK
Cache-Control: public,max-age=31536000
Content-Length: 47049
Content-Type: application/json; charset=utf-8
Last-Modified: Fri, 10 Sep 2021 17:59:28 GMT
Accept-Ranges: bytes
ETag: "1abc4d996da6d71:0"
Vary: Accept-Encoding, If-Modified-Since
Server: Microsoft-IIS/10.0
Content-Security-Policy: object-src 'none';
Arr-Disable-Session-Affinity: True
Access-Control-Allow-Origin: *
Date: Thu, 30 Sep 2021 02:06:18 GMT

响应的主体是 JSON 文档。

谁能帮我理解为什么只Accept: application/json在请求上使用标头不起作用?请求中没有正文,所以标题似乎没有Content-Type任何效果?为什么作为参数传递给 cURL 的Content-TypeandAccept标头的顺序会有什么不同呢?我在想也许这是我不理解的 IIS 的一些行为。

标签: jsoncurlcontent-typehttp-accept-language

解决方案


推荐阅读