網(wǎng)絡協(xié)議 Day16 跨域、Cookie滚澜、Session

一粗仓、跨域、前后端分離

1.為了展示跨域問題,我們需要建立一個具有 web 功能的 java 項目借浊,了解下面的創(chuàng)建步驟塘淑。
  • ① 在 IntelliJ IDEA 的工具欄 File → New → Module
  • ② 選擇 Java,然后啥都不選蚂斤,直接下一步
步驟②圖示
  • 輸入項目名字 → 點 Finish 完成

  • ④ 剛剛我們創(chuàng)建完成的項目存捺,是一個普通的 Java 的項目,我們希望把它變成一個 web 項目曙蒸。選中項目 → 右鍵項目→ Add Frameworks Support → 勾選 Web Application

步驟④圖示
  • ⑤ 我們希望能在上述創(chuàng)建完成的項目中捌治,編寫 Servlet 的相關(guān)代碼,才能處理網(wǎng)絡請求纽窟。選中項目 → 點擊右上角的Project Structure → 選中 Dependencies → 選擇+號 → 選擇 Library
步驟⑤圖示
  • 選擇 Library 中的 Tomcat
步驟⑥圖示
  • ⑦ 接下來我們要創(chuàng)建一個用于處理網(wǎng)絡請求的 Servlet肖油。右鍵 src → New → Java Class → 輸入類名字 com.lsp.UserServlet

  • 讓 UserServlet 繼承自 HttpServlet → @WebServlet("/users") 規(guī)定請求路徑 → 敲出 doGet 和 doPost 方法

步驟⑧圖示
  • 創(chuàng)建一個普通 HTML 文件 → 如下圖布置 Tomcat 配置
步驟⑨圖示
  • 選擇 Deployment 進行項目配置 → 點擊 run tomcat 會自動打開 index.html 至此,配置完畢师倔。??ヽ(°▽°)ノ?
步驟⑩圖示
2. 簡述上述的主要過程?(4 個主要過程)
  • ① 創(chuàng)建普通 Java 項目
  • ② 讓項目具有 Web 功能
  • ③ 讓項目具有 Servlet 功能
  • ④ 在 Tomcat 上跑起來
3. 繼續(xù)完善上述項目 ①UserServlet 返回一個 Json 串; ②index.html 中使用ajax(異步請求)UserServlet 的數(shù)據(jù)
  • UserServlet.javadoPost 的代碼
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json; charset=UTF-8");
        StringBuilder sb = new StringBuilder();
        /*
        [
            {"name": "lsp1", "age": "11"},
            {"name": "lsp2", "age": "12"},
            {"name": "lsp3", "age": "13"},
            {"name": "lsp4", "age": "14"}
        ]
         */
        sb.append("[");
        sb.append("{\"name\": \"lsp1\", \"age\": \"11\"},");
        sb.append("{\"name\": \"lsp2\", \"age\": \"12\"},");
        sb.append("{\"name\": \"lsp3\", \"age\": \"13\"},");
        sb.append("{\"name\": \"lsp4\", \"age\": \"14\"}");
        sb.append("]");
        response.getWriter().write(sb.toString());
    }
  • index.htmlbody 的代碼
<body>
<button id="load-btn">顯示用戶數(shù)據(jù)</button>
<table>
    <tr>
        <th>用戶名</th>
        <th>年齡</th>
    </tr>
</table>
<script src="js/jquery.min.js"></script>
<script>
    $('#load-btn').click(() => {
        // AJAX請求(異步請求)
        $.getJSON('http://localhost:8080/cors/users', (users) => {
            const $table = $('table')
            for (const user of users) {
                const $tr = $('<tr>')
                $tr.append($(`<td>${user.name}</td>`))
                $tr.append($(`<td>${user.age}</td>`))
                $table.append($tr)
            }
        })
    })
</script>
</body>
  • 運行項目周蹭,我們能得到如下效果
運行效果圖
4. 上述代碼可以正常拿到數(shù)據(jù)趋艘,也沒有出現(xiàn)跨域訪問。但是在實際開發(fā)中凶朗,大部分情況下項目是 前后端分離的瓷胧,這就導致前端服務器 != 后端服務器,接下來我們造一個前后端分離的項目棚愤。
前后端分離
  • 分別啟動客戶端和服務端搓萧,我們會得到如下跨域錯誤
跨域錯誤
5. 同源策略是誰的?什么是同源策略宛畦?
  • 同源策略是:瀏覽器的
  • 它規(guī)定了 ①默認情況下瘸洛,AJAX 請求只能發(fā)給同源的 URL
  • 同源是指 3 個相同:協(xié)議、域名(IP)次和、端口
