成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HTTP基本知識、跨域和調(diào)試技巧

開發(fā) 前端
其實很多面試問HTTP的3次握手,4次揮手,我覺得價值不大,可以幫助你理解HTTP的原理,死背硬記的對于你開發(fā)沒有作用,而是去理解它就行。

 [[262584]]

HTTP基礎

其實很多面試問HTTP的3次握手,4次揮手,我覺得價值不大,可以幫助你理解HTTP的原理,死背硬記的對于你開發(fā)沒有作用,而是去理解它就行。

前端只關心URL、headers和data,接下來也圍繞著它們展開。

了解HTTP請求可以看看:https://developer.mozilla.org...

1.了解URL

URL比較簡單,就簡單介紹一下,將URL分為主要的3部分:

 1.  router,路由。路由地址可不能錯,這就跟收件地址一樣,填錯收貨的就不是既定的那個人了。

 2.   search,查詢字符串,就是?后面的字符串,以鍵值對的形式通過“&”連接,例如:“?key1=value1&key2=value2”。查詢字符串就是發(fā)送到后臺的數(shù)據(jù),跟普通的post請求相比,get請求以明文的形式存儲在訪問歷史,瀏覽器和路由器都很容易查得到,容易泄露,所以不建議用get請求;其次一般瀏覽器都有限制URL的長度,所以不適合發(fā)送大數(shù)據(jù)量的數(shù)據(jù)。

 3.   hash,哈希值或者稱為錨,是#后面的字符串,一般作為單頁應用的路由地址,或者文檔的錨。

2.前端常用的headers

2.1.Content-Type(重要)

告訴客戶端,用什么形式前端的數(shù)據(jù)發(fā)送到后臺:application/x-www-form-urlencoded、multipart/form-data、text/plain等。

2.2 application/x-www-form-urlencoded

最常見的方式以鍵值對的字符串傳輸(類似URL的search),但不能傳輸文件,幾乎所有的ajax框架都是默認以此種方式發(fā)送。

發(fā)送到后臺的數(shù)據(jù)見下圖:

2.3 multipart/form-data

這種方式會以鍵值對的形式通過分隔符鏈接,以字符串給后臺,可以傳輸文件,也可以傳輸普通數(shù)據(jù)。

常用場景: 

  1. // 源生的form提交可設置enctype="multipart/form-data",一般表單中有文件會自動設為該值  
  2. <form action="post" enctype="multipart/form-data"></form>  
  3. // ajax請求,通過formdata對象來達成此目的  
  4. const formdata = new new FormData();  
  5. formdata.append("key","value")  
  6. $.ajax({  
  7. ...  
  8. data: formdata,  
  9. processData: false,    // 取消對數(shù)據(jù)的預處理,因為formdata不需要預處理  
  10. headers: {  
  11.    "Content-Type": undefined    // 客戶端會自動給它設置正確的值,不要設為multipart/form-data,這樣設的后果會導致分隔符不正確  
  12. },  
  13. ...  
  14. }) 

如果在抓包確認劃線的一致的話就是正確發(fā)送過去了。

2.4text/plain

這個很少會用到了,普通文本,可以是任意數(shù)據(jù),除了文件。

2.5binary

二進制流,僅限一個文件。

3 Data-Type

告訴后臺你希望返回什么類型的數(shù)據(jù),如xml,html,script,json,jsonp,text等,或者你跟后臺約定的也可。但是實際返回的并非跟預期一致,還是由后臺決定的。

4 自定義header

如果跟后臺有約定header,如token等,也可傳到后臺。 

  1. headers["token"] = "MD5KEY"; 

CORS跨域

跨域問題的根本問題就是同源策略,旨在防止網(wǎng)站被攻擊,這里不做贅述。

CORS是后臺的工作,但前端工程師還是要了解CORS,這樣才有后臺抬杠的資本。以下是后臺response配置CORS的headers,如果后臺不懂,請讓他了解了解CORS。

Access-Control-Allow-Origin

簡單說,允許跨域訪問的host,必須設置,否則不允許跨域。 

  1. // 如需允許所有資源都可以訪問您的資源,您可以如此設置:  
  2. Access-Control-Allow-Origin: *  
  3. // 如需允許https://developer.mozilla.org訪問您的資源,您可以設置:  
  4. Access-Control-Allow-Origin: https://developer.mozilla.org 

Access-Control-Allow-Credentials

如果想跨域傳輸cookies,需要Access-Control-Allow-Credentials與XMLHttpRequest.withCredentials 或Fetch API中的Request() 構造器中的credentials 選項結合使用。Credentials必須在前后端都被配置(即the Access-Control-Allow-Credentials header 和 XHR 或Fetch request中都要配置)才能使帶credentials的CORS請求成功。

