ajax自定義header跨域訪問webapi 405異常的解決方法
http://www.cnblogs.com/dowork/p/5068517.html
在ajax對webapi進行CORS跨域訪問過程中,如果自定義header,瀏覽器會發出一個options的請求。
詢問瀏覽器是否支援自定義的header型別。
webapi需要做如下處理,才能正常返回瀏覽器請求
1 在global中對options方法進行預處理,返回服務支援的header型別
protected void Application_BeginRequest(object sender, EventArgs e) { var res = HttpContext.Current.Response;var req = HttpContext.Current.Request; //自定義header時進行處理 if (req.HttpMethod == "OPTIONS") { res.AppendHeader("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie"); res.AppendHeader("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS"); res.StatusCode = 200; res.End(); } }
2 在Web.config中設定跨域引數
1 2 3 4 5 6 7 |
<httpProtocol>
<customHeaders>
<add
name= "Access-Control-Allow-Origin" value= "*" />
<add
name= "Access-Control-Allow-Headers" value= "*" />
<add
name= "Access-Control-Allow-Methods" value= "*" />
</customHeaders>
</httpProtocol>
|
3 瀏覽器經過預處理請求後即可自動訪問原始請求,請求呼叫順序如下
OPTIONS預處理請求:
1 2 3 4 5 6 7 8 9 10 11 |
OPTIONS
http: //localhost:8225/api/UserInfo/QueryUserByParam/
HTTP/1.1
Host:
localhost:8225
Connection:
keep-alive
Access-Control-Request-Method:
POST
Origin:
http: //localhost:5964
User-Agent:
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Access-Control-Request-Headers:
accept, content-type, token
Accept:
*/*
Referer:
http: //localhost:5964/Page/UserPage.aspx
Accept-Encoding:
gzip, deflate, sdch
Accept-Language:
zh-CN,zh;q=0.8
|
預處理請求成功:
1 2 3 4 5 6 7 8 9 10 11 |
HTTP/1.1
200 OK
Server:
Microsoft-IIS/10.0
Access-Control-Allow-Headers:
Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie
Access-Control-Allow-Methods:
POST,GET,PUT,PATCH,DELETE,OPTIONS
X-SourceFiles:
=?UTF-8?B?RDpcQ29kZVx0b2dvXOa6kOS7o+eggVx0cnVua1xUb2dvXDAxLlRvR28uV2ViQXBpXGFwaVxVc2VySW5mb1xRdWVyeVVzZXJCeVBhcmFtXA==?=
X-Powered-By:
ASP.NET
Access-Control-Allow-Origin:
*
Access-Control-Allow-Headers:
*
Access-Control-Allow-Methods:
*
Date:
Tue, 22 Dec 2015 15:19:22 GMT
Content-Length:
0
|
瀏覽器自動發出原始請求:
1 2 3 4 5 6 7 8 9 10 |
GET
http: //localhost:8225/api/Common/GetUserTypes
HTTP/1.1
Host:
localhost:8225
Connection:
keep-alive
Accept:
*/*
Origin:
http: //localhost:5964
User-Agent:
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Token:
dQTvMagtBk2cJg5WrpmcKQ
Referer:
http: //localhost:5964/Page/UserPage.aspx
Accept-Encoding:
gzip, deflate, sdch
Accept-Language:
zh-CN,zh;q=0.8
|
相關推薦
ajax自定義header跨域訪問webapi 405異常的解決方法
http://www.cnblogs.com/dowork/p/5068517.html 在ajax對webapi進行CORS跨域訪問過程中,如果自定義header,瀏覽器會發出一個options的請求。 詢問瀏覽器是否支援自定義的header型別。 webap
Geoserver通過ajax跨域訪問服務數據的方法(含用戶名密碼認證的配置方式)
methods -name sevlet ajax war包部署 ins 了解 thrown b- Goeserver數據有兩種,一種需進行用戶密碼的權限認證,一種無須用戶密碼。對於網上跨域訪問Geoserver數據的種種方法,對這2種數據並非通用。 筆者將Geoserve
Ajax通過jsonp實現跨域訪問,訪問成功但走error不走success的的問題解決
前提 最近工作中有個需求就是JS實現跨域訪問,眾所周知JS不能實現跨域訪問,但是”script”標籤卻可以,這是Jsonp實現的原理,這裡就不多講了,這裡主要講ajax通過Jsonp跨域訪問雖然返回200但總是走error不走success的解決方案
Ext.Ajax+Servlet+tomcate實現跨域訪問
最近在做後臺和前臺通訊,由於使用eclipse編寫前臺不方便,所以考慮是將前臺和後臺分開開發,後臺用eclipse,前臺用WebStorm開發,但是通過Ext.Ajax+Struts2訪問時發現不能跨域,配置了兩天也沒弄好,因此暫時就拋棄了Struts2使用最原始的Serv
解決ajax和spring的跨域訪問問題
1. 在 ajax的dataType中給出的屬性值是jsonp 2. 在請求的方法中加上引數名為callback的引數 3. 使用@ResponseBody標籤表明該方法為非同步請求方法,返回值為Object 在return後的虛擬碼為 return new J
ajax跨域問題的另類解決方法
我們知道瀏覽器基於安全的考慮,AJAX只能訪問本域下的資源,而不能跨域訪問。也就是說,domain1.com站點中的AJAX只能訪問domain1.com站點下的資源,而不能跨域訪問domain2.com站點中的資源.這就是AJAX跨域問題. 但如果要訪問不同域的資料時,由
SpringMVC同時使用<mvc:resources … />和裝配自定義轉換器Converter時出現問題的解決方法
一、問題由來 在學習SpringMVC的過程中,對於URL的攔截,使用了RESTful形式,因為使用了RESTful所以,在將Servlet作為Controller中的時候,web.xml中配置攔截的url-pattern就寫成了 / ,如下所示: <servlet> <
android-繼承BaseAdapter--自定義介面卡,getView執行多次的解決方法
定義的getView執行多次的ListView佈局: <ListView android:id="@+id/lv_messages" android:layout
ajax跨域 自定義header
1、前端ajax設定表頭資訊兩種方式: <script src="jquery.min.js"></script> <script > $(function(){ $.ajax({ //第一
跨域請求asp.net core webapi 介面,返回自定義header
這個簡單的問題對於初學core的我來說還是折騰了好久,然後加了一個群問了一下,終於解決了,感謝大神的指點; 官方api: 總結:閱讀官方的api文件很重要啊,慚愧啊; 然後以此備忘吧。 我在header裡面返回自定義引數count,startup.cs配置如下:
ASP.NET MVC & WebApi 中實現Cors來讓Ajax可以跨域訪問 (轉載)
詳細 簡介 part bsp bob 打印 不能 res user 什麽是Cors? CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了
IIS ajax CORS 訪問發送自定義Header時分析
nbsp post true cal 後臺 config -a coo function 場景: a站:http://127.0.0.1/a b站:http://localhost/b (IIS7.5) a站用ajax訪問b的資源,代碼如下: $.ajaxSetu
[轉]No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax跨域訪問解決方案
不能 ade 方式 ole 相同域名 all log head 允許 原 https://blog.csdn.net/zhoucheng05_13/article/details/53580683 No ‘Access-Control-Allow-Origin‘ heade
No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax跨域訪問解決方案
出現該錯誤是由於存在網站跨域訪問的問題。 什麼是網站跨域,簡單來講,當你通過ajax來請求或傳送資料時,兩個域名之間不能跨過域名來發送請求或者請求資料,瀏覽器會認為它是不安全的。 解決方式: 1、伺服器端解決方案 設定響應報文頭 response.setHeader
springboot2.0專案axios跨域options請求攜帶自定義header後臺接收不到
前臺發起請求後報錯 Failed to load http://192.168.1.107:8066/talk/queryList: Response to preflight request doesn't pass access control check: No 'Access-Cont
本地Ajax跨域訪問 No 'Access-Control-Allow-Origin' header is present on the requested resource.
XMLHttpRequest cannot load http://lefeier.net/storemessage.php. No ‘Access-Control-Allow-Origin’ header is present on the request
SpringMvc支援跨域和自定義header
<!-- 支援options型別請求 --> <servlet> <servlet-name>application</servlet-name> <servlet-class&g
[Ajax]設定Access-Control-Allow-Origin實現跨域訪問(Header)
ajax跨域訪問是一個老問題了,解決方法很多,比較常用的是JSONP方法,JSONP方法是一種非官方方法,而且這種方法只支援GET方式,不如POST方式安全。 即使使用jquery的jsonp方法,type設為POST,也會自動變為GET。 官方問題說明: “s
解決 js ajax跨域訪問報“No 'Access-Control-Allow-Origin' header is present on the requested resource.”錯誤
訪問 con tails request pre ade ont details -a 參考頁面:https://blog.csdn.net/idomyway/article/details/79572973 如果請求的是PHP頁面: header("Access-
解決jquery ajax在跨域訪問post請求的時候,ie9以下無效(包括ie9)的問題
jquery src actor div tick 屬性 dex 啟用 logs 最近在做項目的時候遇到一個問題,就是跨域請求ajax的時候ie9以下的瀏覽器不可以訪問,直接執行error裏面的代碼,但是也不報錯,就上網查了查,發現了一個很好用的方法,在這裏記錄一下,也希望