linux http请求不成功是为啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux http请求不成功是为啥相关的知识,希望对你有一定的参考价值。

参考技术A 之前用GET方式一直不行,接口那边调出log看说是空指针,说我们有参数没传过来。我想可能和我传了多个参数有关。
于是我改用POST方式也就是curl -d就可以了。

为啥CORS从浏览器发送而不是从终端发送时会阻止我的Http请求

【中文标题】为啥CORS从浏览器发送而不是从终端发送时会阻止我的Http请求【英文标题】:Why does CORS block my Http request when sent from the browser but not from the terminal为什么CORS从浏览器发送而不是从终端发送时会阻止我的Http请求 【发布时间】:2021-07-23 14:32:08 【问题描述】:

我对 CORS 提供的安全性有点困惑。下面是两个几乎相同的 HTTP 请求,一个有效,一个无效,一个是通过 curl 另一个是浏览器中的 javascript。

终端

$ curl https://www.google.com/
--> Returns a page

浏览器:

// Open the console in the browser (or spin put localhost)
const xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.google.com");
xhr.send();
--> CORS Error

再试一次:

  const xhr = new XMLHttpRequest();
  xhr.open("GET", "https://www.google.com");
  xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
  xhr.setRequestHeader("Access-Control-Allow-Methods", 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
  xhr.setRequestHeader("Access-Control-Allow-Headers", 'Origin,Authorization,Content-Type,X-Auth-Token');
  xhr.setRequestHeader("Access-Control-Allow-Credentials", 'true') 
  
  xhr.send();
--> CORS Error still

所以我猜测 google.com 服务器已将其设置为仅接受来自 google 域的请求。但是,当我从不属于谷歌域的终端卷曲时,我会收到带有 HTML 等的 200 响应。

那么为什么服务器会响应我没有域的终端,而当我在浏览器中使用javascript时没有响应?

谢谢^.^

【问题讨论】:

How much research effort is expected of Stack Overflow users? “在 Stack Overflow 上提问应该是你寻找答案过程中的最后一步” 使用我的搜索引擎快速搜索“CORS”给出了我在第一个结果的第一段中给出答案。 【参考方案1】:

CORS 是浏览器提供的一项功能。 CORS 是一种机制,旨在允许代表您发出请求,同时阻止流氓 JS 发出的某些请求,并且在您向以下位置发出 HTTP 请求时触发:

    不同的域(例如,example.com 上的站点调用 api.com) 不同的子域(例如,example.com 上的站点调用 api.example.com) 不同的端口(例如,example.com 上的站点调用 example.com:3001) 不同的协议(例如,https://example.com 的站点调用 http://example.com)

请查看附件-https://medium.com/@baphemot/understanding-cors-18ad6b478e2b

【讨论】:

【参考方案2】:

CORS 是最终由您的浏览器实现的安全功能。这就是为什么您在从终端卷曲时永远不会看到 CORS 错误的原因。另见:this post from mozilla

上面写着:

跨域资源共享 (CORS (en-US)) 是一种机制,它使用额外的 HTTP 标头告诉浏览器让在一个源(域)上运行的 Web 应用程序有权访问来自服务器的选定资源不同的起源。

【讨论】:

以上是关于linux http请求不成功是为啥的主要内容,如果未能解决你的问题,请参考以下文章

为啥 HTTP 请求在 UTL_hhtp oracle 包上反复失败?

http中的put,delete等请求为啥不安全

electron打包后http请求为啥不存在跨域了

upload组件,上传时为啥有两次请求

对于一般不成功的请求(不是错误),适当的 HTTP 状态代码响应是啥?

为啥 Angular 6 不发送 HTTP Get/Post 请求?