Http基礎之http協議、無狀態協議、狀態碼、http報文、跨域-cors

Http基礎

  • HTTP基礎
    • HTTP協議
      • 請求方法
      • 持久連接
      • 管線化
    • 無狀態協議
      • 使用Cookie狀態管理
    • 狀態碼
      • 1XX
      • 2XX OK
        • 200 OK
        • 204 NO Content
        • 206 Content-Range
      • 3XX 重定向
        • 301
        • 302
        • 304
        • 307
      • 4XX
        • 400
        • 401
        • 403
        • 404
      • 5XX
        • 500
        • 503
    • HTTP報文
      • 請求報文
      • 響應報文
      • 通用首部字段
        • Cache-Control
        • Connection
        • Date
        • 請求首部字段
          • Accept
          • Accept-Charset
          • Accept-Charset
          • Accept-Encoding
          • Accept-Language
          • Host
          • If-Match
          • If-Modified-Since
          • If-None-Match
            • Referer
          • User-Agent
        • 響應首部字段
          • Accept-Ranges
          • Age
          • Location
          • Server
        • 實體首部字段
          • Allow
          • Content-Encoding
          • Content-Language
          • Content-Type
          • Expires
          • Last-Modified
    • 跨域-cors
      • 兩種請求
        • 簡單請求
          • 瀏覽器不同的處理方式
        • 非簡單請求

HTTP基礎

HTTP協議

HTTP- Hyper Text Transfer Protocl 超文本傳輸協議
對我們的客戶端和服務端值之間數據之間實現傳輸(文字、圖片、音頻、視頻等等)

客戶端 => 服務端通信

  • 客戶端:請求訪問文本資源的一端
  • 服務端: 提供資源響應的一端

HTTP協議規定:客戶端發起請求、服務端回復響應
先從客戶端建立通信、服務端在沒有接收通信之前不發送響應

屬于應用層 第一層HTTP

請求方法

  • GET 一獲取資源
  • POST - 傳輸實體主體
    • 雖然GET也可以傳輸實體主體,但是一般我們不用
  • PUT傳輸文件
  • HEAD -獲取報文首部
    • HEAD 不返回報文主體部分
  • DELETE 一刪除文件
  • OPTION -預檢請求
  • TRACE 一 追蹤路徑

持久連接

HTTP請求在應用層,核心通道基于TCP連接
頁面有很多的圖片,在發送請求訪問HTML,也可能包含其他的資源、所以我們每一次請求都要建立一次TCP的鏈接和斷開增加了通信量的開銷

過去的http連接:
在這里插入圖片描述
建立TCP連接:三次握手
斷開TCP連接:四次揮手

Http1.1中:Connection:Keep-Alive
Connection:代表TCP信道的鏈接
只要任意一端沒有明確提出端口鏈接,則保持TCP連接狀態
(建立一次TCP鏈接,可以一次性的發送所有http請求)
在這里插入圖片描述
好處:減少了TCP鏈接的重復建立以及我們斷開鏈接的開銷、減輕了服務器的負載、提高了運行速度
HTTP 1.1 默認就是持久連接

如何區分http用的是同一個TCP信道?
connectionID(連接ID)相同的是同一個TCP信道
connectionID:標識 標識單個請求新建立信道索引
在這里插入圖片描述

管線化

并行發送多個請求,不是一個一個等著響應
在這里插入圖片描述

無狀態協議

http協議就是一種無狀態協議,不保存狀態
不對請求和響應之間的通信狀態進行保存
目的:更快的處理大量事務、確保協議的可伸縮性

使用Cookie狀態管理

引入cookie
服務端 set-Cookie 通知客戶端保存Cookie
客戶端下一次在進行發送的時候,會將之前設置的cookie進行攜帶
性能: cookie 每次請求都會攜帶,性能受到影響
跨域:cookie無法跨域調用,需要指定一個作用域

狀態碼

負責客戶端HTTP請求的返回結果

當客戶端向服務器發送請求時候,描述返回的請求結果。能夠知道服務端是正常除了請求,還是有錯誤

1XX

