计网的细节

目录

1、URL

2、网络请求(一个网页的产生)

3、www的三个标准

4、get和post

4、域名解析在用到域名服务器前的步骤

5、http报文

a、请求报文

b、响应报文

Content-Type:内容类型(客户端和服务器都可以使用。但服务器用的更多,一般响应报文都有这个字段)

6、HTTPS(了解)


1、URL

url: 统一资源定位符.

url分为三大部分,四小部分

三部分: 协议,  ip地址+端口 or 域名,   服务器内部路径(虚拟路径)

四小部分相当于把服务器内部路径(虚拟路径),拆成两个部分

四小部分: 协议,  ip地址+端口 or 域名,   服务器内部路径(虚拟路径) + 参数

如果只有四小部分的服务器内部路径(虚拟路径),没有参数,相当于告诉服务器,你想要哪个书柜上的书,但没告诉它具体想要那本书,依旧不能访问网页

https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9216029133026313460%22%7D&n_type=0&p_from=1

http: 没有带端口, 默认找80

https: 没有带端口, 默认找443

2、网络请求(一个网页的产生)

1, 输入一个url (直接输入, 通过超链接输入)   ->  给浏览器

2, url域名(域名 -> ip) --> 浏览器根据带ip地址url发起请求

3, 在网络上, 根据这个url所携带ip地址, 找到对应电脑,

4, 找到对应的端口(url携带了端口, 就去这个端口上请求,  没有携带80, 443)

5, 如果这个找到的目标计算机, 对于这个端口有监听的程序, 那么就可以监听到这个请求

6, 计算机内部, 监听到请求, 根据url第三部分(虚拟路径+参数)内容, 找到对应的资源, 返回

7, 请求携带资源返回 -->  浏览器拿到资源

8, 浏览器如果拿到的是html文档,   浏览器会解析这些代码

Url:

http://localhost:63342/code/com/cskaoyan/www/FE/day1/html/11_input.html?_ijt=ev466a5spsqq7gkh8p59l63sop

localhost:相当于本主机IP

3、www的三个标准

HTML:   描述资源的格式,       

HTTP:   描述资源传输的格式    

Url:     指示资源所在位置   

4、get和post

GET、POST的区别

1. 应用场景(最重要的区别)

            get:一般用于获取数据
            post:一般用于提交数据

选用哪种请求方式,应该根据语义来,比如希望获取某个商品信息(get),比如登录网站(post)

2. 参数摆放位置

在浏览器中发送get请求一般是把参数拼接到url之后(在请求行里),而post请求把请求参数放到请求正文

3. 安全性

从参数默认摆放位置看,get请求不安全, post更安全一些。

例如:账号密码是参数,如果登录用get,会显示完整的url(可以在网址上看到你的账号密码),并且历史记录会保存带密码账号的url,

如果登录用post,它们会在正文部分,只有拿到你的http请求报文的人,才能看到你的密码账号,在url上只有?之前的内容:https://mbd.baidu.com/newspage/data/landingsuper?;历史记录也只会保存?之前的部分URL

4. 传播性

get好处:利于传播,如果你访问的网页是用post请求过来的,那再网址上不会显示完整的url(没有?后的参数),你再把网址复制粘贴给别人,那个人是打不开网页的

5. 参数大小限制

get请求url之后参数大小限制在1kb以内

post请求参数放到正文里, 没有数量限制

直接在浏览器地址栏输入网址,就是GET请求(一般情况下,如果没有特殊说明,99%的情况下,浏览器默认发送的都是GET请求)

----------------------------------------------------------?下面的不一定对-----------------------------------------------

并不是说请求参数在的位置,这个不是GET、POST的区别。出现这个情况的原因仅仅只是因为浏览器发送POST请求时,会默认把请求参数放置在请求体

例如看postman

不管是post还是get都可以把参数放在url后面

GET、POST从技术层面没有任何区别,区别仅仅在于语义上面

---------------------------------------------------------?---------------------------------------------------------------- 

4、域名解析在用到域名服务器前的步骤

1.搜索浏览器自身DNS缓存(一般情况下,第一次访问某个网站你会发觉略微慢一些)

