簡單請求和非簡單請求1
1此衅、瀏覽器發(fā)送跨域請求,如何判斷?
????瀏覽器在發(fā)送跨域請求的時候磺陡,會先判斷下是簡單請求還是非簡單請求让簿,如果是簡單請求敬察,就先執(zhí)行服務端程序,然后瀏覽器才會判斷是否跨域
2尔当、簡單請求
(1)工作中比較常見 【簡單請求】:
?????? 方法為:GET
???????????????????? HEAD
???????????????????? POST
(2)請求header里面:
????????????? 無自定義頭
????????????? Content-Type為以下幾種:
????????????????????text/plain
????????????????????multipart/form-data
????????????????????application/x-www-form-urlencoded
3莲祸、非簡單請求
????工作中常見的【非簡單請求】有:
????????put,delete方法的ajax請求
????????發(fā)送json格式的ajax請求
????????帶自定義頭的ajax請求
4椭迎、POST JSON請求
(1)postJson請求出現(xiàn)了跨域問題
(2)前端代碼
????????????????????// 測試jsonPost方法
???????????????????? it("測試jsonPost方法", function(done) {
??????????????????????????? //服務器返回的結果
??????????????????????????? varresult;
??????????????????????????? $.ajax({
?????????????????????????????????? url:base +"/postJson",
?????????????????????????????????? dataType:"json",
?????????????????????????????????? type:"post",
?????????????????????????????????? contentType:"application/json;charset=utf8",
?????????????????????????????????? data:JSON.stringify({name: "postJson wwl"}),
?????????????????????????????????? success:function(json){
????????????????????????????????????????? result= json;
?????????????????????????????????? }
????????????? ????????????? });
??????????????????????????? //由于是異步請求锐帜,需要使用setTimeout來校驗
??????????????????????????? setTimeout(function(){
?????????????????????????????????? expect(result).toEqual({
????????????????????????????????????????? "data": "postJson wwl"
?????????????????????????????????? });
?????????????????????????????????? //校驗完成,通知jasmine框架
?????????????????????????????????? done();
??????????????????????????? },100);
???????????????????? });
(3)后端代碼
????@PostMapping("/postJson")
??? @ResponseBody
???public ResultBean postJson(@RequestBody User user){
???????System.out.println("AjaxController.postJson()");
???????ResultBean resultBean = new ResultBean(user.getName());
???????return resultBean;
}
5畜号、解決POSTJSON請求跨域問題
(1)出現(xiàn)了跨域問題
(2)后端在響應頭中添加Access-Control-Allow-Headers字段
res.addHeader("Access-Control-Allow-Headers", "Content-Type");
(3)驗證是否解決跨域
這里有兩個postJson請求:
OPTIONS表示預檢命令缴阎,如果預檢通過之后,才會發(fā)送POST請求到服務端
這里只有一個postJson請求蛮拔,因為后臺程序沒有在響應頭里添加res.addHeader("Access-Control-Allow-Headers", "Content-Type")字段
OPTIONS預檢未通過,就不會發(fā)送POST請求到服務端