会展设计搭建 發表於 2019-9-20 17:19:00

[转] js网络请求跨域问题汇总(携带cookie)

<p>前端程序使用extjs写,在本地测试,发送请求到服务器时,发现存在跨域的问题,cookie也没有set成功,于是乎在这里整理一下解决过程</p>
<blockquote>
<p>由于篇幅较长,不想看解决过程的可以翻到最后看总结<br>1.跨域允许<br>2.客户端无法携带跨域cookie<br>3.因为加了withCredentials报文头,可是客户端不知道服务器允不允许报的错<br>4.由于客户端不知道服务端是否允许POST请求而报的错</p>

</blockquote>
<p>假设我的服务器IP是120.111.111.123</p>
<pre class="line-numberslanguage-xml"><code class="language-xml"># 本地的html
# index.html

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;html<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;head<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;meta <span class="token attr-name">charset<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"utf8<span class="token punctuation">"<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/head<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;body<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;input <span class="token attr-name">type<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"button<span class="token punctuation">" <span class="token attr-name">onclick<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"request()<span class="token punctuation">" <span class="token attr-name">value<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"请求<span class="token punctuation">"<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/body<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;script <span class="token attr-name">type<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"text/javascript<span class="token punctuation">" <span class="token attr-name">src<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"./ext-all.js<span class="token punctuation">"<span class="token punctuation">&gt;<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/script<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;script <span class="token attr-name">type<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"text/javascript<span class="token punctuation">"<span class="token punctuation">&gt;
    function request(){
      Ext.Ajax.request({
            url: 'http://120.111.111.123/setcookie.php',
            method: 'POST',
            params: {
                'text': 'hello world'
            },
            success: function(transport){
                // do something
            },
            failure: function(transport){
                alert("Error: " - transport.responseText);
            }
      });
    }
   
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/script<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/html<span class="token punctuation">&gt;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-php"><code class="language-php">#服务器的php文件
#path setcookie.php
<span class="token php language-php"><span class="token delimiter important">&lt;?php
<span class="token function">session_start<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token delimiter important">?&gt;
</span></span></span></span></span></span></span></code></pre>
<p>点击“请求”按钮,发送请求后发现js报错</p>
<pre class="line-numberslanguage-php"><code class="language-php">XMLHttpRequest cannot load http<span class="token punctuation">:<span class="token comment">//120.111.111.123/setcookie.php.
Response to preflight request doesn<span class="token single-quoted-string string">'t pass access control check: No 'Access<span class="token operator">-Control<span class="token operator">-Allow<span class="token operator">-Origin<span class="token single-quoted-string string">' header is present on the requested resource.
Origin '<span class="token constant">null' is therefore not allowed access<span class="token punctuation">.
</span></span></span></span></span></span></span></span></span></code></pre>
<p>报这个错就说明我们跨域了,不在允许的访问源,于是乎我在服务的setcookie.php加入<code>header('Access-Control-Allow-Origin:*');</code>允许所有源</p>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token operator">&lt;<span class="token punctuation">?php
<span class="token function">session_start<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token string">'Access-Control-Allow-Origin:*'<span class="token punctuation">)<span class="token punctuation">;

