HTTP - - HTTP协议简要分析(1)

推荐一个自己的博客:JS -- 手动实现数组原生方法

HTTP(Hypertext Transfer Protocol)协议是w3c于1990年颁布的一个属于应用层的面向对象的协议,主要适用于分布式超媒体信息系统。

一丶HTTP协议

HTTP协议是指客户端程序与web服务器的请求、响应的交互过程中所必须要遵守的规则和数据格式,即通信规范。

在此,客户端程序是指web浏览器、网络爬虫或者其他的应用程序;web服务器是指提供www类型服务的主机。HTTP服务是目前在因特网上使用最广泛的应用层协议。它主要用于传输采用HTML实现的页面文件,而客户端浏览器与web服务器之间通过这个协议,使得网友可以拿鼠标达到全世界(当然,首先要翻墙才可以到一些到不了的地方),并通过特定的程序与web服务器进行人机交互,也就是请求响应。

tip:基于HTTP协议的客户端程序也被称为用户代理(User Agent),在用户代理和目标服务器之间存在多个不同形式的中间层(如代理、网关等)。浏览器也并不是基于HTTP协议的唯一客户端程序,在应用中还可以有搜索引擎、手机、掌上电脑、机顶盒等设备和程序,它们也通过HTTP协议与对应的web服务器之间进行通信和数据交换。

二丶HTTP协议主要的协议特性

  • HTTP协议是建立在TCP/IP上层的应用层协议

HTTP协议不仅保证客户端程序正确和快速地传输超文本文件信息,而且是一个基于请求/响应模式的无状态的协议。HTTP之所以简单和能够快速响应,主要是由于客户端程序向服务器程序发送HTTP请求时,只需要传送请求的方式和目标资源的路径和文件名,并且请求的方式可以为get,post和head等多种形式。

  • HTTP协议是一个基于请求/响应模式的无状态的协议

协议的状态是指在下一次传输时可以保留本次传输信息的能力,而无状态也就是之HTTP协议对于事务处理没有记忆的能力,如果用户代理在后续处理中需要应用前次请求的信息,则必须重新请求。

基于请求/响应也就意味着客户端每次更新信息时都要重新向web服务器发出请求,HTTP协议具有无状态的特性,也就意味着客户端浏览器获取了所请求的目标资源后,将于web服务器断开网络连接而空出不再需要的网络连接资源。

因此,无状态的特性可提升分布式应用系统的性能,也允许在同一个页面中包括分布在相距很远的不同服务器中的其他信息。

但是无状态的特性将会导致每次连接传送的数据量增大,同时也为实现会话跟踪带来一定的技术实现上的复杂性

  • 无永久连接

 HTTP协议所具有的无永久连接的含义是指限制每次连接只处理一个请求,并且服务器处理完客户端程序的请求并受到客户端程序的应答信息后立即断开与客户端程序之间的网络连接,从而提高传输性能和减少传输时间。

三丶HTTP服务器默认的TCP连接的端口为80

每当客户端程序向web服务器发送一个HTTP请求后,也就建立出一个到web服务器指定端口的TCP连接。这个指定的端口就是80;如果HTTP服务器的端口号不是80,则在访问该web服务器时必须给定具体的端口号,比如tomcat服务器默认的端口号为8080。

四丶HTTP协议中的请求头和响应信息

  • HTTP消息的基本组成

HTTP消息包括客户端程序向web服务器发送的请求消息和web服务器端程序向客户端程序返回的响应消息,而且他们都是由一个请求起始行、一个或者多个头域、一个标识头域结束的空行和可选的消息体组成。

  • HTTP协议中头域的基本组成

HTTP协议的头域主要包括通用头、请求头、响应头和实体头4个部分。每个头域由域名、冒号和域值三部分组成。

通用头域包含请求和响应消息都支持的头域,提供了与报文相关的最基本的信息,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via;

请求消息的第一行为下面的格式: 

MethodSPRequest-URISPHTTP-VersionCRLF

Method 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。

响应消息的第一行为下面的格式: 

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF 

HTTP -Version表示支持的HTTP版本,例如为HTTP/1.1。Status- Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。

请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。

具体的header详解可以查看这篇博文

  • 通用头(General Header)

这里以我的CSDN博客首页的请求为例。

                     

其中,

Request URL : 请求的URL

Request Method : 请求的方式

Status Code : 响应输出的状态码

Remote Address : 远程地址,包括 IP地址:端口号

Referrer Policy : 来源协议,用来规定是否发送referrer消息,此处表示仅当发生协议降级(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer 信息。这个规则是现在大部分浏览器默认所采用的。对于此协议的几种值可以查看此博客

  • 服务端响应消息(Response Headers)

​​​​​​​同样以我的CSDN博客首页的请求为例。

                   

其中,

Connection : 是否开启HTTP持久连接,此处表示开启,HTTP 1.1默认值;HTTP 1.0默认值是 close,表示关闭HTTP持久连接。

Content-Encoding : web服务器支持的返回内容压缩编码类型。

Content-Type : 相应内容的类型,更多内容可以查询此常用对照表

Date : 表示发起请求的世界时。

Keep-Alive : 表示HTTP持久连接在请求响应后延迟多长时间关闭。

Server : web服务器软件的名称。

Strict-Transport-Security : 表示这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求, max-age 表示缓存秒数。

Transfer-Encoding : 文件传输编码。

Vary : 告诉下游代理是使用缓存响应还是从原始服务器请求。

  • 客户端发送消息(Request Headers)

​​​​​​​同样以我的CSDN博客首页的请求为例。

Accept : 指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序

Accept-Encoding : 指定客户端浏览器可以支持的web服务器返回内容压缩编码类型。

Accept-Language : 指定HTTP客户端浏览器用来展示返回信息所优先选择的语言。

Cache-Control : 告诉所有的缓存机制是否可以缓存及哪种类型。

Cookie : HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。

Host : 请求的web服务器域名地址。

Referer : 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

Upgrade-Insecure-Requests : 对应服务器的响应头的 Content-Security-Policy: upgrade-insecure-requests,而在浏览器的请求头出现的 Upgrade-Insecure-Requests:1 则是告诉服务器,自己支持这种操作,也就是我能读懂你服务器发过来的上面这条信息,并且在以后发请求的时候不用http而用https。

User-Agent : HTTP客户端运行的浏览器类型的详细信息。

  • 主要的响应输出的状态码及其功能说明

​​​​​​​关于状态码可以直接查看我之前写的博客:常见的十个HTTP协议状态码

(未完待续)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值