likes
comments
collection
share

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

作者站长头像
站长
· 阅读数 4

背景:

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

对于这个问题,其实很简单,但是大家作为前端工程师,没有接触过后端,所以难免会对这个问题不太了解。

口说无凭,实践出真理。接下来,我们就对这个问题进行验证,有助于大家理解深刻。

前提:

前提一:拥有一个客户端项目。在此之前,我是作为一个前端工程师的身份给大家讲解的,所以你自己要有建立前端项目的能力。当然,你也可以直接拉取我的github

对于github拉取时网络超时问题,你可以通过修改host文件来解决。 找到host文件夹,用写字版打开,把ip复制粘贴到文件末尾,保存即可。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

C:\Windows\System32\drivers\etc\HOSTS


https://github.com/140.82.1123 http://github.com

185.199.108.153 http://asset-cdn.github.com

199.232.69.194 http://github.global.ssl.fastly.net

185.199.108.133 http://githubusercontent.com

199.232.96.133 http://raw.githubusercontent.com


验证:

通过上面的两个大前提条件,你已经拥有了一个前端项目,也拥有了一个后端项目,你就可以来轻松验证我刚刚提出的问题了。

首先,我们来将拉取前后端项目,下载依赖,启动项目。 我们打开前端项目,点击node菜单栏,刷新浏览器,就会发送一个get请求和post请求,并且请求成功了。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

【编程导航】发生跨域的时候,服务器到底有没有接收到请求? 打开我们的服务端,我们可以看见从前端项目发来的两个请求,并接收到了参数。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

此时是因为我们在服务器端设置了跨域的代码,接下来,我们将注释掉服务器端解决跨域的代码,再次启动服务器端。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

由于我们此时注释掉了解决跨域的代码,那么我们再去前端项目的node菜单栏刷新浏览器,就会发生跨域问题。

注释代码之后,你还可能发生get请求依然没有发生跨域,post请求发生了跨域,就像下面这样。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

这个时候是因为缓存的原因,需要把缓存禁用掉,把Disable cache 打上√。再次刷新就会发现get请求和post请求都发生了跨域。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

我们再来查看后端服务器的日志。

【编程导航】发生跨域的时候,服务器到底有没有接收到请求?

我们会发现,服务器是能接收到get请求,但是接收不到post请求,post请求只会接收到一个预检请求,接收不到真正的http请求。

总结:

简单请求,服务器是能接收到请求的,也会返回响应,但是返回的时候,会被浏览器拦截;复杂请求,浏览器会先发一个预检请求,去验证服务器是否允许跨域,如果允许跨越,才会发起真正的http请求,否则服务器接收不到真正的http请求。