浅谈HTTP协议

Posted whatthekobe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈HTTP协议相关的知识,希望对你有一定的参考价值。

  

在学习http协议之前先简单了解下tcp/ip协议族,计算机与网络设备要互相通信,双方要一套共同的规范,比如如何探测到通信目标,哪一边发起通信,使用哪种语言进行通信,还有不同的硬件、操作系统之间的通信都需要一种规则,我们把这些规则称之为协议,这种互联网相关联的协议集合起来总称为tcp/iptcp/ip协议族分为4层,分别为

应用层、传输层、网络层、链路层,http协议在第一层应用层。

 

 

 

 

接下来回到HTTP协议中来,在浏览器中打开一个网站以百度为例,输入网址到显示页面后打开浏览器的调试功能,在network中可以看到打开百度这个网页发起的http请求

浅谈HTTP协议


如上图所示通常第一个为入口请求,剩下的一般是浏览器拿到入口请求后服务端响应的数据后,由src或者js文件发起的请求。打开第一个http请求可以看到如下数据

 

浅谈HTTP协议

 

浅谈HTTP协议

根据Response Headers 里的content-type:text/html 和返回的内容可得知该请求返回的数据是html文件。我们可以在浏览器设置请求头Resquest Headers,或者在服务器设置返回头Response Headers来实现相应的web功能,下面介绍几种常用的头设置。

 

Cache-Control

 

通过设定指定的Cache-Control指令,能操作缓存的工作机制,Cache-Control 常用的缓存特性有:public表示服务器返回的内容所有的经过的路径都允许缓存,private代表只有发起请求的浏览器才能进行缓存,no-cache允许缓存但需要先给服务器发送验证请求来确定能不能使用缓存(和下一段例子结合)no-store表示任何节点都不能进行缓存,max-age表示缓存的过期时间,超过这个时间需向服务器再次发送请求,s-maxagemax-age作用一样,但是是在代理服务器上生效。

 

Last-ModifiedEtag  

 

这两个属性和缓存验证相关要和Cache-Control: no-cache时结合起来用。如在服务器上设置了如下请求头。(下图是nodejs服务器的请求头操作,各语言操作方法不一样)

 

浅谈HTTP协议

 

浏览器第一次发起请求时接收到响应头,第二次发起数据时会在请求头上带上如下请求头,服务器获取请求头数据再做对比来告诉浏览器是否能使用缓存。


 

Access-Control-Allow-Origin

 

在服务器响应头上设置 Access-Control-Allow-Origin:*,(也可以把*替换为指定域名)等同于通知浏览器上请求数据没有域名限制,跨域的请求浏览器也能解析数据。(跨域是浏览器特性和服务器没有关系),跨域默认只允许 GET HEAD POST方法,还有Content-Type限制和请求头限制,具体可以查资料,所以当需要发起限制之外的方法或者Content-Type和操作头的限制时,服务器需要对浏览器的预请求做一些处理

Connection(http长连接)


通过http协议发送请求需要建立tcp连接来传输数据,http1.1之前的版本每一个http请求都需要建立一个tcp连接,客户端和服务器的三次握手在tcp连接,所以tcp连接本身是性能的消耗所以要在旧版本http协议上保持长连接减少性能损耗需要指定Connection:Keep-Alive

 

http协议是每个web开发者都要了解掌握的协议,以上是一小部分学习总结。

 

 


以上是关于浅谈HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

浅谈http协议

浅谈HTTP协议

浅谈http协议(如何TCP实现HTTP)

浅谈HTTP协议(上)

浅谈HTTP与其工作流程

浅谈HTTP协议