关于http协议的疑问

探寻互联网协议,以及http协议及发送接收请求

互联网

1 什么是网络?什么是互联网?什么是因特网?

网络就是一种将几部计算机的主机或网络打印机之类的接口通过网络线或者无线网络技术来实现数据的传输方式。

因特网就是世界范围内的网络。

互联网:凡是能彼此通信的设备组成的网络就叫互联网。

为什么能用网络进行通信,有啥规则?

那么多的操作系统要如何进行网络沟通呢?那就得要制订共同遵守的标准才行。这个标准是由国际组织规范的,你的系统里面只要提供可以加入该标准的程序代码, 那你就能够透过这个标准与其他系统进行沟通,而这个标准就是概念上的网络。

OSI七层模型

OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。日后迭代学习

http协议

是什么

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议 ,所有的WWW文件都必须遵守这个标准。

http协议特点

  1. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

资源

Web 服务器是 Web 资源(Web resource)的宿主。Web 资源是 Web 内容的源头。 最简单的 Web 资源就是 Web 服务器文件系统中的静态文件,还可以是根据需要生成内容的软件程序。

统一资源定位符(URL)

大多数的格式:方案(协议类型,告知Web客户端怎么访问资源)+服务器的因特网地址+某个资源路径。通俗来说,就是怎么做,位于何处,哪个资源。

https:// + www.baidu.com + /img/bd_logo1.png ftp:// + ftp.lots-o-books.com + /pub/complete-price-list.xls

报文

报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块,报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。

数据单元是网络信息传输的基本单位。一般网络连接不允许传送任意大小的数据包,而是采用分组技术将一个数据分成若干个很小的数据包,并给每个小数据包加上一些关于此数据包的属性信息,例如源IP地址、目的IP地址、数据长度等。这样的一个小数据包 就叫数据单元。这样一来,每次网络要传送的数据都是规格和封装方式 相同的一个“小包裹”,有利于数据传输的标准化,简化了数据传输方式。

一个数据包包含的信息:源IP地址 、目的IP地址、数据长度

2.1、HTTP 通信所使用的报文格式

http报文 version http/1.1

HTTP 请求报文由3部分组成(请求行+请求头+请求体):请求头 请求行,请求体

  1. //请求报文
  2. <method> <request-URL> <version>
  3. <headers>
  4. <entity-body>

1.User-Agent:

客户端使用的操作系统和浏览器的名称和版本,有些网站会限制请求浏览器

2.Referer:

先前网页的地址,表示此请求来自哪里,有些网站会限制请求来源

HTTP响应报文结构 (响应行+响应头+响应体)

响应中有个状态码需要清楚 响应状态码理论上属于响应头

• 常见200表示请求成功

302 重定向

301 Moved Permanently(永久移动)

当服务器将302响应发给浏览器时,浏览器并不是直接进行ajax回调处理,而是先执行302重定向
——从Response Headers中读取Location信息,然后向Location中的Url发出请求,在收到这个请求的响应后才会进行ajax回调处理

重定向 就是地址A跳转到地址B啦。百度百科的解释:重定向
(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

  • 100-199 信息性状态码
  • 200-299 成功状态码 (常见200表示请求成功)
  • 300-399 重定向状态码 (常见302重定向)
  • 400-499 客户端错误状态码 (常见404,请求资源不存在)
  • 500-599 服务端错误状态码
  • 403

为什么要有http头部 首部和方法配合工作,共同决定了客户端和服务器能做什么事情。

用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
. 请求头 (request headers)
以键值对的方式传递数据,常见如:用 Authorization 传递用户 token 值。
Cache-Control:指定请求和响应遵循的缓存机制
Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接) keep-alive
Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Content-Length:请求的内容长度
Content-Type:请求的与实体对应的MIME信息 application/json 在 responese readers中
//Content-Type告诉服务器传递什么格式的数据,content-type:application/json在前后端分离开发的中,json格式是最常用。传递参数为json对象:
Host:指定请求的服务器的域名和端口号 test.123.cn
User-Agent:User-Agent的内容包含发出请求的用户信息 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36

