概述
当发生403跨域错误时,No & # 8216
Access-Control-Allow-Origin ’请求的资源上存在标头,您需要为Nginx服务器配置响应标头参数。让我们来看看!
一、配置跨域
Nginx的配置文件中只需要配置以下参数:
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; if ($request_method = 'OPTIONS') { return 204; }}
上面的配置代码可以解决问题。
二。参数描述
1。access-Control-Allow-Origin
默认情况下,不允许服务器跨域。为Nginx服务器配置`
access-control-allow-Origin * '后,意味着服务器可以接受所有的请求源(Origin),即所有的跨域请求。
2。
Access-control-allow-headers是为了防止以下错误:
预检响应中的访问控制允许标题不允许请求标题字段内容类型。
此错误表示不支持当前请求的内容类型的值。实际上,是我们开始的”应用程序/JSON ”由的类型请求导致。这里涉及到一个概念:飞行前请求,请看下面”预览请求”的介绍。
3。
Access-control-allow-methods是为了防止以下错误:
预检响应中的Access-Control-Allow-Headers不允许内容类型。
4。返回204被添加到选项中,以处理发送POST请求时Nginx仍然拒绝访问的错误
发送”预览请求”你需要使用方法选项,所以服务器需要允许这个方法。
三。飞行前请求
其实上面的配置涉及到一个W3C标准:CROS,全称是跨源资源共享,是为了解决跨域请求而提出的。
跨域资源共享(CORS)标准增加了一组HTTP报头字段,允许服务器声明哪些源站可以访问哪些资源。此外,规范要求,对于那些可能对服务器数据产生副作用的HTTP请求方法(尤其是GET以外的HTTP请求,或者某些MIME类型的POST请求),浏览器必须先使用OPTIONS方法发起预检请求,这样才能知道服务器是否允许跨域请求。服务器在启动实际的HTTP请求之前确认许可。在预检请求的返回中,服务器还可以通知客户端是否需要携带身份凭证(包括Cookies和HTTP认证相关数据)。
实际上,Content-Type字段中带有application/json类型的请求是带有上面提到的一些MIME类型的POST请求。CORS规定内容类型不属于以下MIME类型,而全部属于飞行前请求:
application/x-***-form-urlencoded multipart/form-data text/plain
所以在正式沟通之前会加一次application/json请求”预览”要求,这次”预览”该请求将携带报头信息
访问控制请求报头:内容类型:
OPTIONS /api/test HTTP/1.1Origin: http://foo.exampleAccess-Control-Request-Method: POSTAccess-Control-Request-Headers: Content-Type...
服务器响应时,如果返回的头信息不包含
access-control-allow-headers:Content-Type,则表示不接受非默认的内容类型。出现以下错误:
预检响应中的访问控制允许标题不允许请求标题字段内容类型。
本文来自情侣多了单身才养眼投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/520414.html