CORS跨域-Nginx使用方法(Access-Control-Allow-Origin錯誤提示)
問題說明
當出現上圖這個的時候,是訪問請求外域URL無法訪問,瀏覽器認為訪問外域URL不安全,導致訪問不了簡稱跨域問題。而這上面出現一句很重要的話“NO Access-Control-Allow-Origin”,這個是什麼?是不是隻要新增“Access-Control-Allow-Origin”頭就能訪問呢?如何新增?會不會有其他問題?
Access-Control-Allow-Origin 表示允許訪問的外域 URI
例子:
Access-Control-Allow-Origin: http://www.a.com
允許訪問www.a.com站點Access-Control-Allow-Origin: *
“*”允許訪問任何外域URL
這個是由服務端那邊設定的,讓服務端告知瀏覽器允許這個站點訪問。那就是說只要設定了這個引數,那就能跨域了。而這種跨域方式也就叫CORS。
CORS是一個W3C標準,全稱是”跨域資源共享”(Cross-origin resource sharing)。
它允許瀏覽器向跨源伺服器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。本文就是談CORS技術實現。
技術介紹
當我們出現跨域提示的時候,其實我們已經向伺服器已經完成一次傳送和接收請求(請求是傳送連線的url)。伺服器接收請求後通知瀏覽器,告訴瀏覽器不能訪問外域站點。瀏覽器會顯示不能訪問原因,顯示訪問外域失敗。
而CORS就是在伺服器上,設定Response Headers 返回引數Access-Control-Allow-Origin,Access-Control-Allow-Headers,Access-Control-Allow-Methods,讓站點能訪問外域。
引數 | 說明 |
---|---|
Control-Allow-Origin | 表示允許訪問的外域請求。 |
Access-Control-Allow-Headers | 首部欄位用於預檢請求的響應。其指明瞭實際請求中允許攜帶的首部欄位。 |
Access-Control-Allow-Methods | 首部欄位用於預檢請求的響應。其指明瞭實際請求所允許使用的 HTTP 方法。 |
如何操作
1.看到下圖我們傳送請求的時候 在Request Headers 中Origin:http://www.a.com,Origin是我們當前站點URL域名。
2.Nginx伺服器接收後會檢視是不是配置CORS,如果是檢視配置的域名是不是匹配如下圖:http://www.a.com,匹配允許這個站點訪問。
3.使用CORS傳送請求,第一個請求會是”OPTIONS”這個是設定返回頭並且返回成功。之後會自動再發一個post/get請求,成功傳送到伺服器。這樣程式碼以及可以成功跨域了。
4.最後在看一下Response Headers 發現Access-Control-Allow-Origin設定http://www.a.com的域名了。代表已經成功設定好CORS了。
相容性
pc相容ie8以上,手機端上隨意用。如果想相容更低版本瀏覽器請使用JSONP或者Nginx做代理。
Nginx配置程式碼
在Nginx中的nginx.cof中新增下面程式碼就可以實現CORS跨域了。
set $origin '*';#寫入需要跨域的請求地址
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
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' $origin;
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' $origin;
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';
}
Springboot配置程式碼
@Configuration
public class CorsConfig {
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
// 設定你要允許的網站域名,如果全允許則設為 *
config.addAllowedOrigin("http://localhost:4200");
// 如果要限制 HEADER 或 METHOD 請自行更改
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
// 這個順序很重要哦,為避免麻煩請設定在最前
bean.setOrder(0);
return bean;
}
}
Node express配置程式碼
var app = express();
//設定跨域訪問
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
app.listen(6064);
相關推薦
CORS跨域-Nginx使用方法(Access-Control-Allow-Origin錯誤提示)
問題說明 當出現上圖這個的時候,是訪問請求外域URL無法訪問,瀏覽器認為訪問外域URL不安全,導致訪問不了簡稱跨域問題。而這上面出現一句很重要的話“NO Access-Control-Allow-Origin”,這個是什麼?是不是隻要新增“Access-C
Cesium載入傾斜攝影模型,cors跨域的問題No 'Access-Control-Allow-Origin' header is present on the requested resource
用Cesium載入傾斜攝影模型時,會存在cors跨域的問題,報No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:
Cors跨域請求,配置Access-Control-Allow-Origin:"*",無效解決方案
由於應用需要跨域請求資料,博主在JDK8、Tomcat7.0的cors可以配置Access-Control-Allow-Origin:"*",但是我按照文件配置以後卻沒有生效,一度懷疑是tomcat或者jdk的問題,最後想起來web.xml是按照從前往後的順序載入的。解
Ajax跨域請求No 'Access-Control-Allow-Origin' header is present on the requested resource
背景 安裝完nodejs並使用React傳送Ajax請求時,日誌列印No ‘Access-Control-Allow-Origin’ header is present on the requested resource。 解決方案 之前的部落格中的專案存在SessionFilt
js跨域訪問,No ‘Access-Control-Allow-Origin‘ header is present on
在本地用ajax跨域訪問請求時報錯: XMLHttpRequest cannot loadhttp://www.zjblogs.com/. No 'Access-Control-Allow-Origin' header is present on the requested r
【html5】在PHP處理js的跨域請求問題:Access-Control-Allow-Origin
在javascript與伺服器的請求中,例如POST。 前提條件:如果你使用了自定義的headers引數content-type,將會被判定為複雜請求。 這時候,在請求資料之前,客戶端會發出一個型別為options的預檢資料。 用來讓伺服器確認此次的請求是否符合安全要求
跨域問題:“No'Access-Control-Allow-Origin'headerispresentontherequestedresource”解決
今天試了一下只用SpringMVC寫介面,然後用本地的 ajax 去訪問介面請求 json 資料,但瀏覽器報了一個“跨域”請求的錯誤,個人理解的跨域問題是,服務端和客戶端的請求不在同一個域名下,但是我這都是在本機上部署的呀,這是什麼問題呢? 原來我理解的“跨域”只是我個人的
ajax跨域請求:No 'Access-Control-Allow-Origin' header is present on the requested resource
ajax跨域請求報錯解決辦法<script type="text/javascript"> $(document).ready(function () { $.ajax({ type : "POST", url : "h
nuxt.js 本地開發跨域問題(Access-Control-Allow-Origin)及其解決方案
先執行npm i @gauseen/nuxt-proxy -D 再nuxt.config.js的module.exports 裡面新增如下程式碼 modules:[ '@nuxtjs/axios', // 請求代理配置,解決跨域 '
nginx 配置add_header 'Access-Control-Allow-Origin' '*' 依然存在跨域問題
1.問題描述: 前端域名A 在POST請求後端域名為B 的一個介面時候請求成功時不存在跨域問題,請求失敗時瀏覽器提示跨域。 解決: 當請求成功時,HTTP CODE 為200。而請求失敗時HTTP CODE 為400, 此時add_header ‘Access-
OSS設定CORS規則以後還是報No 'Access-Control-Allow-Origin'解決方法
在OSS控制檯設定了CORS規則以後,通過JS程式去呼叫的時候報No 'Access-Control-Allow-Origin' header is present on the requested resource,可以通過下面的思路來進行下排查: 1. 確認檢查C
Nginx配置跨域請求 Access-Control-Allow-Origin *
默認 all 之前 methods 不包含 通知 text options flight 當出現403跨域錯誤的時候 No ‘Access-Control-Allow-Origin‘ header is present on the requested resource,需
No 'Access-Control-Allow-Origin' header is present on the requested (前段vue訪問springboot跨域報錯)
做前端H5的時候。請求另外一個伺服器上的資料。用抓包工具發現已經請求成功,且有資料返回。但是在谷歌F12開啟之後。發現沒有返回;且報錯No 'Access-Control-Allow-Origin' header is present on the requested 。經檢視部落格。發現解決方法
header頭設定解決 “已攔截跨源請求:同源策略禁止讀取位於 http://47.104.128.87/back/test/test 的遠端資源。(原因:CORS 頭缺少 'Access-Control-Allow-Origin')。”
跨域請求錯誤提示如下圖: 解決方法在請求的php頁面新增header頭: 程式碼如下: public function test() { //支援全域名訪問,不安全,部署後需要固定限制為客戶端網址 header('Access-Control-Allow-Origin:*'
Nginx 跨域設定 Access-Control-Allow-Origin 無效的解決辦法
nginx 版本 1.11.3 使用大家說的以下配置,驗證無效,跨域問題仍然存在 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials'
Java 無法跨域問題(No 'Access-Control-Allow-Origin'..)
轉至:http://www.111cn.net/jsp/Java/119383.htm http://blog.csdn.net/wo541075754/article/details/50696841 1,問題描述 使用 H5 開發了一個本地應用,通過 aja
No 'Access-Control-Allow-Origin' header is present on the requested resource', 跨域訪問的解決方法
1. 當請求不在同一域名下的資原始檔(ip地址+埠號)時,會報如下錯誤: “No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://
Vue專案跨域設定,axios跨域不成功的一個小問題( Vue CLI3跨域請求,Vue proxyTable配置,Access-Control-Allow-Origin )
Vue專案,因為前後端分離,所以在請求後端介面時,時常遇到跨站問題, 2、如果前後端部署在同一個域名,就不會有跨域問題,但一般是生產環境部署是同一個域名下,但在開發環境時,並不是同域名呀,所以開發時呼叫介面返回類似“No 'Access-Control-Allow-Or
AJAX跨域“Access-Control-Allow-Origin” JAVA WEB個人解決方法
ajax跨域訪問是一個老問題了,解決方法很多,比較常用的是JSONP方法,JSONP方法是一種非官方方法,存在各種問題,大家可以自行百度。 我們專案使用Spring Web MVC,如果你們沒有用Spring Web MVC也不用擔心,因為方法是通用的。 解決方法:通過設
CORS 頭缺少 'Access-Control-Allow-Origin'(跨域訪問不允許)
用web開發移動應用時遇到了這麼個問題,想要在移動端載入伺服器上的一個php檔案,結果無法載入,瀏覽器顯示 原因是這樣的,這涉及到了一個跨域訪問的問題,比如 你的應用在"www.test1.com"上面,你想從"www.test2.com"上面載入資料,這樣是無法載入的