自學NodeJS設定Header
服務端設定CORS 只允許127.0.0.1:8888進行跨域請求就可以這樣設定
response.writeHead(200,{ 'Access-Control-Allow-Origin':'http://127.0.0.1:8888' }) 複製程式碼
CORS的預請求
我們前端如果在header裡攜帶了token,那麼後臺則需要做一下類似的配置:
response.writeHead(200,{ 'Access-Control-Allow-Origin':'http://127.0.0.1:8888',//允許請求的網址 'Access-Control-Allow-Headers':'Token',//允許攜帶的欄位名稱 'Access-Control-Allow-Methods':'POST,PUT,DELETE',//允許的方法型別 'Access-Control-Max-Age':'10000' //一萬秒內讓瀏覽器不再發起OPTION預請求,直接發起正式請求 }) 複製程式碼
快取頭(Cache-Control)含義和使用
Cache-Control的可快取性:
public(http經過的任何地方都可以進行快取)
private (發起請求的伺服器才可以進行快取)
no-cache(都不可以進行快取)
到期:
max-age=seconds(快取多少秒後過期)
s-maxage=seconds(它能代替max-age=seconds
,但是隻有在代理伺服器裡才會生效,也就是說在瀏覽器端最終還是會讀取max-age=seconds
)
服務端如何設定Cache-Control
response.writeHead(200,{ 'Cache-Control':'max-age=200' }) 複製程式碼
no-cache,Last-Modified,Etag
服務端如何設定no-cache
response.writeHead(200,{ 'Cache-Control':'max-age=200000, no-cache', 'Last-Modified':'123',//隨便寫 'Etag':'777'//隨便寫 }) 複製程式碼
設定no-cache後那個檔案始終都會去伺服器請求,不會讀取本地的資源,max-age會失效 設定'Last-Modified'和'Etag'後瀏覽器在下次請求時會攜帶if-Modified-Since:123和if-Node-Match:777去驗證資源是否被更改
瀏覽器就可以取得etag的值返回304告訴瀏覽器資源沒有變更,直接讀取本地就可以了
if(request.headers['if-none-match'] === '777'){ response.writeHead(304,{ 'Cache-Control':'max-age=200000, no-cache', 'Last-Modified':'123', 'Etag':'777' }) response.end('') }else{ response.writeHead(200,{ 'Cache-Control':'max-age=200000, no-cache', 'Last-Modified':'123',//隨便寫 'Etag':'777'//隨便寫 }) } 複製程式碼
如果服務端設定了no-store則會忽略header裡面任何與快取相關的引數,每次還是會去伺服器請求資源
Cookie
服務端設定Cookie
response.writeHead(200,{ 'Cache-Control':'max-age=200000, 'Set-Cookie':['id=123;max-age=2','abc=456;domain=test.com'] }) 複製程式碼