首部(请求头)
2.4.1、通用首部 起始行后面有零个或多个首部字段
客户端和服务器都可以使用,如Date首部。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dguIS98B-1669700407730)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a92b1cf5-836f-439b-82b4-beec77c9272e/Untitled.png)]

字节是什么

字节
(Byte)是计算机用于计量存储容量的一种计量单位,一个字节存储8位二进制数,储存的数值范围为0-255

比特是什么

1)计算机专业术语,是信息量
单位,是由英文BIT音译而来。二进制数的一位所包含的信息就是一比特,如二进制数0100就是4比特。

1个字节等于8个比特

http怎么发送请求?

  • 报文是如何通过传输控制协议 (Transmission Control Protocol,TCP)连接从一个地方搬移到另一个地方去?
  • HTTP 是如何使用 TCP 连接的?

浏览器连接原理

url由什么组成

连接步骤如下: (1) 浏览器从 URL 中解析出服务器的主机名;

(2) 浏览器将服务器的主机名转换成服务器的 IP 地址;

(3) 浏览器将端口号(如果有的话)从 URL 中解析出来;

(4) 浏览器建立一条与 Web 服务器的 TCP 连接; 持续连接

(5) 浏览器向服务器发送一条 HTTP 请求报文;

(6) 服务器向浏览器回送一条 HTTP 响应报文;

(7) 关闭连接,浏览器显示文档。

http协议特点

HTTP协议(请求)的特点
1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
2、无连接:每次连接只处理一个请求;
当服务器处理完客户的当次请求,并收到客户的应答后就会断开连接,节省传输时间
无连接为什么节省传输时间?
早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问
tcp连接会建立通道,大部分通道实际上会很空闲、无端占用资源 节省资源会节省传输时间?关乎优化吧
无连接导致每次请求都要建立tcp链接造成巨大的时延 下图是串行HTTP事务的时间线,

改进 持续连接技术

持续连接技术

HTTP 请求,代码中体现
XMLHttpRequest 是 Javascript 中的一个内置对象,用于从 Web 服务器发出 HTTP 请求。这是在 ES6 之前用 Javascript 语言发出 HTTP 请求的唯一方式和方法。

3、无状态:HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力。 事务: 一个HTTP事务=一条请求命令报文+一个响应报文。
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
无状态 即我们给服务器发送 HTTP 请求之后,服务器会给我们响应数据过来。但是,响应完结束后,服务器不会记得刚才请求了什么,还有响应过什么。
改进,两种用于保持 HTTP 状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

Cookie Session 有点,缓存?后端快速响应?
http连接的几种方式

1 串行连接
此时一个连接对应一个请求,一个请求完成后才会开始下一个请求。完成的标志是服务端的数据到达客户端,客户端读取响应数据后关闭连接,然后发起下一个连接。

由于http的特点衍生出来的技术:

持续连接技术 还可以衍生到websocket

HTTP 1.0中出现了Connection: keep-alive,用于建立长连接
(1) 实现方法: 请求头包含Connection: Keep-Alive,若服务器支持则返回该首部,若不返回则说明服务器不支持而且关闭连接:
HTTP 请求,代码中体现
XMLHttpRequest 是 Javascript 中的一个内置对象,用于从 Web 服务器发出 HTTP 请求。这是在 ES6 之前用 Javascript 语言发出 HTTP 请求的唯一方式和方法。


let request=new XMLHttpRequest();
// //打开请求  
 request.open('GET', 'https://jsonplaceholder.typicode.com/todos/1');  
 request.setRequestHeader('cookie', 'let me new a cookie')//添加首部 Connection: keep-alive 持续连接的意思
 // 报错:setHttpHeader_Connection.html:15 Refused to set unsafe header "Connection"  原因:
    //在XMLHttpRequest不允许设置一些headers,他们会被浏览器自动设置。浏览器默认是 长连接

 request.send();
 request.addEventListener('readystatechange', ()=>{  
 if (request.readyState == 4 && request.status == 200){  
 console.log(request.responseText);  
 } else{  
 console.log('获取数据出错');  
 }  
 })

cookie 也算是http协议头部的内容

Cookie Session 有点,缓存?后端快速响应?