<span class="token comment">// 功能...
<span class="token comment">// ...
</span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>然后又报错</p>
<pre class="line-numberslanguage-python"><code class="language-python">XMLHttpRequest cannot load http<span class="token punctuation">:<span class="token operator">//<span class="token number">120.111<span class="token number">.111<span class="token number">.123<span class="token operator">/setcookie<span class="token punctuation">.php<span class="token punctuation">. Request header field X<span class="token operator">-Requested<span class="token operator">-With <span class="token keyword">is <span class="token keyword">not allowed by Access<span class="token operator">-Control<span class="token operator">-Allow<span class="token operator">-Headers <span class="token keyword">in preflight response<span class="token punctuation">.
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>这次的报错是因为,在跨域的时候,extjs不会直接发post请求,而是先发送一个option请求,看看服务器允许什么访问头(比如是不是允许post请求),验证成功后才会发送真正的请求</p>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token preprocessor property">#用谷歌的开发者工具抓的option报文
OPTIONS <span class="token operator">/setcookie<span class="token punctuation">.php HTTP<span class="token operator">/<span class="token number">1.1
Host<span class="token punctuation">: <span class="token number">120.111<span class="token number">.111<span class="token number">.123
Connection<span class="token punctuation">: keep<span class="token operator">-alive
Pragma<span class="token punctuation">: no<span class="token operator">-cache
Cache<span class="token operator">-Control<span class="token punctuation">: no<span class="token operator">-cache
Access<span class="token operator">-Control<span class="token operator">-Request<span class="token operator">-Method<span class="token punctuation">: <span class="token class-name">POST
Origin<span class="token punctuation">: <span class="token keyword">null
User<span class="token operator">-Agent<span class="token punctuation">: Mozilla<span class="token operator">/<span class="token number">5.0 <span class="token punctuation">(<span class="token class-name">Windows <span class="token class-name">NT <span class="token number">6.1<span class="token punctuation">; WOW64<span class="token punctuation">) AppleWebKit<span class="token operator">/<span class="token number">537.36 <span class="token punctuation">(KHTML<span class="token punctuation">, like Gecko<span class="token punctuation">) Chrome<span class="token operator">/<span class="token number">52.0<span class="token number">.2743<span class="token number">.116 Safari<span class="token operator">/<span class="token number">537.36
Access<span class="token operator">-Control<span class="token operator">-Request<span class="token operator">-Headers<span class="token punctuation">: x<span class="token operator">-requested<span class="token operator">-with
Accept<span class="token punctuation">: <span class="token operator">*<span class="token comment">/*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>接下来,我们只要发送我们允许什么请求头就行了</p>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token preprocessor property">#path /setcookie.php

<span class="token function">session_start<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token string">'Access-Control-Allow-Origin:*'<span class="token punctuation">)<span class="token punctuation">;

<span class="token function">header<span class="token punctuation">(<span class="token string">'Access-Control-Allow-Methods:OPTIONS, GET, POST'<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">// 允许option,get,post请求
<span class="token function">header<span class="token punctuation">(<span class="token string">'Access-Control-Allow-Headers:x-requested-with'<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">// 允许x-requested-with请求头
<span class="token function">header<span class="token punctuation">(<span class="token string">'Access-Control-Max-Age:86400'<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">// 允许访问的有效期

<span class="token comment">// 功能...
<span class="token comment">// ...
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>继续测试我们的新功能,成功的解决了跨域问题</p>
<p>&nbsp;</p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="662" data-height="386"><img src="https://upload-images.jianshu.io/upload_images/1277453-d469ae37dbe7e1fd.png?imageMogr2/auto-orient/strip|imageView2/2/w/662/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/1277453-d469ae37dbe7e1fd.png" data-original-width="662" data-original-height="386" data-original-format="image/png" data-original-filesize="53821" data-image-index="0"></div>
</div>
<div class="image-caption">1.png</div>
</div>
<p><br>but,cookie没有“设置成功”。而之所以没有“设置成功”,是因为cookie存在本地,但是每个cookie都有一个domain,当你本地的cookie中存在你当前访问的域时,才会被带过去,而我的index.html文件是本地访问的,即http://localhost/index.html,而cookie的域是120.111.111.123的,所以不行了。于是乎继续改</p>
<p>&nbsp;</p>
<pre class="line-numberslanguage-php"><code class="language-php"><span class="token shell-comment comment">#path index.html
<span class="token operator">&lt;html<span class="token operator">&gt;
<span class="token operator">&lt;head<span class="token operator">&gt;
    <span class="token operator">&lt;meta charset<span class="token operator">=<span class="token double-quoted-string string">"utf8"<span class="token operator">&gt;
<span class="token operator">&lt;<span class="token operator">/head<span class="token operator">&gt;
<span class="token operator">&lt;body<span class="token operator">&gt;
    <span class="token operator">&lt;input type<span class="token operator">=<span class="token double-quoted-string string">"button" onclick<span class="token operator">=<span class="token double-quoted-string string">"request()" value<span class="token operator">=<span class="token double-quoted-string string">"请求"<span class="token operator">&gt;
<span class="token operator">&lt;<span class="token operator">/body<span class="token operator">&gt;
<span class="token operator">&lt;script type<span class="token operator">=<span class="token double-quoted-string string">"text/javascript" src<span class="token operator">=<span class="token double-quoted-string string">"./ext-all.js"<span class="token operator">&gt;<span class="token operator">&lt;<span class="token operator">/script<span class="token operator">&gt;
<span class="token operator">&lt;script type<span class="token operator">=<span class="token double-quoted-string string">"text/javascript"<span class="token operator">&gt;
    <span class="token keyword">function <span class="token function">request<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">{
      Ext<span class="token punctuation">.Ajax<span class="token punctuation">.<span class="token function">request<span class="token punctuation">(<span class="token punctuation">{
            url<span class="token punctuation">: <span class="token single-quoted-string string">'http://120.111.111.123/setcookie.php'<span class="token punctuation">,
            method<span class="token punctuation">: <span class="token single-quoted-string string">'POST'<span class="token punctuation">,
            params<span class="token punctuation">: <span class="token punctuation">{
                <span class="token single-quoted-string string">'text'<span class="token punctuation">: <span class="token single-quoted-string string">'hello world'
            <span class="token punctuation">}<span class="token punctuation">,
            withCredentials<span class="token punctuation">: <span class="token boolean constant">true<span class="token punctuation">, <span class="token shell-comment comment"># 加了这个
            success<span class="token punctuation">: <span class="token keyword">function<span class="token punctuation">(transport<span class="token punctuation">)<span class="token punctuation">{
                <span class="token comment">// do something
            <span class="token punctuation">}<span class="token punctuation">,
            failure<span class="token punctuation">: <span class="token keyword">function<span class="token punctuation">(transport<span class="token punctuation">)<span class="token punctuation">{
                <span class="token function">alert<span class="token punctuation">(<span class="token double-quoted-string string">"Error: " <span class="token operator">- transport<span class="token punctuation">.responseText<span class="token punctuation">)<span class="token punctuation">;
            <span class="token punctuation">}
      <span class="token punctuation">}<span class="token punctuation">)<span class="token punctuation">;
    <span class="token punctuation">}
   
<span class="token operator">&lt;<span class="token operator">/script<span class="token operator">&gt;
<span class="token operator">&lt;<span class="token operator">/html<span class="token operator">&gt;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>继续访问,报错</p>
<pre class="line-numberslanguage-php"><code class="language-php">XMLHttpRequest cannot load http<span class="token punctuation">:<span class="token comment">//120.111.111.123/setcookie.php.
Response to preflight request doesn<span class="token single-quoted-string string">'t pass access control check: A wildcard '<span class="token operator">*<span class="token single-quoted-string string">' cannot be used in the 'Access<span class="token operator">-Control<span class="token operator">-Allow<span class="token operator">-Origin<span class="token single-quoted-string string">' header when the credentials flag is true.
Origin '<span class="token constant">null' is therefore not allowed access<span class="token punctuation">.
The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute<span class="token punctuation">.
</span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>现在这个错误产生的原因就是<br>1.因为加入了withCredentials之后,Access-Control-Allow-Origin就不能用“*”了,既然不允许访问这个源,那我就让你发个报文头让你允许访问呗!</p>
<pre class="line-numberslanguage-php"><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php
<span class="token shell-comment comment">#path setcookie.php
<span class="token function">session_start<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token comment">// 是否存在请求源
<span class="token keyword">if<span class="token punctuation">(<span class="token keyword">isset<span class="token punctuation">(<span class="token variable">$_SERVER<span class="token punctuation">[<span class="token double-quoted-string string">"HTTP_ORIGIN"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">) <span class="token punctuation">{
    <span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Origin:'<span class="token punctuation">.<span class="token variable">$_SERVER<span class="token punctuation">[<span class="token double-quoted-string string">"HTTP_ORIGIN"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}

<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Methods:OPTIONS, GET, POST'<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Headers:x-requested-with'<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Max-Age:86400'<span class="token punctuation">)<span class="token punctuation">;

<span class="token comment">// 功能...
<span class="token comment">// ...

<span class="token delimiter important">?&gt;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>好了,上传完代码,继续测试。发送请求之后,又报错了(这错中错,一个个坑搞的大家都看得不耐烦了吧,我保证,这是最后一个报错了)</p>
<pre class="line-numberslanguage-php"><code class="language-php">XMLHttpRequest cannot load http<span class="token punctuation">:<span class="token comment">//120.111.111.123/setcookie.php.
Response to preflight request doesn<span class="token single-quoted-string string">'t pass access control check: Credentials flag is '<span class="token boolean constant">true<span class="token single-quoted-string string">', but the 'Access<span class="token operator">-Control<span class="token operator">-Allow<span class="token operator">-Credentials<span class="token single-quoted-string string">' header is '<span class="token single-quoted-string string">'.
It must be '<span class="token boolean constant">true<span class="token single-quoted-string string">' to allow credentials. Origin '<span class="token constant">null' is therefore not allowed access<span class="token punctuation">.
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>大概的意思就是说我给你发了withCredentials报文头,但是你服务器没有跟我说允许我带这个报文头,那么解决方法就是加上允许发这个报文头的报文头</p>
<pre class="line-numberslanguage-php"><code class="language-php"># path setcookie.php
<span class="token php language-php"><span class="token delimiter important">&lt;?php

<span class="token function">session_start<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token comment">// 是否存在请求源
<span class="token keyword">if<span class="token punctuation">(<span class="token keyword">isset<span class="token punctuation">(<span class="token variable">$_SERVER<span class="token punctuation">[<span class="token double-quoted-string string">"HTTP_ORIGIN"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">) <span class="token punctuation">{
    <span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Origin:'<span class="token punctuation">.<span class="token variable">$_SERVER<span class="token punctuation">[<span class="token double-quoted-string string">"HTTP_ORIGIN"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Origin:null'<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Methods:OPTIONS, GET, POST'<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Headers:x-requested-with'<span class="token punctuation">)<span class="token punctuation">;
<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Max-Age:86400'<span class="token punctuation">)<span class="token punctuation">;

<span class="token function">header<span class="token punctuation">(<span class="token single-quoted-string string">'Access-Control-Allow-Credentials:true'<span class="token punctuation">)<span class="token punctuation">;


<span class="token comment">// 功能...
<span class="token comment">// ...

<span class="token delimiter important">?&gt;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>接下来进行最终的测试,biu~成功了,终于成功了!!!(0.0自己嗨起来了)</p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="662" data-height="393"><img src="https://upload-images.jianshu.io/upload_images/1277453-56cacb18ba493211.png?imageMogr2/auto-orient/strip|imageView2/2/w/662/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/1277453-56cacb18ba493211.png" data-original-width="662" data-original-height="393" data-original-format="image/png" data-original-filesize="53507" data-image-index="1"></div>
</div>
<div class="image-caption">2.png</div>
</div>
<p>接下来总结一下,之所以跨域会引起那么多问题,都是因为耿直的客户端,发什么类型的请求都要服务器允许,而且要明文允许,允许的内容包括如下<br>1.跨域允许<br>解决方法:服务器发送允许客户端发送源的报文头<br>header('Access-Control-Allow-Origin:'.$_SERVER["HTTP_ORIGIN"]);</p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="669" data-height="348"><img src="https://upload-images.jianshu.io/upload_images/1277453-f8382cef31a42390.png?imageMogr2/auto-orient/strip|imageView2/2/w/669/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/1277453-f8382cef31a42390.png" data-original-width="669" data-original-height="348" data-original-format="image/png" data-original-filesize="46846" data-image-index="2"></div>

</div>
<div class="image-caption">4.png</div>

</div>
<p>2.客户端无法携带跨域cookie<br>这个时候就可以在extjs中加入withCredentials</p>
<pre class="line-numberslanguage-jsx"><code class="language-jsx">       Ext<span class="token punctuation">.Ajax<span class="token punctuation">.<span class="token function">request<span class="token punctuation">(<span class="token punctuation">{
            url<span class="token punctuation">: <span class="token string">'http://120.111.111.123/setcookie.php'<span class="token punctuation">,
            method<span class="token punctuation">: <span class="token string">'POST'<span class="token punctuation">,
            params<span class="token punctuation">: <span class="token punctuation">{
                <span class="token string">'text'<span class="token punctuation">: <span class="token string">'hello world'
            <span class="token punctuation">}<span class="token punctuation">,
            withCredentials<span class="token punctuation">: <span class="token boolean">true<span class="token punctuation">,
            <span class="token function-variable function">success<span class="token punctuation">: <span class="token keyword">function<span class="token punctuation">(<span class="token parameter">transport<span class="token punctuation">)<span class="token punctuation">{
                <span class="token comment">// do something
            <span class="token punctuation">}<span class="token punctuation">,
            <span class="token function-variable function">failure<span class="token punctuation">: <span class="token keyword">function<span class="token punctuation">(<span class="token parameter">transport<span class="token punctuation">)<span class="token punctuation">{
                <span class="token function">alert<span class="token punctuation">(<span class="token string">"Error: " <span class="token operator">- transport<span class="token punctuation">.responseText<span class="token punctuation">)<span class="token punctuation">;
            <span class="token punctuation">}
      <span class="token punctuation">}<span class="token punctuation">)<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>3.因为加了withCredentials报文头,可是客户端不知道服务器允不允许报的错(耿直的客户端)<br>这个时候就在服务器发送Access-Control-Allow-Credentials</p>
<pre class="line-numberslanguage-bash"><code class="language-bash">header('Access-Control-Allow-Credentials:true');
</code></pre>
<p>4.由于客户端不知道服务端是否允许POST请求而报的错<br>这个时候要在服务器端加入</p>
<pre class="line-numberslanguage-bash"><code class="language-bash">header('Access-Control-Allow-Methods:OPTIONS, GET, POST');
header('Access-Control-Allow-Headers:x-requested-with');
header('Access-Control-Max-Age:86400');
</code></pre>
<p>以上汇总起来就是</p>
<pre class="line-numberslanguage-bash"><code class="language-bash">header('Access-Control-Allow-Methods:OPTIONS, GET, POST');
header('Access-Control-Allow-Headers:x-requested-with');
header('Access-Control-Max-Age:86400');
header('Access-Control-Allow-Origin:'.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
header('Access-Control-Allow-Headers:Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With');
</code></pre>
<p>&nbsp;</p>
<p></audio></p><br><br>
来源:https://www.cnblogs.com/chris-oil/p/11558417.html
頁: [1]
查看完整版本: [转] js网络请求跨域问题汇总(携带cookie)