Access-Control-Request-Method

允許跨域的請求的方法。 

  1. Access-Control-Allow-Methods: POST, GET, OPTIONS 

Access-Control-Allow-Headers

response的header中Access-Control-Allow-Headers 用于 preflight request (即會在實際請求發(fā)送之前先發(fā)送一個option請求)中,列出了將會在正式請求的 Access-Control-Expose-Headers 字段中出現(xiàn)的首部信息。

簡單首部,如 simple headers、Accept、Accept-Language、Content-Language、Content-Type (只限于解析后的值為 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 三種MIME類型(不包括參數(shù))),它們始終是被支持的,不需要在這個首部特意列出。

preflight request--options請求

很多人在抓包時會很郁悶怎么會無端端多出了一個OPTIONS請求,請不要奇怪,這只是CORS策略的預檢請求,就像你要去跟別人借個東西,要先問問對方肯不肯一樣。

什么情況下會發(fā)送OPTIONS請求?

簡單的說,就是有自定義headers,Content-Type的值不屬于下列之一:application/x-www-form-urlencoded,multipart/form-data,text/plain的請求會觸發(fā)OPTIONS請求。如果產(chǎn)生OPTIONS請求,需要后臺去響應它,允許它跨域。

https://www.jianshu.com/p/b55... 可以參考篇文章。

抓包和問題分析

PS: 我主要使用Chrome的DevTools工具

確保發(fā)送的數(shù)據(jù)沒問題

不要相信你的代碼,以抓包工具的為準!?。。?!要相信如果抓包的數(shù)據(jù)有問題,那么就是你的代碼有問題。

不要相信你的代碼,以抓包工具的為準!!?。?!要相信如果抓包的數(shù)據(jù)有問題,那么就是你的代碼有問題。

不要相信你的代碼,以抓包工具的為準?。。。。∫嘈湃绻グ臄?shù)據(jù)有問題,那么就是你的代碼有問題。

  1.  URL確保跟后臺約定的一致
  2.  headers要尤其關注Content-Type(請關注上文的Content-Type),GET請求沒有Content-Type.
  3.  請求的參數(shù)是否正確

后臺返回什么了?

如果你確認你發(fā)送的數(shù)據(jù)沒問題,那么該看看后臺響應了什么,如果響應的數(shù)據(jù)有問題,那么是后臺的責任。

如果是跨域的要查看有沒有響應CORS的請求頭。

 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2010-07-28 15:52:00

Flex

2011-11-23 10:35:53

2017-04-12 11:47:32

2009-06-26 14:42:08

2017-10-20 22:40:54

電線電纜導體

2020-07-20 07:10:44

數(shù)據(jù)中心IT技術

2018-11-27 15:51:10

MySQL數(shù)據(jù)庫查詢優(yōu)化

2009-06-11 14:40:32

Java list

2010-01-28 11:18:14

Android界面布局

2010-05-06 17:41:19

Unix命令

2012-06-05 00:41:07

JavaJava內(nèi)存

2017-02-20 23:05:14

JavaScript

2010-06-13 13:49:14

2009-12-22 14:43:38

Linux操作系統(tǒng)

2020-07-16 15:00:56

MySQL索引數(shù)據(jù)庫

2009-08-28 16:53:05

C# for語句

2010-06-17 13:22:40

UML用例建模

2010-04-21 18:38:36

Unix網(wǎng)絡

2012-05-08 09:10:56

WCF

2010-06-10 11:41:57

MPLS協(xié)議棧結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区视频在线 | 精品国产一区二区三区性色av | 成人免费大片黄在线播放 | 国产一区二区三区四区五区加勒比 | 综合视频在线 | 欧美不卡一区二区 | 91亚洲欧美 | 成人午夜精品一区二区三区 | 欧美国产亚洲一区二区 | 色悠悠久 | 欧美视频二区 | 精品中文字幕在线观看 | 国产日韩一区二区 | 在线中文视频 | 久久青青| 在线一区二区三区 | av三级在线观看 | 91免费在线| 精品中文在线 | 国产精品99久久久久久www | 国产精品毛片一区二区三区 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产一级在线 | 一区二区三区四区在线播放 | 日韩亚洲视频 | 一区二区三区视频在线观看 | 日本成人毛片 | 有码在线| 中文欧美日韩 | 中文字幕韩在线第一页 | 亚洲成av| 九色在线视频 | 91精品久久久久久久久中文字幕 | 国产一区二区观看 | 亚洲国产高清在线 | 日韩中文字幕在线视频 | 91国内精品久久 | 精品国产欧美一区二区三区不卡 | 国产精品一区二区在线 | 天天天天操 | 美女在线视频一区二区三区 |