Cookie
what? how? why? 优缺点
Cookie是什么?
小型文本文件,存储在浏览器的文本文件Application中
是服务器发送到用户浏览器并保存在本地的一小块数据(一般为4KB)
http请求报文,客户端发给服务器的数据包 包含 请求行,请求头,请求体
响应报文 (响应行+响应头+响应体)
响应头 由 一个个键值对组成

首部(请求头,或响应头)

3.首部字段类型
首部字段根据实际用途被分为以下4种类型:

类型 描述
通用首部字段 请求报文和响应报文两方都会使用的首部
请求首部字段 从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
响应首部字段 从服务器端向客户端返回响应报文时使用的首部,也会要求客户端附加额外的内容信息。
实体首部字段 针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息。

使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
Content-Length 实体主体的大小(单位:字节)

首先弄清两个概念,报文和实体。可将报文看作传输中的“箱子”,而实体是“箱子”里的“货物”,即我们真正想要传送给对方的东西本身,也就是数据。实体由实体首部和实体主体构成,实体首部主要是一些有关实体主体的描述性信息。
实体=数据=实体首部+实体主体(被发送的数据)

  1. //请求报文 这几行这个就是实体,是数据
  2. <method> <request-URL> <version>
  3. <headers> //以上两行叫首部 ,
  4. <entity-body> 主体 主体是应被发送的数据。
    XMLHttpRequest.setRequestHeader() 是设置 HTTP 请求头部的方法。
    通用首部
    Connection 连接 close 断开连接 keep-alive 持续连接 ,请求发送报文之后也不断开tcp连接
    Cache-Control
    Content-Type 实体主体的媒体类型 在客户端写的是请求实体的,服务端写的是响应实体的
    Content-Type: text/html; charset=UTF-8 说明了实体主体内对象的媒体类型 确切的来说是客户端告知服务端,自己即将发送的请求消息携带的数据结构类型,好让服务端接收后以合适的方式处理。

request headers 请求头首部 cookie
cookie 作用

媒体格式

什么叫媒体类型? 媒体类型是英特网上客户端和服务器之间传递信息消息的格式。
常见的媒体格式
text/html : HTML格式
text/plain :纯文本格式

json格式

由application开头
application/json

application/octet-stream 二进制流数据(如常见的文件下载)

xhr.setRequestHeader(“Content-Type”, “application/octet-stream”);

请求首部
Accept

cookie 作用

cookie
cookie其实就是一些数据信息,类型为“小型文本文件”,
cookie是服务器创建后返回给浏览器的。在浏览器进行了保存 解决了服务器无状态的问题
它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。因此,服务端脚本就可以读、写存储在客户端的cookie的值。
一般情况下,cookie是以键值对进行表示的(key-value)
cookie的属性
name
value
domain
expires 这个值表示cookie的过期时间,也就是有效值,cookie在这个值之前都有效。
size cookie的大小
获取 cookie

document.cookie;
'BIDUPSID=E643E47DC0062F2990F060A0CD07D98D; PSTM=1667120861; BAIDUID=E643E47DC0062F29D0F3B72AC931356E:FG=1; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BA_HECTOR=210h058g8h2hal2hah80aaum1hnubj11e; COOKIE_SESSION=2124_0_9_9_6_49_0_0_9_7_13_9_58_0_0_0_1669180835_0_1669279317%7C9%23401324_7_1667535674%7C2; BAIDUID_BFESS=E643E47DC0062F29D0F3B72AC931356E:FG=1; ZFY=pNDxSll:ApHigmgKNkRS7BZtCVPnhJXtYkThJc5jND:Ao:C; BD_HOME=1; H_PS_PSSID=36554_37767_37828_37628_37777_37729_37802_36803_37740_26350_22158; BDRCVFR[S4-dAuiWMmn]=I67x6TjHwwYf0; delPer=0; BD_CK_SAM=1; PSINO=5; H_PS_645EC=8c25pg9TLvT%2FWgCM%2BpQ13qKYCIapZSe9fcTNxtp05Y43X43moILTmfYPsd8X6i6XMQ'
// "name1=value1; name2=value2"   cookie由字符串组成,包含很多键值对,  不同键值对由分号和空格分隔开

引用
https://www.bookstack.cn/read/http_guide/http-3-readme.md
https://blog.csdn.net/weixin_45948229/article/details/122527797

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值