ajax 跨域 headers JavaScript ajax 跨域請求 +設置headers 實踐

解決跨域調用服務並設置headers 主要的解決方法須要經過服務器端設置響應頭、正確響應options請求,正確設置 JavaScript端須要設置的headers信息 方能實現。前端

此處手札 供後人參考~web

1.第一步 服務端設置響應頭ajax

header('Access-Control-Allow-Origin:*');  //支持全域名訪問,不安全,部署後須要固定限制爲客戶端網址chrome

header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); //支持的http 動做後端

header('Access-Control-Allow-Headers:x-requested-with,content-type');  //響應頭 請按照本身需求添加。跨域

2.第二部 瞭解IE chrome 等瀏覽器 對於 跨域請求並要求設置Headers自定義參數的時候的 "預請求"   就是若是遇到 跨域並設置headers的請求,全部請求須要兩步完成!瀏覽器

A 第一步:發送預請求 OPTIONS 請求。此時 服務器端須要對於OPTIONS請求做出響應 通常使用202響應便可 不用返回任何內容信息。(能看到這份手稿的人,本人不相信你後臺處理不了一個options請求)安全

B 第二步:服務器accepted 第一步請求後 瀏覽器自動執行第二步 發送真正的請求。此時 大多數人 會發現請求成功了,可是 有那麼幾我的會發現 請求成功了可是沒有任何信息返回 why?由於你自定義的請求頭在服務器響應中不存在!服務器

查看console輸出 會發現一個問題:spa

「Access-Control-Allow-Headers 列表中不存在請求標頭 XXXXXX」【IE】,

request header field xxxxxx is not allowed by Access-Control-Allow-Header【chrome】

這是由於 你的XXXX請求頭 沒有在服務器端被容許哦~

遇到這個問題 只有經過修改服務器端來完成,舉例:須要設置 requesttype這麼一個自定義頭,那麼 你須要在 服務端裏面 將header('Access-Control-Allow-Headers:x-requested-with,content-type,requesttype');  同窗們自行體會吧 這種語法就是根據「,」分割 本身須要設置什麼頭,必需要在 服務端請求的響應頭裏面設置好,否則客戶端永遠永遠提交不上去!

至此  JavaScript/ajax  跨域+ 修改httpheader 任務完美實現。前端 後端徹底分離 大道自成!先後期分離迎來曠古的潮流

 次處做爲見證 2016年1月25日20:21:28

"人們都一直在抱怨 JavaScript同源策略限制了web前端的發展!然而是服務端作的不夠細緻!"

部分代碼參考以下:代碼只是提供了思想,具體步驟還要根據以上的文字 自行揣摩實現。以上內容看不懂 說明對於web一點也不瞭解,須要買本書看看嘍~(本人我的經歷成功實現。如有人遇到一樣的問題能夠 加羣245961308)

客戶端代碼:

 

服務器端代碼

相關文章
相關標籤/搜索