2.搜索操作系统自身DNS缓存

3.读取hosts文件(在C:\Windows\System32\drivers\etc\hosts ,里面可以自己配置一些域名和IP的映射关系)

例如给本主机设置aaa.com域名

5、http报文

回车是“\r\n”

a、请求报文

首部行又叫请求头,是给服务器看的,里面有一些对通信格式的额外补充条款,例如

Accept:  客户端告诉服务器,浏览器只能接收哪些格式的数据, MIME类型 :(大类型)/(小类型),

MIME:是利用一种格式(大类型/小类型),将互联网上面的所有资源进行一个分类,
资源大类型有:图片、文本、音频、视频
对应的MIME格式为:
image/jpg、image/png
text/html、text/txt
audio/mp3
video/mp4

accept字段靠 “,” 分隔,画圈部分是一个类型。q=0.9表示客户端接收数据的优先级,先接收优先级高的数据,没写默认是1(数字大优先级高)

Accept-Charset: 浏览器通过这个请求头告诉服务器,它支持哪种字符集


Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip (压缩格式,当服务器给浏览器传输文件过大时,为了节约带宽,可以把文件变成压缩包传输,Accept-Encoding就是浏览器能接受压缩包格式)


Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时。 可以在浏览器中进行设置。

例如在国内使用youtube、google,请求报文的Accept-Language会向服务器请求中文语言文本

Host:访问资源所在的主机域名/(IP和端口) (每个请求报文中一定要有)

例如你在王道论坛随便点几个页面,虽然url的后缀不同,但是资源来源都是host : cskaoyan.com

 http://cskaoyan.com/thread-653744-1-1.html

 http://cskaoyan.com/thread-653744-1-1.html

Referer:代表该页面的来源是谁(可以用来防盗链),不是每个请求报文都有的

当用户先进入首页A,然后点击首页A的某个链接进入B页面,在B页面的请求报文里的Referer字段就是A的URL

在这个页面点击计算机组成原理,会发起HTTP请求,变成新页面

当抓到这个HTTP报文后,可以看到referer字段是上个页面的URL,可以知道这个新页面是从上个页面的链接点击来的

但是当直接复制B的URL在浏览器上粘贴打开,B页面的请求报文里就没有Referer字段

If-Modified-Since:Wed, 02 Feb 2011 12:04:56 GMT      服务器收到请求报文后,会利用这个请求头与服务器的文件进行比对,如果修改时间一致,说明以前服务器发过这个文件给浏览器,并且浏览器现在还持有最新版本,服务器就告诉浏览器从自己缓存中读取文件,我就不给你发了(节省带宽)

User-Agent:告诉网站服务器,访问者是通过什么浏览器来请求数据.

User-Agent通常格式:Mozilla/5.0 (平台) 引擎版本 浏览器版本号

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362

https://www.jianshu.com/p/c5cf6a1967d1

Content-Length:表示请求体的长度 ,单位字节
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接 )
Cookie:这是最重要的请求头信息之一 (后面详细讲----------------------------------)
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT

请求正文又叫请求体(可以传输大量的数据),如果你有很多的数据需要传输给服务器,那么就可以把它放在请求体里面

b、响应报文

服务器返回给客户端的响应消息,如果希望能够被客户端正确的处理、解析,这个时候也是需要去遵守某个规则

响应体:服务器想将大量的数据传输给客户端,就把数据写入到响应体中,只有这里面的数据可能显示在浏览器页面中

响应头:额外的补充一些通讯的条款,没有实际数据

状态行的状态码

状态码

含义

200299

表示成功接收请求并已完成整个处理过程 200 OK   206

300399

(重定向)为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址

400499

客户端的请求有错误

500599

服务器端出现错误

1、200 表示整个请求响应过程没有任何问题 一切正常

2、404  表示的是可以正常响应,只是此时请求的资源在服务器上不存

3、302、307 表示的是重定向(还需要根据响应报文返回的某个URL,再次向这个新的地址去发起新的请求),  再次发请求的URL在Location后面

                302、307状态码一定要搭配着一个响应头(首部行里的Location属性)一起使用