信息性狀態碼
作用:接收的請求正在處理中

2XX OK

Success -成功狀態碼
表示請求處理正常且成功

200 OK

表示從客戶端發來的請求在服務端進行正常處理了

204 NO Content

表示服務器接收的請求已經成功處理,但是返回的響應報文中不包含實體的主體部分,而且不返回任務實體的主體
場景:從客戶端發送請求給服務端,對客戶端不需要發送新信息內容的情況

206 Content-Range

表示客戶端進行了范圍請求
Content-Range

3XX 重定向

表示瀏覽器需要執行某些特殊的處理以及正確處理請求

301

永久性重定向:請求該資源時候每次都返回一個新的url

302

臨時性重定向:請求該資源時候每次都返回一個新的url,可能只限于本次
代表資源不是被永久移動,只是臨時的。

304

表示發送一些附帶條件的請求。

加上一些附帶的條件
if-Match, if-Modified-since ,if-Range

雖然是3xx系列,但是和重定向沒啥關系

307

臨時重定向:期望客戶端保持請求方法不變,向新的地址發出請求

4XX

客戶端錯誤

400

表示請求報文中存在語法錯誤
錯誤發生、需要修改請求的內容然后重新發送,瀏覽器會像200 對待

401

表示需要有通過HTTP認證的認證信息

403

表示對請求資源的訪問被服務器拒絕了。而且沒有必要給出拒絕的詳細理由。如果想說明,則在主體返回

404

無法找到請求的資源

5XX

服務器本身發生了錯誤

500

表示服務器在執行請求的時候發生了錯誤

503

服務器超負載了處理停機維護狀態

HTTP報文

  • 報文首部 一客戶端和服務器處理是的請求或者響應的內容以及屬性
  • 報文主體 -應該被發送的數據

請求報文

客戶端的HTTP報文
請求行 - 方法、URL \HTTP版本
首部字段:

  • 請求
  • 通用
  • 實體

響應報文

服務器的HTTP報文

狀態行一HTTP版本、狀態碼

首部字段:

  • 響應首部字段
  • 通用首部字段
  • 實體首部字段

HTTP首部字段類型

  • 通用首部字段-請求報文和響應報文 都會使用的首部
  • 請求首部字段 一 從客戶端向服務器發送請求報文時使用的首部
  • 響應首部字段一從服務器向客戶端返回響應報文使用的首部
  • 實體首部字段 —請求報文 和響應報文使用的首部

通用首部字段

Cache-Control

能操作緩存的工作機制

  • public 表明其他用戶可以利用緩存
  • private 只以特定的用戶作為對象
    public private 相反
  • no-cache一防止從緩存中返回過期的資源,緩存服務器轉發給源服務器
    在這里插入圖片描述
Connection

作用:

  • 控制不在轉發給代理的首部字段
    connection:不在轉發的首部字段 Hop-by-hop
  • 管理持久連接
    • connection:close - 服務器明確的斷開鏈接
    • connection: Keep-Alive- 持久連接
Date

表明創建http報文的日期和時間

請求首部字段

作用: 補充一些請求的附加信息、客戶端信息、對響應內容相關的優先級等

Accept

能夠處理的媒體類型以及媒體類型的優先級

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
  • 文本文件
    • text/html - HTML格式 text/plain-純文本格式,text/css -css格式
    • 組合application/xhtml+xml,application/xml,application/json ,application/pdf
  • 圖片文件
    • image/jpeg - jpeg 格式,image/webp,image/apng image/png,image/gif
  • 視頻
    • video/mpeg,video/quicktime
  • 應用程序中使用的二進制文件
    • application/octet-stream, application/zip,application/x-www-form-urlencoded

q=0.9 權重
范圍0~1可以精確到小數點后3位
1為最大值、默認為1.0

accept—期望,提供給服務端的一些參考意見

Accept-Charset

期望支持的字符集優先級

Accept-Charset

期望支持的字符集 優先級
http
Accept-Charset: charset = utf-8

Accept-Encoding

