1.跨域问题
浏览器出于安全方面的考虑,只容许与本域下的接口交互。不一样源的客户端脚本在没有明确受权的状况下,不能读写对方的资源。
例如访问www.test1.com 页面, 返回的文件中须要ajax向www.test2.com这个后台接口发起请求, 浏览器就会认为是跨域请求, 会向www.test2.com后台接口发起一个options的请求, 若是这个后台接口在响应报文中添加了以下几个响应头, 表示浏览器能够发起跨域请求
若是没有浏览器会拒绝发起请求nginx
2.在后端接口url(www.test2.com)的nginx上添加以下配置ajax
server { 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; } }
3.解释json
Access-Control-Allow-Origin 服务器默认是不被容许跨域的。给Nginx服务器配置`Access-Control-Allow-Origin *`后,表示服务器能够接受全部的请求源(Origin),即接受全部跨域的请求。 Access-Control-Allow-Headers 是为了防止出现如下错误: Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response. 这个错误表示当前请求Content-Type的值不被支持。实际上是咱们发起了"application/json"的类型请求致使的。这里涉及到一个概念:预检请求(preflight request),请看下面"预检请求"的介绍。 Access-Control-Allow-Methods 是为了防止出现如下错误: Content-Type is not allowed by Access-Control-Allow-Headers in preflight response. 给OPTIONS 添加 204的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误 发送"预检请求"时,须要用到方法 OPTIONS ,因此服务器须要容许该方法。
参考文档: https://segmentfault.com/a/1190000012550346?utm_source=tag-newestsegmentfault