http与https

我们上次在说HTTP版本区别的时候说了,在HTTP1.0的时候加入了报头,报头中包含了很多信息。报头分为两种:一种是请求报头一种是响应报头,自然就是一个是请求的时候发送的一个是响应的时候发送的。 请求报头由四部分构成请求行、请求头、空格和请求数据 这里我们看当你访问百度的时候的请求报头 GET / HTTP/1.1 Host: www

  我们上次在说HTTP版本区别的时候说了,在HTTP1.0的时候加入了报头,报头中包含了很多信息。报头分为两种:一种是请求报头一种是响应报头,自然就是一个是请求的时候发送的一个是响应的时候发送的。

  • 请求报头由四部分构成请求行、请求头、空格和请求数据

这里我们看当你访问百度的时候的请求报头

GET / HTTP/1.1

Host: www.baidu.com

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Referer:https://www.baidu.com/s?wd=HTTP%20%E5%8D%8F%E8%AE%AE%E6%9C%89%E5%87%A0%E7%A7%8D%E5%92%8C.....

Accept-Encoding: gzip, deflate, sdch, br

Accept-Language: zh-CN,zh;q=0.8

Cookie: BIDUPSID=670A04B660AAF2716D3120BEAF946A11; BAIDUID=2454D4.... RA-Ver: 3.0.8 RA-Sid: CA623F7A-20150914-060054-2b9722-5fde41

 

第一行是GET / HTTP/1.1  这一行指出了请求的方法是GET协议的版本是HTTP1.1。

第二行是Host在HTTP是1.1版本时,是必须指明host的,不存在还会报出错误。

第三行Connection: keep-alive 是让我们的链接保持长链接状态,这样节省了建立新链接的时间消耗

第四行User-Agent指明了我们发送请求的客户端的信息例如版本等信息

第五行Accept列出了当前浏览器可以接受的数据类型例如上边的html、tesxt、image等等

第六行Referer是浏览器告诉服务器它是从哪个资源来访问的这个界面的,也就是说这里边包含一个URL,用户就是从这个URL来访问当前界面的。

第七行Accept-Encoding表明浏览器可以解码的数据编码方式,这里有个gzip有些网站就支持返回gzip编码的HTML页面这样的话可以减少很多的下载时间。

第八行的Accept-Language表明浏览器希望接受的语言类型

第九行的Cookie这是网络中的一种机制,通过这个文件可以由浏览器向服务器带去数据。

 并不是说所有的请求报头都是完全按照这个格式,请求报头中有很多个选项,例如Range:Range头域可以请求实体的一个或者多个子范围。例如表示头500个字节:bytes=0-499,这也就实现了我们之前所说的HTTP1.1的请求部分资源和断点续传的特性。例如Pragma:指定“no-cache”值时无论是否代理服务器中存在缓存,都要向源服务器发送请求等等。

  所以通俗来说请求报头就是在浏览器也就是客户端向服务器请求数据的时候提出的一些要求和想要告知服务器的一些信息。

  • 响应报头则是服务器在响应浏览器的时候服务器给浏览器的一些信息,同样响应报头也是由响应行、响应头、响应体三部分来组成的。

HTTP/1.1 200 OK

Server: bfe/1.0.8.18

Date: Mon, 16 Jan 2017 06:35:24 GMT

Content-Type: text/html;charset=utf-8

Connection: keep-alive

Cache-Control: private

Expires: Mon, 16 Jan 2017 06:35:24 GMT

 Content-Encoding: gzip

X-UA-Compatible: IE=Edge,chrome=1

Strict-Transport-Security: max-age=172800

BDPAGETYPE: 2

BDQID: 0xe0042a0200002ea3

BDUSERID: 252528851

Set-Cookie: BDSVRTM=104; path=/

Set-Cookie: BD_HOME=1; path=/

Set-Cookie: H_PS_PSSID=21767_1446_21111_18133_19898_20718; path=/; domain=.baidu.com

Set-Cookie: __bsi=17204004216256107848_00_0_I_R_105_0303_C02F_N_I_I_0

第一行指明了协议的版本以及服务器返回的状态码还有状态代码的文字描述,状态码由三个数字组成并且第一个数字代表了响应的类别主要有五种类别,之后会对状态码进行详细的总结。这里200 ok代表请求成功了。

第二行Server是服务器用来告诉客户端当前服务器上安装的HTTP服务器应用程序的信息包含了安装的软件名字和版本等等

第三行Date代表当前的时间

第四行Content-Type表明了服务器返回给浏览器的数据类型,这里是text/html以及编码的格式

第六行Cache-Control: 缓存控制,默认值为private代表只能由私人客户端进行缓存代理服务器不可缓存

第七行Expires:是来告诉客户端资源失效的时间,当浏览器看到带有这个头的时候它会将其进行保存,只要没有过期浏览器会使用缓存中存在的版本,而不会再去发送HTTP请求如果数值是-1或者0代表不缓存

X-UA-Compatible是用来设置浏览器兼容情况的这里就不多说了

Set-Cookie则是设置一个和页面有关联的cookie。

三、除了我们上边所说的请求报头和响应报头还有通用头,通用头的意思是请求和响应报头中都有可能出现它,常见的通用头有:

1.Connection:表明服务器和客户端创建的链接类型,如果后边跟着的是close代表本次TCP请求结束之后直接断开连接,如果是Keep-Alive则代表一直存在链接,在HTTP1.1版本下connection的默认值就是Keep-Alive。

2.Date:代表头域产生的产生日期和具体的时间

Cache-Control:指定请求和响应遵循的缓存机制他的选项有很多

Public:代表该响应可以被任何缓存区缓存private:代表着只能被单个用户缓存,不能作为共享缓存也就是代理服务器不能进行缓存no-cache代表:强制那些缓存了该响应的用户,在使用已经缓存的数据前,发送带验证器的请求到原始服务器,并不代表不缓存only-if-cached:代表如果缓存存在的话直接使用缓存,无论原始服务器是否更新。no-store是真正意义上的不缓存max-age=<seconds>设置缓存存储的最大周期,当超过这个时间的时候这个缓存被认为过期s-maxage=<seconds>是用来覆盖max-age 或者 Expires 但是仅适用于共享的资源,私有的资源会忽略这个关键字。min-fresh=<seconds>表示在指定资源内获取最新的响应,must-revalidate代表缓存在使用之前必须验证旧资源的状态并且不能使用过期资源。

这些关键字是可以进行配合使用的比如:

Cache-Control: no-cache, no-store, must-revalidate就让我们的缓存被关闭了。

3.Pragma被用来包含特定的指令, 这些指令可能被用于请求报头或者响应报头的任何接受者,常用的是Pragmatic:no-cache,表示对请求的实体内容不予缓存。

 

 

知秋君
上一篇 2024-07-24 12:48
下一篇 2024-07-24 12:12

相关推荐