期望支持的內容編碼,被壓縮的
包裝
好處:減少網絡流程,提升我們的性能

  • gzip
  • compress
  • deflate
    -br
  • identity - 不執行壓縮或者不會發生變化的默認編碼格式

注:
我們在要求服務器按照某種方式返回,但是這不是強制。如果說服務器不支持或者不開啟,那么不起作用
如果服務器支持壓縮,或者開啟,響應報文的Content-Encoding 告知

Accept-Language

期望能夠處理的語言集
zh-CN,zh;q=0.9,en;q=0.8

Host

Host:
www.baidu.com
請求資源所處的互聯網主機名和端口號
唯一一個必須要包含在請求內的首部字段
相同的IP地址下部署了多個域名,那么服務器就無法知道哪一個域名對應的請求。

If-Match

像If-xxx 條件請求。服務器接收到附帶的條件的請求后,只有判斷指定條件為真,才會執行請求
If-Match: “12345”
兩端資源進行比較,只有判斷條件為真才會接收請求

If-Modified-Since

如果服務器If-Modified-Since 早于資源的更新時間,希望能處理請求
不滿足條件的話,服務器返回304代碼

If-None-Match

實體標記(ETag) 值和請求資源的ETag的值不一致的時候,告訴服務器處理請求

Referer

告訴服務器,請求的原始資源的地址

User-Agent

客戶端的信息傳給服務器了
內容包含:操作系統/版本 、瀏覽器/版本、設備信息(移動端)/版本

響應首部字段

用于補充響應的附加信息、服務器信息、對客戶端的附加要求

Accept-Ranges

告訴客戶端,我服務器是否可以接受范圍請求,是bytes,否none

Age

資源在代理緩存中存在的時間

Location

客戶端重定向的URL

Server

服務器的名字:Apache Nginx BWS gws

實體首部字段
Allow

資源的正確請求方式:GET HEAD POST
服務器接收到了不支持的HTTP方法,會以狀態碼405

Content-Encoding
  • gzip
  • compress
  • deflate
  • br
Content-Language

告訴客戶端,用的哪一種語言

Content-Type

說明了實體主題內對象的媒體類型
text/html charset=utf-8

Expires

資源失效的日期

緩存服務器 如果接收到了這個字段,會以緩存來應答,如果在這個時間之前,響應的副本會一直保存
如果超過了這個時間,會轉發給服務器

如果源服務器不希望緩存服務器對資源進行緩存,那么這個時間設置為Date相同的時間即可。

Last-Modified

指明資源在最后修改的時間

跨域-cors

Cors => 跨域資源共享
同源策略:端口、域名、協議

跨域構成條件:

  • 端口不同
  • 協議不同
  • 域名不同
    三個只要一個不同,就是不同源。只要不同源,就是跨域

兩種請求

簡單請求

兩個條件:

  1. 請求方法是:HEAD,GET,POST
  2. header中只能包含以下請求字段:
  3. Accept
  4. Accept-Language
  5. Content-Language
  6. Content-Type
  7. text/plain
  8. multipart/form-data
  9. application/x-www-form-urlencoded
瀏覽器不同的處理方式

簡單請求跨域,瀏覽器會讓請求發出

GET /cors HTTP/1.1
Origin: http://www.baidu.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0 ...

響應頭會加Access-Control-Allow-Origin,表示對該來源的請求是允許的

Access-Control-Allow-Origin: http://www.baidu.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type:text/html; charset=utf-8
  1. Access-Control-Allow-Origin是必須的
    要么是請求時,Origin的值。
    那么就是 * => 表示接受任意域名的請求但是存在安全隱患
    如果沒有這個頭部信息,說明了服務器沒有開啟資源共享,瀏覽器會認為這次請求失敗
  2. Access-Control-Allow-Credentials是可選的
    表示允許發送Cookie
    true: 表示服務器明確許可,可以在請求中一起發送
    如果不要瀏覽器發送cookie那么刪掉
非簡單請求

只要不是簡單請求,那就是非簡單請求