同源策略
6. 被同源策略阻止的請求反肋,這個請求有到達服務器嗎?
  • 有到達服務器踏施,是從服務器返回數(shù)據(jù)之后石蔗,瀏覽器因為同源策略拋棄了。
7.說幾個不受同源策略約束的標簽畅形?
  • img养距、audio、video日熬、link棍厌、script、iframe、a
8. 一般情況解決同源是前端解決定铜,還是后端解決阳液?
  • 基本上是從后端解決,當然前端也有一些解決跨域的辦法揣炕,但是主流還是從后端解決帘皿。
9. 跨域判斷:主要看請求頭的哪個參數(shù)相應頭哪個參數(shù)
  • 請求頭的哪個參數(shù):Origin 發(fā)起來一個針對跨域資源共享的請求
  • 響應頭的哪個參數(shù):Access-Control-Allow-Origin 可以指定哪些網(wǎng)站可參與到跨來源資源共享過程中
10. 服務端如何解決跨域訪問畸陡?
// 服務端設置CORS(允許別人能夠跨域訪問)
response.setHeader("Access-Control-Allow-Origin", "http://localhost:63342");
跨域訪問

二鹰溜、Cookie Session

1. 一般情況下,我們登錄一個(需要登錄的)網(wǎng)站的過程如下
image.png
  • 這三次請求是獨立的丁恭,所以 Http 也叫做無狀態(tài)請求曹动。
2.如果要做到服務器能知道該用戶是否登錄過,從而做判斷牲览,應該怎么辦墓陈?
  • ①給客戶端一個 token
  • ②cookie 和 session 的方案
3. 什么是 Cookie?什么是 Session第献?(從存在哪里贡必,誰能控制兩個方面回答)
  • Cookie :存在瀏覽器端,可以由服務端可以返回 Cookie 交給客戶端去存
  • Session :存儲在服務端庸毫,由服務端自己控制
4. 使用 cookie 和 session 技術(shù)標識用戶狀態(tài)的流程
image.png
  • cookie 和 session 是用來做會話跟蹤仔拟,可以讓多個獨立的請求之間,建立起聯(lián)系
5.簡述下面代碼做了哪三件事情飒赃?
HttpSession session = request.getSession();
session.setAttribute("username", username);
session.setAttribute("password", password);
  • ①獲取 Session 對象(如果沒有會創(chuàng)建)
  • ②設置 Session 對象的里面的 username 和 password
  • ③在服務端給瀏覽器的返回頭中利花,會自動帶上 response.setHeader("Set-Cookie", "JESESSIONID=666")
6. 默認情況下 Cookie 存在的時間?
  • 我們可以給 Cookie 設置過期時間载佳,比如一周炒事。
  • 但是默認情況下,瀏覽器關(guān)閉蔫慧, Cookie就消失了羡洛。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市藕漱,隨后出現(xiàn)的幾起案子欲侮,更是在濱河造成了極大的恐慌,老刑警劉巖肋联,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件威蕉,死亡現(xiàn)場離奇詭異,居然都是意外死亡橄仍,警方通過查閱死者的電腦和手機韧涨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門牍戚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虑粥,你說我怎么就攤上這事如孝。” “怎么了娩贷?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵第晰,是天一觀的道長。 經(jīng)常有香客問我彬祖,道長茁瘦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任储笑,我火速辦了婚禮甜熔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘突倍。我一直安慰自己腔稀,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布羽历。 她就那樣靜靜地躺著焊虏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窄陡。 梳的紋絲不亂的頭發(fā)上炕淮,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天拆火,我揣著相機與錄音跳夭,去河邊找鬼。 笑死们镜,一個胖子當著我的面吹牛币叹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播模狭,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼颈抚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嚼鹉?” 一聲冷哼從身側(cè)響起贩汉,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锚赤,沒想到半個月后匹舞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡线脚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年赐稽,在試婚紗的時候發(fā)現(xiàn)自己被綠了叫榕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡姊舵,死狀恐怖晰绎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情括丁,我是刑警寧澤荞下,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站躏将,受9級特大地震影響锄弱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祸憋,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一会宪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚯窥,春花似錦掸鹅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荷鼠,卻和暖如春句携,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背允乐。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工矮嫉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牍疏。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓蠢笋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鳞陨。 傳聞我的和親對象是個殘疾皇子昨寞,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容