缘起
由于浏览器的同源策略,非同源不可请求。
但是,在实践当中,经常会出现需要跨域请求资源的情况,比较典型的例如某个子域名向负责进行用户验证的子域名请求用户信息等应用。
以前要实现跨域访问,可以通过JSONP、Flash或者服务器中转的方式来实现,但是现在我们有了CORS。
CORS与JSONP相比,无疑更为先进、方便和可靠。
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS
JSONP的最基本的原理
动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。
这样其实"jQuery AJAX跨域问题"就成了个伪命题,jquery $.ajax方法名有误导人之嫌。
如果设为dataType: 'jsonp',这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。
JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求, 我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递 javascript对象。 这种跨域的通讯方式称为JSONP。
Cross-Origin Resource sharing
这是W3C 新出的一个标准,简单的讲就是通过服务器/客户端 一些Headers的设置及确认 来实现跨域请求,这些包头有
Cross-Origin Resource sharing
这是W3C 新出的一个标准,简单的讲就是通过服务器/客户端 一些Headers的设置及确认 来实现跨域请求,这些包头有
- 5.1
Access-Control-Allow-Origin
Response Header - 5.2
Access-Control-Allow-Credentials
Response Header - 5.3
Access-Control-Expose-Headers
Response Header - 5.4
Access-Control-Max-Age
Response Header - 5.5
Access-Control-Allow-Methods
Response Header - 5.6
Access-Control-Allow-Headers
Response Header - 5.7
Origin
Request Header - 5.8
Access-Control-Request-Method
Request Header - 5.9
Access-Control-Request-Headers
Request Header
例如
- Access-Control-Allow-Origin: http://www.test.com
- Access-Control-Allow-Methods: POST, GET, OPTIONS
- Access-Control-Allow-Headers: POWERED-BY-MENGXIANHUI
- Access-Control-Max-Age: 30
可以参考 http://www.w3.org/TR/access-control/#access-control-allow-origin-response-header w3c的网站
Access-Control-Allow-Origin: 允许跨域访问的域,可以是一个域的列表,也可以是通配符"*"。这里要注意Origin规则只对域名有效,并不会对子目录有效。
即http://www.test/test/是无效的。但是不同子域名需要分开设置,这里的规则可以参照那篇同源策略
Access-Control-Allow-Credentials: 是否允许请求带有验证信息,这部分将会在下面详细解释
Access-Control-Expose-Headers: 允许脚本访问的返回头,请求成功后,脚本可以在XMLHttpRequest中访问这些头的信息(貌似webkit没有实现这个)
Access-Control-Max-Age: 缓存此次请求的秒数。在这个时间范围内,所有同类型的请求都将不再发送预检请求而是直接使用此次返回的头作为判断依据,非常有用,大幅优化请求次数
Access-Control-Allow-Methods: 允许使用的请求方法,以逗号隔开
Access-Control-Allow-Headers: 允许自定义的头部,以逗号隔开,大小写不敏感
Access-Control-Allow-Credentials
在跨域请求中,默认情况下,HTTP Authentication信息,Cookie头以及用户的SSL证书无论在预检请求中或是在实际请求都是不会被发送的。
但是,通过设置XMLHttpRequest的credentials为true,就会启用认证信息机制。
虽然简单请求还是不需要发送预检请求,但是此时判断请求是否成功需要额外判断Access-Control-Allow-Credentials,如果Access-Control-Allow-Credentials为false,请求失败。
十分需要注意的的一点就是此时Access-Control-Allow-Origin不能为通配符"*"(真是便宜了一帮偷懒的程序员),如果Access-Control-Allow-Origin是通配符"*"的话,仍将认为请求失败
即便是失败的请求,如果返回头中有Set-Cookie的头,浏览器还是会照常设置Cookie
客户端页面test.php
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>crossDomainRequest</title>
</head>
<body>
<input type='button' value='开始测试' onclick="crossDomainRequest()" />
<div id="content"></div> <script type="text/javascript">
function createXHR(){
return window.XMLHttpRequest?
new XMLHttpRequest():
new ActiveXObject("Microsoft.XMLHTTP");
}
function getappkey(url){
xmlHttp = createXHR();
xmlHttp.open("GET",url,false);
xmlHttp.send();
result = xmlHttp.responseText;
return result;
}
function crossDomainRequest(){
var content =getappkey('http://127.0.0.10/gettest.php');
document.getElementById("content").innerHTML=content;
}
</script>
</body>
</html>
服务端页面gettest.php
<?php
header("Access-Control-Allow-Origin: http://127.0.0.1");
echo "test success!";
?>
aaarticlea/png;base64,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" alt="" />
如果不允许的话
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwoAAABfCAIAAADH8aevAAAfm0lEQVR4nO1dbWwdR7keRHTbH7koSP3RH+0tanOgjovWVO6lUisVKiFxbrlBqChcE7b94UggjkSk+yPqD4iRhVDmoARRhIoUCmoCx+3NDexV66a0VKHEvXW+/JGzcZsTF5KYEJrcKlDHsR1D5/6Y3Zl5Z2Y/7Por5Xn0KDrenZ19Z3bmnWfemd2w8wAAAAAAAIABttIGAAAAAAAArC5AHgEAAAAAABBAHgEAAAAAABBAHgEAAAAAABBAHgFAMU6/9NLxrq6R+++P29tH7r9/+CtfOf3SSyttFAAAALBUWE3yaG+XYEx07V2anIPJgdwj1xeuC/uX7oEuIybOnh165JGTd94pGDN5qq1t+JFHJs6eXWkDAQAAgMWHXx69fDjuefLXj/2432TPky+88OpoRj4DkwEZPKb3pqNjyrmenmk6wAjGRNBzUeXhH033TjMmWNdl/5+lcLnLvsQ+MtAzR4zZO00sH9Dmucct+1XxLeSf9diQd4lbohJYhJqc31WLJY9kzZA6Vw/IKo7ftos9gf3UBnrmVFXv7cp8KOfPH/vGN/7ywQ+Km28Wa9fqp792rbjppqk1a451dxdZn2cYAAAAsDrhl0c9T/76yvTsu++++7e5udmZq1fe+cvlt986e/b3PU++4EueDAD2AJMxOsqxytYWmenf+6A+MBlY2ZpHDCVkyqPkrJR9Vpwm0YKkvFrc+C7JP+u1Ie8St0RlcN3Ko71daVXvnWbB5MD5y11J5V/sCWT+7hGFiz2BJXznega0PBromcuOw43v33+yrU0wJiYmxNCQuO02wZhYt04cOiQmJgRj43feefqpp3JszzEMAAAAWLXwy6PHftz/97/97drszNUr7zDG/u+tP16YePPc78ce+3G/m3iecqcofRDMGULhcpcZsOmapn9eNuIK6hI7/4GeOZ+UIUeSWxuRmxTSgMLE5k3dAuaf9Wabdwm1n1ZRetyMdZWpSd8lVuZzPQOX3asMk+zLfQ/Un7IsBiaDYHJg77S6daJy3CO6WqddqRr0XFT/5q5RHu9K6+SJJ8TcnBgYEOvWiVdeEUKIX/xCnhp++OFsgx3DBnrmgq7pRF4Tna1DXPOrEwAAAGDxkSmPpq9eeecvb7996U+MsT/+4dQfWqOtk0e88sgjICTIapQehMroAyPP3JiHsSClsrXyv9gTWNEO90imPErGcidy45R3OeURsd/QoLrSBnrm6JrgXM9AmZq0LvGZmhE98j0I/wP1piwJVwwlv90j1iWkoqelsA6CfG10/vz54/fdp9vws88KIcQbbwghxIsvijVr5PGRT34yOwPHMCXI1O6xvV0iEWpJystdWIYDAABYYWTKo8tvv8UoThw9WCCPjMCA3nu0oMW1BcijjNsNTAaW7nGPZMgjVRx3P5AjpJZRHhH7TW2qfptbbRJ27c2vSe8lni07JeSRfhDZ0i33kWVBxYEWSR6xYLKnKz9Uc/T223WFrFkjRkaEEOLkSbFunTo+ctttuTY78khF0ciPha11AgAAAEuCTHkkV9PefGOYMdY8/srway8e+d2zZRbX9EC4KuRRutck74hP9OjQlzli+UNH55dVHhH7c+SRc4tieZRpVabGUhWz1PLIXCNbvMW1oi1BR++5Rxdfrq9NTIi5OfHMM+r46D335JrtLq555ZFKD5EEAACw8siUR39ojbbiIyeHDzHGjg48/9rB6NXf/LdXHllbs1dKHvnFQclX+i155I0bucnMsvh2Upc9m2ODuzWb2m9mYte8Pcrm1qT/khTSGEce+QrobwBeeZS5LOu5O3lki7k1+/zAZJC5wDf08MOJDNqxQ1y5IkZHxfr14sQJMTcnHn9cnhp66KEc223DsuTRQM+0jg6u+k82AAAAvN/hl0fbf3Jg5NjAiaMHj7/6wuBv/+d/X/7loRf/6+UD+765+/mMfKwX+9XuCrKxVyadpzwy1326Llt/Wvt8u/aedxUDlTjOEfIOv7tKKLRO8ryg50gxI5N5nPXZ4LvEZ7/vkwrn7SKYUSh/TfouIStuNKwlr5q05BF9EHnyyEqZC2vhj9bYvF/s1/XjaiYH4z/96an168XNN4tz50Qci7vvFoyJj31MnDwpzp0Tt9xy5vbbWz/4Qa751LCCxTXSUwAAAICVgl8evfDq6PafHLC+e/TN3c/3HxpeZvsK4H4riGDvtD0Au0euL+TYL3XSCq3LFDyIBaVcHTj+8MNXbrhB3HKLud9IrFsnPvKRq4wd37hxpQ0EAAAAFh+r6avZC0D+WFvmlf7rCx77zcjTyi3KvH/l0cTZs0Nf/OLvKxUSTWTsTKVy/POfx1ezAQAA3pe4zuURACwLTv3yl0MPPTT0iU8cu/XW4x0dxz/3udeffnqljQIAAACWCpBHAAAAAAAABOxPAAAAAAAAgAF2AQAAAAAAADDA/gwAAAAAAAAYYK8DAAAAAAAABpgQgyAIgiAIgqAi5BEIgiAIgiAh5BEIgiAIgiChXx5du3Ywjr88MnLv2Fjb2FjbyMi9cdx17drBFTcXBEEQBEFwqemRRxcu9AwOfnRq6gYhmOLU1D8NDq6/cOGbK24xCIIgCILgktKWRxcufD+OPywl0cGD7Oab2Y03sgMHEpE0NvahiYnvLOhOjTheoIkxrwS8kZkgquadzWYU1f23i+ox/aHMCKOs3OphUIujGp9nGa1bqLqKokZJI2UNsLCufufWRj1k1ajc8+JhzbIt60GYxkQhc2spjslVUZhtQ1zjWZXc2trZubU1/wedSTPDRc98Sbl6rH0vluS01bgWBGnzW2gHj3kljIjbUe0wCitpV23wwNMaS/W7RWdcC62Squ5gVogycrFKEdejOKnqbBcnWQ8dM4wHWlc2GLb5jS+qUu0DS7SHehjWyZ+sGvqcDLHKX4Qyja0esmqUlbI4B//D0k/B2wBWgA0e+KvLW42Wk9d15Tz6mNd08d0271a171TMq3mPMm74B/F59l8ij65dOzg4+FEVMXriCSbx7W/rMNKRI5XZ2ZcK8o1rAXOgq6nBk9MVHqvf8s/5VwQZbo1+ElVdE5j5qKIqC2qxqIdWkrBKXJKnLO4Dk/dt8IDNz5V7jTTtLDRSGBUYVENtazUSRpeTP1IBp6vU+6Tks4hod41rQVj394G4FiR1YooqPTLFvMLCunuvxBeblRDUuPbpVFJ7R+L3IHFaO9s6d+5zfwuxq9vMMzVNJmjtbCNl6N5Fs93VnZzY2O+5af5Z5+4Z6am1uVxw/ZRMvETyyBhoY14No4Z1IUu7m6dXps0s4I04bkRmzzFdUFiLeJXzahjpzqXtKe53BUXz9yqz2SdDfoPztMG7MiIdPLSLI+PleyuF6o9BlUcNIRqcyw5uqY1BY5Crc/LIaM5hVZ2NuFEQZTOplrREhT6wsD3YY7CsUqcUcS0Ia3Gsq84zUpaSR8m1Ma9x1x9G1TBqcF5PK1+f0mo1LQ4RCs5jsp+mYv9GfTr1P6ZfSpyD4bsYa9vZMvqslTK3mEJY0q0ehvXkmfoeaBSaNlsNxvO8aCUQxrxqD0O2eaTS9H31WFONDCODsJaRm59EHp048R9TU1oJ7dmTZPrDH+qDMzNsdPQL5W9A6pQWLIpUU86rJo88ogOt4RqqEQ3hRJHuJ16ZFce1MKzHUT1OWoD3cWozMmJIVJblTLAs2gEnObGwO3aOkUmh4hqP0t9kCqhbTxgNRlEtGVGCqnemEthu0deg41rAPCEiWfaQq0dTCbwOyHKdpB4anNdibnQ5057Flkf93dplqN+Jl1H59G/s7pdpdnWbLia5yvYv/d1Mpm/tbHOUU8FZ9+5Z6U3LC7i65ZG3FRmCpsJj0/3pYElkD5A2VWc3GhvpVlHIAl4Lw9Q/pNNNkklp51CK1kRZ/ak8hplADj/pv0FYVS4ujBa1FMaUKQhYEFQYq/BI5mP41STn5FoyTYpqPFbz8iQ04pFHcSPW2s4QhUU+sER7qIdh3SuzTG0R8Voc1YLUPflHSm+bzJhDBrzGg6q2wTSMV5njS3VB9NM0IwJ1j7h07GntbDMnS/3dG/vlQTqn6ty5z+77yVWmH9vV7XihmFd8Ra2G5vPiVdUO045mPFA5vtMG41kx8NQqjY8k3cEXxIo81UvqSkt/KqHKD81iUFjy6Pjxe8z9RgcOJHn+6lfMPD46ek+hI3CiqY48ShR0tjxKhbyWNZa0t4ZzX5XJPGNe5TFxjkk8Q9SjKO1aKvSik6W+wGgxAW+kbdcv9lmGk/IzqjkdvhHHSs8VGkk8HRkJjNme9As8knq/Fob+aFwUVgJ/1FcFh8h0wXY9+lH6RxHlHQwJ5QSQZMHjhqc9tLZ2dm7dmYZTuvsHhdi3M50Hde7cpX93b+zs3NjdaaaUDsJUFbu6tZcxf2cN+ft2dlJRoj2OL09PJvln3btnpU+Pm7NDeVYfkaZm1I90nSSlMfvs3NoiF+6jttGKdR+Kmyaz8St3RqbyqSdtcF432oDpf0lzMlCNLP8e1LiZLO01oWx4cSOWt6Ouo5xzKKQZ3JKh3Ax5pIpPE0RhhUc1HsmF+2oYWYsa77UU1kAY8IaI6zzDOTiDmeEQ5E3jWsAqPE68UOKLzKuCCudZ8ijTBxa3B+2RKmHUEKIeyeANjT3HvBKG6fCRMw/MaJM03pOeMmJaNAftfkNjyHclQpnoEZVHjhdKHILjmjq3trxOw/J1fsolLRUkq9JWVwl4lUtpyKsBb/gmzPJhkZ5IAml0huyLXMg6lFq5wQOav3xMapxN1kaIPJItLQqrkahz3oh5zY07FJLIo6Ghj5oy6PjxpGivvUbk0YkT64vyrfOwamtDJ3rEE23odDndbdIemOag1w6Tla+GUtksqMW+Zeko8j+AiEuJJn1HLQ3iUUkU1CK64SbmlVB3crUdpx6G1Sga1D6r5AOQZYyseInhGnKNFI6P0zVpzBQTeaQr07dyzCthJFV/4ub02bihBXhYDVNvSAPm6o6DljxKLCTOzmmmOnpUF8kKsRP9bm3tVMNt/0YtCNzoiKmE+jcyLSYMJ9K/UcdjzN+iRJhKDApf6ChPchWfdW+UkT6xdle3qfw6t7a8csofPXJSGlJPzkczK8GqWPeheCvf3/j1wJZod91CZGOocl6LkuNpm1HtTShPYisn4fpT2RTVtsI0EsxsgZ4uEBT1uxJUVvnVj3enkWfvEdeBnDAiWzEWpRSm5IrCCpk70VVvswhqeIuiNGwT1GRwiMijJFsWBEmQWzv70JRHuT4wvz0YvxPFHNaStS0j/hQos3M3QmW1SXI8TkzSq0jE+GrIqlFS0mpkqDSPoKdbpoqjR54pWfZMzDyuHKYY7JeTGV/0WveUuJEGgegTj+qc11LBUZXxs8jddOuMBWaJdBONqszQYWazd3dryNpTFR7Spb2AN6y6kunDqBHHibVWiKQMLXm03pRBk5NszRrGGJueJvKo2byjKN98P2LK0pzokRrR3S3PqTwnItF/O/94nPS3uhCq7lzL098kbGtpCxnnr4dhPeKVgCq8mFcKonmpa1DbEUJurf0XGqnLnjZBs7XVzShuOqFMJKm5RyHgDeNC3yaqxMiMmgxrcV5wW0lhWXuuPCLRI6FiXWaaLCWUf9C3KCaMdSvrt32jrEy8fmpZ5FFirVtwstWAaVHol49WSrnJqSiE5lZsv8+MosqnLcrtsGTwSDf7u6vz6qAjj+JaGFSDgAV0kmaup6j3DNLb2f26sN8Vsbw8StcKnQqJQrVzQPbxemhOERehFHUeVBhLKirk6e4cHf+ma3aphdbs33S/jjyq87DK06lX5uJatg8s0R5SecSTWXfEa9w7IhTufMjanJ6OQbKkWWOtJYAsF5qqVX2E7BQ2mkeePCoxc9PySJniXiU3MFkiKfXDQZDOuoNaJPV3GhQwJuRKBaZ/0jYgC5UM0LwaGjMWstBBAwp00MzcIiblkZoVkD+TPBuc16NQxroa2TIgj0QeDQ//qymDhGCf/Sy7/35mHRwZubso34zllYj4i0QeFUeP8t4Ii8JqtLDd7+bqvg5imSm1PFLPzxMGlE0qrJeaDtqPuUgeFRuZ+iYd9SHyKI0e2dqF7N8MqR9PsqWutlAe6R0J7tNXR+RcytnBoKNH1ZBVI+8jW0x5ZMaofatmxJuU2nWUplzqxbXUWmM66NMlpSvNttCnq/w1s3TySC+mCKFmoj55RIOOautrHNUj0k/TqKSxYyadjKUtzXIyJfpdEc13JrLlkRHNteZ4UchCLqNHjdhYfjK3h7/HUsS8pqf+MqyS7M6ppBuSapE6pW9nyFPqVZIItDH+xbwWme/f6aTl5VFhe1DyKJmgpvNA83HUw9RL2yv7JdqkMUO2nC193GQ7ubOnyjOHJO/3hYFnKYDa4+1QRYtr/rncYN4kLa6FvM5Dz+vYhgSshtzshrqeA65eiajIzV4hJzusLf0XhVnL1guTR+kaKK9rFxH6ttsWkcij0dEvzMwQJTQ8zIaHyZHZWTYy8m9F+RbKo2oYMEZnfvOJHtF2nzshkEv4dkA19Urp5qRKGA2SRaikFHUeVDjPiB4pYaR3f7vdMpd2YJkGV0oZORhFdem/OJd7C+wNCipno1Eaa22eSbm3GvX8lT7N5EKuQs0eUVjn6Ugge4ucnSQhd/f1h7jGQ8dPZQZCDA3hDu3mMpxyIv4lp4wbuf7IcjdkZcrZTF36rHt3f3otnqziGMttXlNb5vZMO2DWnai9VH6VrFhvEMsX0vc1/nLySLVkq6HqHSR04I9roQ6WkLfbgqBGlIHZVs0+VaLfqcX3bM/jeXPKkkcBUQnVgNdCrUsqIVE2/rDreypFos9SF6R3ODkbDZNTepJjOQpD2KVSNd2gyXnD/DxBTvTI7wOL2kPMK+nbSVoYpcteyWQsCb9Z7c07rBR/2mAwCuWIkFgVJ+ubctEtQ/ro2rYWgOyl0uT4om/NNvcYqIhR5jQp3fcjV67pzmgVopP7TEh01vb/9ryFZkJUUcY7T/nyKN1oL7uhUVdRmOxYYmEtihrJ64SGfi3RfweFJY9mZ186fFivr33/+0mxv/c9LY+OHr1jZua5/AaUuW3ZE97wyaMyr8XqlDLE5/0ogBG4s5xREh1Jhm29Mm22BpWtN3pEhIXuzLLedcQ79wFkfLPAdA1FRhrRyHR52Agg089meORRmbYozE3xdF+UW8/CL49CXfn1MDC0lGWAfCM3sDuPEJmaRi6ly1hO8rt7o7F4ZI7xehtyxiv95P3Y7n77Nf7Onfvkfmd7wzJZBXPvW/KsfXc3PbHWfL/XXTXLqR+yNVumVDfSRaOJnc3gWYt3bhrakLJ7dtKE9HBotkbzPS/mm/DolA1nP6m7OclwApHHexT3Oz01yuzdjmGZsWRjWkU/imN/9sa/OrDAUsglM2fqn6UP/N9PSU6RJ6idg1xLypVHJXxgbntQdRhVgzRuEUbGJlG1npUljwrbJE0QhtVkSux8/YSsOVIfm4xumfKINNEceSSsb4v4XuynWxLNq9p2tvRbF8wf2VWRe7LXIn24jShqpDMQNV7T0SQdGb1jZZwu1WW+/kyYK48yD9Y5r6kRxx+zKNd/7c9CTkx8p9X6Z/Xm2rp1bN06tm9foo3Gx9eeOfNYUZHKljkR3WlsJuC10PuZB5cqQGpOKFMdazRoJxgeVXUfjmXATc5BpdLMf51B3sJ9+0DrofnSs2E8JF6mwMioat7aXPH1Nj76imzJtmgqG13e7Ey8w4CaY+kK9LVap4ZLTOY8zFm6EoMif+PR6qbfWmtr+dKxqGLLpsmlaqVakXv7su91azqNMb6vpp1Mw5y86deUAnL5PJxDKcr8XflildRhbO5Yt1IuUimiahjSlSOfGak/oQVJH4EzZaU3ItJWGZ0pjywfWLY9COre9S4laphG0SciPayHYZ1EzekbAJnRI28NMPP7du73aPxtZmkZVY2K9X4ZuKqim8bbi85kmw5M7qPxVZfTkDJsSBqtNW0wK9wQxPYN5vXilPc/FZmY+M8jR9bPzHzAWlM7enT9mTO15XtUILgwFozQ5bZIr0YSa/tVwGfZirAs8ggEQXA10P9f0s7OvjQ6+u/HjnUMDd06PPwvx451DA1Vp6dfWHFzQRAEQRAEl5p+eQSCIAiCIPgPS8gjEARBEARBQsgjEARBEARBQvY6AAAAAAAAYICJS5dAEARBEARBRcgjEARBEARBQsgjEARBEARBQr88unbmTPz1r488+OBYR8dYR8fIgw/GX/vatTNnVtxcEARBEATBpaZHHl340Y8G77pr6sYbBWOKUzfcMLhhw4XHH19xi0EQBEEQBJeUtjy68PTT8U03mcLI5NiHPzyxe/eKGw2CIAiCILh0JPLo2pkzgx//uGBMPPecOHhQfPrTiTBqbxevvCKee04wdqS9fXZ8PDPHw72CMdF7WP/Z0auPS6qz7oWaHaKvl/x52E2WHpTs7bBvkZM479ab01OHRQdL7CfJNutyWcU0//Te3S1mllUgCIIgCK4QiTw68dWvTslh++c/F0KIN94Qt9wibrpJnDghhBDPPisYm2Fs9NFHM3M83Cs6NosOQw109IpLfYYO6BOb+zIu7M08crg3US3eg5cuid4O4/K+RCFlJS68tbcsl6jaKyOP8u0HQRAEQXBVksij4w88kEQ11qwRv/mNEEK89pp49VUhhDh8WKxdK8+OPvBAZo5y+O/bnGggLY8ypIl1YeaRPp+8UNn22WEYV6Dk2JAlWXo7RO9hsTkjGDYveeS330iPMBIIgiAIrhoSeTR011163WftWvHii0JiYEBpI8HYiQ0bMnNUw/9mJvron4z540bqQnPVyZIXfZs9usR7MGGfvQSmEhfeOlFRh5O4kXnhguWRaapVzEuQRyAIgiC4ukjl0YYNeuRes0Y880wij377W2G8yNZsa8vM0RIQlm7o25wpkrzRI0tG5BzMkkdu4jK3Jgf7yM6hecmjUqaCIAiCILi6SOTR8Kc+pUf0p54Sc3NidFQMDgohxIEDYs0aeWrkvvsyczSH/94O0ZshXPIvtI6Y24a8BwsX13I2HnlvfYlu9Db3ei8geuS1HwRBEATB1Uoij0YffXRGqoF6XczNidOnxd13iyAQp06JuTnxs58JxmYZG/nSlzJztDfcpMtkKmKUtw86e+9R32bP3h118FKJrdlm4sJby3fW+i7pay1VZF9C9Vlvh9jcV2y/aQAW10AQBEFw1ZDIo9nx8cNyfe3558XLL+sX+z/zGRHH4ne/E4wdbWubiePMHN3VtI7eRG3kv8rufbHfzKq3I/PgYfU7vbzPZ4yZOMdmz5E++qEBumyndI+7o8hrv/tiP+QRCIIgCK4m2p+FnNi9u7VuXdZnIcc/9KEzO3euuNEgCIIgCIJLR89/KjLx3e8e2bBh5gMfMIXRLGNHN2w4861vLdKN+xzttWzhkxW8NQiCIAiC1wH9/yXt7Pj46Je/fOzee4duv334jjuO3Xvv0KZN06dOrbi5IAiCIAiCS02/PAJBEARBEPyHJeQRCIIgCIIgIeQRCIIgCIIgIeQRCIIgCIIgIeQRCIIgCIIg4RLKo7mJiZnTp6fGxqbGxqZPn7527tyKlxYEQRAEQbCQSyKP3n3rrZlWa6rZVLzSbE42m1OnTv39z39e8TIvD6Pd2+NLh/juPStuCQiCIAiC8+KSyKOZN9+cajavNpvTzeZ0s3nVUEhXT59+9623Fp75/u18YOVrrZDx7vZwvzR4U7D70IrbA4IgCIJgeS6+PJqbmFDaaKbZnEkVkpRH7zSbs2fPLijnPeEWxra0J/Jo/ya2hbEde5Lj27bHly4JN1qzPHJq/ya2ZVNkmMoNSRTv3h4t+h1BEARBEFwyLr48mhkfn0q10axPHl09fXrBmce7Nym5E+1IFIkO1QxsD3YQeRTtaF+eaJMyxjJSWhUigASCIAiC1w8XXx5dfeON/OjR5NiYe1W0g7EtLNyfhoJkcGgLC7a1sy1MrU/lyaP0kjTCdIhvY8mRHXuSW+zYFG6RN/IbL80w7ihDVtk5DGwPkptqeWRKpSQTItoO8W3LJNpAEARBEFwAl0QeXWk2s/YeZckjkUifQ3yHXCbbE27bHkthYURfqDxK1Y+WO5YQsQI5e8JExKi7WCSLYsIUOskiXZpDapKKTpmSqEgegSAIgiC4qrn48mh6fPxK+sLaVfrm2jvN5l+bzalWK+NaM6xSRh45i2uF8ig96ygYlb6dmTuZtlkKLM0hMUnLLCyugSAIguD7hosvj66dOzfZbE42m1cMSm0k5VHW1uwkerRN6owllUcyc8eGge2c7mHKjAMpebQtDUdtM1JSPYSt2SAIgiB4fXHx5dG7Fy9Oj4+/02xOGlTaKOvF/nTvkQzYbIr2b2Jb2sMd7WzLpnCH3NmTbgOSG4Oy3lzbRrcWyWTb0gU7Ego6xLcx+ta9lcA80s4HLCPb+YDae9QebEv2J0kakshesMPeIxAEQRBc5Vyqz0JOtVrvpKpICqO/NptXVvSzkKm4WZ7byQAVjSppS/xLeyAIgiAIrgYu4X8qMnv27FSrNTk2Nnny5FSrtdDPHYEgCIIgCC4r8V/SgiAIgiAIEkIegSAIgiAIEkIegSAIgiAIEkIegSAIgiAIEkIegSAIgiAIErLXAQAAAAAAAANMAAAAAAAAAAYgjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAggjwAAAAAAAAj+H3vGy/5fU7/4AAAAAElFTkSuQmCC" alt="" />
aaarticlea/png;base64,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" alt="" />
所以跨域有以下几种方法
通过webserver【nginx】配置来跨域
#
# Wide-open CORS config for nginx
#
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#
# Om nom nom cookies
#
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
示例代码
location /{
add_header 'Access-Control-Allow-Origin' 'http://www.test.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET'; ...
... }
第一条指令:授权从http://www.test.com的请求
第二条指令:当该标志为真时,响应于该请求是否可以被暴露
第三天指令:指定请求的方法,可以是GET,POST等
如果需要允许来自任何域的访问,可以这样配置
Access-Control-Allow-Origin: *
通过后端程序来跨域
<?php
header("Access-Control-Allow-Origin:http://www.test.com");
header("Access-Control-Allow-Origin:*"); echo json_encode($_POST); ?>
<script type="text/javascript">
$("#ajax").click(function(){
$.ajax({
type: "POST",
url: "http://www.test.com/test2.php",
data: 'name=test',
dataType:"json",
success: function(data){
$('#Result').text(data.name);
}
});
});
</script>
JSONP
<?php
if(isset($_GET['name']) && isset($_GET['callback']))
//callback根js端要对应,不然会报错的
{
echo $_GET['callback']. '(' . json_encode($_GET) . ');
}
?> <script type="text/javascript">
$("#jsonp").click(function(){
$.ajax({
url: 'http://www.test.com/test1.php',
data: {name: 'jsonp'},
dataType: 'jsonp',
jsonp: 'callback', //为服务端准备的参数
jsonpCallback: 'getdata', //回调函数
success: function(){
alert("success");
}
});
}); function getdata(data){
$('#Result').text(data.name);
}
</script>
getJSON
<script type="text/javascript">
$("#getjson").click(function(){
$.getJSON('http://www.test.com/test1.php?name=getjson&callback=?', function(data){
//没有回调函数,直接处理
$('#Result').text(data.name);
})
})
</script>
getScript
<script type="text/javascript">
$("#getscript").click(function(){
$.getScript('http://www.test.com/test1.php?name=getscript&callback=getdata');
});
</script>