先發送OPTIONS 預檢請求
OPTIONS請求按照簡單請求的方式處理
目的: 保護客戶端的安全,防止不受信任的網站利用用戶的瀏覽器向其他網站發送惡意請求

  • Access-Control-Request-Method:告訴服務器實際發送的HTTP請求方法
  • Access-Control-Request-Header:告訴服務器實際請求所攜帶的自定義的頭部信息
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:IS0-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: http://www.baidu.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers:X-PINGOTHER,Content-Type

服務器根據這些信息決定,該請求是否被允許
響應的

Access-Control-Allow-Methods:POST
Access-Control-Allow-Headers:X-PINGOTHER,Content-Type

什么時候觸發OPTIONS請求?

  1. 跨域的時候,Access-Control-Request-Headers: X-PINGOTHER,Content-Type
  2. 發送跨域的時候,使用PUT、DELETET、CONNECT、OPTIONS、TRACE、PATCH

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能時代的領航者:人工智能的前沿探索

智能時代的領航者:人工智能的前沿探索 人工智能的定義與發展歷程 人工智能(Artificial Intelligence,AI)是指通過模擬、延伸人類智能的理論、方法、技術及應用系統,以實現智能化的機器或軟件。人工智能的發展經歷了符…

Linux系統中已經可用的重要的網絡和故障排除命令

在Linux系統中,網絡設置、問題查找和故障修復是系統管理的重要技能,對于開發人員來說,了解Linux故障排除命令對于日常任務十分有幫助。 本文將介紹在Linux系統中已經可用的重要的網絡和故障排除命令。 以下是已經存在于Linux機器上的故障排…

2024可以實現月入過萬的抖店,適合新手做嗎?

我是電商珠珠 過完年了,一些新手都在找項目,覺得自己能做的項目很少。每個人身邊或多或少都有做電商的人,都說做電商可以年入百萬什么的,于是找到了抖店,但是對于抖店并不了解,不知道抖店適不適合自己。 …

JVM 第四部分—垃圾回收相關概念 2

System.gc() 在默認情況下,通過System.gc()或者Runtime.getRuntime().gc()的調用,會顯式觸發Full GC,同時對老年代和新生代進行回收,嘗試釋放被丟棄對象占用的內存 然而System.gc()調用附帶一個免責聲明,無法保證對垃…

博途PLC 面向對象系列之“雙通氣缸功能塊“(SCL代碼)

1、面向對象系列之找對象 https://rxxw-control.blog.csdn.net/article/details/136150027https://rxxw-control.blog.csdn.net/article/details/1361500272、博途PLC 面向對象系列之"單通氣缸功能塊" https://rxxw-control.blog.csdn.net/article/details/1363399…

如何使用pip安裝和生成requirements.txt

使用 pip freeze 命令可以列出當前環境中已安裝的所有 Python 包及其版本信息,并將其輸出保存到 requirements.txt 文件中。可以使用重定向 (>) 將命令的輸出寫入文件中 pip freeze > requirements.txt使用 pip install 命令可以從 requirements.txt 文件中安…

Spark(1)-wordCount入門

1. 創建Maven項目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

JavaScript繼承 寄生組合式繼承 extends