RFC1945(http://tools.ietf.org/html/rfc1945#page-34),也就是HTTP1.0在介绍302时说,如果客户端发出POST请求后,收到服务端的302状态码,那么不能自动的向新的URI发送重复请求,必须跟用户确认是否该重发,因为第二次POST时,环境可能已经发生变化,POST操作会不符合用户预期。但是,很多浏览器(user agent,描述为浏览器以方便介绍)在这种情况下都会把POST请求变为GET请求。

303规定post请求重定向为get请求

307规定post请求重定向仍然为post请求

4、304状态码  表示的是缓存 客户端存储的资源文件是最新的,可以继续使用

5、500   表示的是服务器异常

响应头/首部行

Location: http://www.cskaoyan.com/指示新的资源的位置 ,需要搭配302、307状态码一起来使用
Server: apache tomcat 指示服务器的类型
Content-Encoding: gzip 服务器发送的数据采用的编码类型
Content-Length: 80 告诉浏览器**响应正文**的长度
Content-Language: zh-cn服务发送的文本的语言


Content-Type:内容类型(客户端和服务器都可以使用。但服务器用的更多,一般响应报文都有这个字段)

用来告诉浏览器服务器返回的响应报文主体是一个什么类型的数据,如果服务器实际发送的响应报文主体是图片类型(本来应该设置成image/jpeg),但是你设置成text/html,那么浏览器可能就无法正常显示

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
Refresh: 1;url=http://www.cskaoyan.com指示客户端刷新频率。单位是秒。页面跳转的一个响应头

Content-Disposition: attachment; filename=aaa.zip指示客户端保存文件。如果响应报文中有这个响应头,那么浏览器会将当前资源以附件的形式下载下来。
Set-Cookie: SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie


Expires: 0(没讲)
Cache-Control: no-cache (1.1)  
Connection: close/Keep-Alive   
Date: Tue, 11 Jul 2000 18:23:51 GMT

响应体

一般放服务器传输给客户端的数据

6、HTTPS(了解)

HTTPS = Http + secure

HTTP缺点:

1.通讯过程全程明文传输

2.也没有验证通讯另一方的身份

3.没有一个完整性的校验,如果报文内容部分被篡改,也发现不了

HTTPS可以解决这三个缺点

1、证书(解决缺点2)

用了https的网站,会有一个证书(证书里有网站的公钥),证书是由的权威机构颁发给某个网站的。很难伪造

PS:公钥是大家都能看到的,私钥只有服务器知道

2、加密(解决缺点1)

加密算法:

对称加密(加密使用的秘钥和解密使用的秘钥是同一把,特点是解密速度很快,不过密钥得随着数据一起发送给接收方,不然对方不知道密钥是什么,中途可能被人盗密钥)

非对称加密(用公钥加密之后,只有私钥才可以解密,其他公钥是无法解密的, **特点是安全性非常高,但是解密速度很慢**))

*HTTPS采用的是混合加密*

客户端请求访问服务端,服务端返回一个公钥给客户端,客户端先验证公钥是否是那个网站的公钥,是的话随机生成一个密钥A,用公钥对密钥A加密,再发给服务器,服务器用私钥解密后可以得到A。之后双方在用对称加密传输文件。也就是前半部分用非对称加密传密钥A,后半部分再用对称加密传真正的文件

3、对报文进行计算(解决缺点3)

客户端对报文进行计算得到一个数值B(可能是hash值),随着用公钥加密后的A一起发送给服务器,以后服务器收到报文后,也对报文进行计算把结果和之前收到的值B比对,看是否相同就能验证数据是否被篡改
 

7、HTTP版本

HTTP1.0默认使用Connection:close,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

HTTP1.1默认使用 Connection:keep-alive(长连接),避免了连接建立和释放的开销;通过Content-Length字段来判断当前请求的数据是否已经全部接受。单个客户端(IP+端口一样的)不能同时使用超过两个的HTTP 长连接,例如IE 下载文件,从同一个 Web 服务器下载文件,最多只能有两个文件同时被下载。第三个文件的下载会被阻塞,直到前面下载的文件下载完毕。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值