日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP系列之:HTTP中的cookies

發(fā)布時間:2024/2/28 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP系列之:HTTP中的cookies 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • cookies的作用
  • 創(chuàng)建cookies
  • cookies的生存時間
  • cookies的權(quán)限控制
  • 第三方cookies
  • 總結(jié)

簡介

如果小伙伴最近有訪問國外的一些標準網(wǎng)站的話,可能經(jīng)常會彈出一個對話框,說是本網(wǎng)站為了更好的體驗和跟蹤,需要訪問你的cookies,問你同意不同意,對于這種比較文明的做法,我一般是點同意的。

但是轉(zhuǎn)頭一想,為什么訪問國內(nèi)的網(wǎng)站從來沒有彈出過這個提示呢?這是一個值得深思的問題,或許當你看完這篇文章之后,就有了答案。

cookies的作用

那么cookies有什么作用呢?HTTP cookies就是服務(wù)器端發(fā)送給瀏覽器端的一小部分數(shù)據(jù),瀏覽器接收到這個數(shù)據(jù)之后,可以存起來自己用,也可以在后續(xù)發(fā)送到server端進行一些數(shù)據(jù)的校驗。

通過在cookies中存儲一些有用的數(shù)據(jù),可以將無狀態(tài)的HTTP協(xié)議變成有狀態(tài)的session連接,或者用來保存登錄的權(quán)限,下次不用密碼即可登陸,非常有用。

一般來說,cookies用在三個方面:

  • session的管理,用來保存登錄狀態(tài),從而讓HTTP請求可以帶上狀態(tài)信息。
  • 用戶自定義的設(shè)置,這些用戶特殊的字段,需要保存在cookies中。
  • 跟蹤用戶的行為信息。
  • 在很久很久以前,還沒有現(xiàn)代瀏覽器的時候,客戶端的唯一存儲就是cookies,所以cookies也作為客戶端存儲來使用的,但是有了現(xiàn)代的瀏覽器之后,一般是建議把客戶端存儲的數(shù)據(jù)放到其他存儲方式中。

    為什么呢?

    因為每次請求cookies中的數(shù)據(jù)會自動帶上,并且發(fā)送到server端,所以如果cookies中存儲了太多的數(shù)據(jù),就會導(dǎo)致服務(wù)器性能的下降。

    創(chuàng)建cookies

    因為cookies是客戶端的本地存儲,所以如果服務(wù)器端想要設(shè)置客戶端的cookies時,通過在響應(yīng)頭中設(shè)置Set-Cookie,瀏覽器接收到這個響應(yīng)頭之后,就會將對應(yīng)的cookies內(nèi)容存儲到瀏覽器本地。

    然后在后續(xù)的服務(wù)器請求中都會帶上Cookie header。同時cookie還可以帶上過期時間、發(fā)送限制等屬性。

    先來看下Set-Cookie的格式:

    Set-Cookie: <cookie-name>=<cookie-value>

    舉個例子,下面是一個server端的響應(yīng):

    HTTP/2.0 200 OK Content-Type: text/html Set-Cookie: name=flydean Set-Cookie: site=www.flydean.com

    當瀏覽器接收到這個響應(yīng)之后,就會在本地的cookies中設(shè)置對應(yīng)的值,并且在后續(xù)的請求中將這些值以cookies的header形式帶上:

    GET /test.html HTTP/2.0 Host: www.flydean.com Cookie: name=flydean; site=www.flydean.com

    在netty中提供了一個Cookie的類,專門用來表示cookies,這個類中提供了cookies的基本屬性,然后通過使用:

    response.headers().add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode(cookie));

    來對響應(yīng)頭進行設(shè)置。

    cookies的生存時間

    HTTP的cookies有兩種,一種是session cookies,這種cookies會在session結(jié)束之后自行刪除。

    還有一種cookies通過指定Expires或者 Max-Age 來設(shè)置過期時間:

    Set-Cookie: id=abcdef; Expires=Thu, 31 May 2021 08:00:00 GMT;

    其中Expires是HTTP1.0中定義的header,Max-Age是HTTP1.1中定義的header。

    cookies的權(quán)限控制

    HTTP提供了兩個屬性來對cookies的權(quán)限進行控制,分別是Secure和HttpOnly。

    如果cookies中帶有Secure屬性,那么cookies只會在使用HTTPS協(xié)議的時候發(fā)送給服務(wù)器。如果使用的是HTTP協(xié)議,則不會發(fā)送cookies信息。

    并且,如果是在http的情況下,server端是不允許給cookie設(shè)置Secure屬性的。

    但是設(shè)置了Secure屬性并不意味著cookies就是安全的,因為可以從其他的手段拿到瀏覽器端的cookies。

    還有一個屬性是HttpOnly,如果cookies設(shè)置了HttpOnly,那么cookies是不允許被JavaScript訪問的,通過設(shè)置HttpOnly,我們可以提升客戶端數(shù)據(jù)的安全性:

    Set-Cookie: id=abcdef; Expires=Thu, 21 May 2021 08:00:00 GMT; Secure; HttpOnly

    cookies還可以添加Domain和Path屬性,用于標記cookies可以發(fā)送到的URL。

    其中Domain表示域名,而Path表示路徑。

    如果Domain沒有設(shè)置,則默認是設(shè)置cookies的host,這個host是不包含子domain的。如果手動指定了Domain,那么子domain是會包含在內(nèi)的。

    比如如果我們設(shè)置了Domain=flydean.com,那么子domain:doc.flydean.com也會共享這個cookies。

    Path用來匹配URL的路徑,只有匹配到的URL才可以發(fā)送cookies。

    另外HTTP還提供了一個SameSite屬性,表示如果是在CORS環(huán)境情況下,是否發(fā)送cookies到第三方網(wǎng)站,這樣可以在一定程度上保護網(wǎng)站的信息。

    SameSite有三個可能的值,分別是Strict, Lax, 和 None。如果在Strict情況下,那么cookie僅發(fā)送到與創(chuàng)建它的站點相同的站點。Lax跟Strict類似,不同之處在于當用戶導(dǎo)航到cookie的原始站點時發(fā)送cookie,比如通過訪問外部站點的鏈接。 None可以在原始網(wǎng)站和跨站資源訪問中使用,但是必須要在安全的環(huán)境中進行(設(shè)置Secure屬性)。如果沒有設(shè)置SameSite,那么表現(xiàn)是和Lax一致的。

    例如:

    Set-Cookie: name=flydean; SameSite=Strict

    第三方cookies

    我們知道cookies是和domain相關(guān)的,如果cookies的domain是和當前訪問的頁面相同的話,這個cookies就叫做 first-party cookies。如果和當前的訪問頁面不同,比如訪問第三方的圖片、腳本、css等,第三方的服務(wù)器有可能會發(fā)送他們自己的cookies,這種cookies叫做第三方cookies,第三方cookies主要被用來廣告或者跟蹤用戶的行為信息。

    對于有些瀏覽器來說,可能會禁用第三方的cookies,這有可能會導(dǎo)致訪問網(wǎng)站的一些功能問題,大家可以主要觀察一下。

    總結(jié)

    使用cookies可以輔助我們做很多事情,但是也要注意cookies的安全性。

    本文已收錄于 http://www.flydean.com/05-http-cookie/

    最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!

    歡迎關(guān)注我的公眾號:「程序那些事」,懂技術(shù),更懂你!

    總結(jié)

    以上是生活随笔為你收集整理的HTTP系列之:HTTP中的cookies的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。