JavaScript繼承 1、JS 的繼承到底有多少種實現方式呢? 2、ES6 的 extends 關鍵字是用哪種繼承方式實現的呢? 繼承種類 原型鏈繼承 function Parent1() {this.name parentlthis.play [1, 2, 3] }function Child1() {this.type child2 }Child1.prototype new Parent1(…

三天學會阿里分布式事務框架Seata-seata事務日志mysql持久化配置

鋒哥原創的分布式事務框架Seata視頻教程&#xff1a; 實戰阿里分布式事務框架Seata視頻教程&#xff08;無廢話&#xff0c;通俗易懂版&#xff09;_嗶哩嗶哩_bilibili實戰阿里分布式事務框架Seata視頻教程&#xff08;無廢話&#xff0c;通俗易懂版&#xff09;共計10條視頻&…

navicat16

Navicat16: 鏈接: https://pan.baidu.com/s/1vIfX0qEEL4mhBrsEzD_-lw?pwdy3fi 提取碼: y3fi 破解教程視頻&#xff1a;2023年Navicat16破解教程(小白教程)_嗶哩嗶哩_bilibili

1、云原生安全之K8S的部署與常用命令

文章目錄 1、常用命令1.1、基本信息查看1.2、日志查看與問題排查1.3、進入pod與pod內部文件導出1.4、環境搭建相關1.5、鏡像相關1.6、電腦重啟后,重啟k8s服務1.7、關于k8s的持久卷二、k8s的部署2.1、配置環境2.1.1、安裝所需工具2.1.2、修改主機名2.1.3、編輯hosts2.1.4、其他…

第13集《靈峰宗論導讀》

《靈峰宗論》導讀。諸位法師&#xff0c;諸位同學&#xff0c;阿彌陀佛&#xff01;&#xff08;阿彌陀佛&#xff01;&#xff09; 請大家打開講義第38面。 丙三、結示 這一科是《正見篇》的結示。《正見篇》主要的是要引導我們能夠正確地觀察生命的真相。生命的真相就是說…

【RISC-V 指令集】RISC-V DSP 擴展指令集介紹(二)

前言&#xff1a; 本筆記是基于對RISC-V DSP擴展指令集文檔總結的&#xff0c;《P-ext-proposal.pdf》文檔的關鍵內容如下&#xff1a; 主要介紹了RISC-V的P擴展指令集及其相關細節。 首先&#xff0c;對P擴展指令進行了概述&#xff0c;并列出了其與其他擴展重復的指令。 …

Java 的notify 可能導致死鎖原因詳解

假設有一個共享資源庫 ResourcePool&#xff0c;它內部維護了兩類資源&#xff1a;ResourceTypeA 和 ResourceTypeB。現在有兩個線程 Thread1 和 Thread2&#xff0c;它們都需要從資源庫中分別獲取一種資源才能繼續執行。Thread1 需要 ResourceTypeA 而 Thread2 需要 ResourceT…

上位機圖像處理和嵌入式模塊部署(當前機器視覺新形態)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 過去的機器視覺處理&#xff0c;大部分都是集中在上位機、或者是服務器領域&#xff0c;這種形式維持了很長的時間。這種業務形態下&#xff0c;無…

windows 11 藍牙突然消失

解決方法&#xff1a; 1.WinX&#xff0c;點擊設備管理器 2.選中藍牙&#xff0c;右鍵更新驅動。 3.然后就可以出現了&#xff0c;如下圖

Django多個app配置多個域名訪問

環境&#xff1a;Python 3.8.1 Django 2.2.12 項目目錄結構&#xff1a; CellMiddle -- 項目根目錄 ├─task --- 需求系統 │ ├─migrations │ ├─static │ └─templates ├─logs --- 日志目錄 ├─doc --- 文檔系統 │ ├─data │ ├─migrations │ ├─st…

程序員是如何看待“祖傳代碼”的?

目錄 ?編輯 程序員是如何看待“祖傳代碼”的&#xff1f; 一、什么是“祖傳代碼”&#xff1f; 二、“祖傳代碼”的利弊 1. 可以節省開發成本 2. 可能引入安全隱患 3. 可能增加系統的維護難度 三、祖傳代對程序員的影響 1. 豐富程序員的技能和知識 2. 提高程序員的創…

python筆記_進制

二進制 進位規則&#xff1a;滿2進1 范圍&#xff1a;0,1 符號&#xff1a;以0b和0B開頭 八進制 進位規則&#xff1a;滿8進1 范圍&#xff1a;0-7 符號&#xff1a;以0o和0O開頭 十進制 進位規則&#xff1a;滿10進1 范圍&#xff1a;0-9 十六進制 進位規則&#xff…

Python——Tchisla求解器(暴力搜索法)

Tchisla簡介 最近玩到一個挺有意思的數字解密小游戲《Tchisla》&#xff0c;其規則類似算24點&#xff0c;也是利用一些數學運算和初始數字計算出目標數字&#xff0c;與算24點不同的是&#xff0c;Tchisla允許不限次數地使用一種初始數字&#xff08;1~9&#xff09;&#xf…