序言
今天这篇小文,我们从HTTP协议本身和浏览器发送一个HTTP请求两个角度来学习一下HTTP\1协议。
HTTP是什么
HTTP的全拼是Hyper text transfer protocol 。按照协议去理解:
- protocol:首先这是一个协议,是个约定,确定计算机交流的通信规范以及各种控制和错误处理方式。
- transfer:这是一个传输协议,其基于TCP或者UDP,将信息从一个地方传送到另外一个地方。并且传送过程中允许代理。
- hyper text:超文本,传送包括文本,音频,视频等。
http定义
一个HTTP请求定义如下:
HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
• start-line = request-line / status-line
• request-line = method SP request-target SP HTTP-version CRLF
• status-line = HTTP-version SP status-code SP reason-phrase CRLF
• header-field = field-name ":" OWS field-value OWS
• OWS = *( SP / HTAB )
• field-name = token
• field-value = *( field-content / obs-fold )
• message-body = *OCTET
如上是基于ANBF的HTTP定义
例如说下面的实例图可以对照定义看一下:
image.png
http方法
http1.1规定了八种方法
- GET 获取读取资源
- HEAD 获取资源的源信息
- POST向资源提交数据,写入上传数据
- PUT向资源提交数据,返回无body
- DELETE删除
- CONNECT 建立特殊连接隧道
- OPTIONS 列出对资源实行的方法
- TRACE 列出请求响应的传输路径
HTTP 状态码
状态码 | 含义 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
这里特别说明一下重定向,这个功能特别有用。
- 例如现在网站都基本要求用https访问,而用户输入http,服务器可以返回301,并指向https的URL。
- 负载均衡。用户向负载均衡服务器发送请求,负载均衡服务器计算出一个请求服务器地址,然后给用户返回301和新的地址,用户接着访问新的地址。这种方式不太常用。
HTTP URL与DNS
protocol :// hostname[:port] / path / [;parameters][?query]#fragmen
URL定义如上,细节就不再解释了。关键是下面的DNS系统。
当用户填写URL时,会填写hotsname,hostname如果是ip,则不方便,就发展处DNS系统。DNS系统是一个高性能、高可用的系统,可给用户查询ip地址和端口,过程如下:
- 输入URL后,浏览器先访问本地缓存,找到就下一步。
- 查询根域名,根域名服务器给出顶级域名服务器地址
- 查询顶级域名服务器,给出权威域名服务器地址。
- 权威域名服务器给出具体的地址。
在这个机制下,可以使用域名服务器作为首层负载均衡,可以注册多个地址,DNS
服务器根据一定的算法分配一个应用服务器访问。同时,可以为了安全考虑,DNS注册不同的地方的应用服务器,设计一个异地多活系统。
小结
今天讲的是HTTP协议的主要部分,URL、HTTP定义、HTTP方法、HTTP状态码,可以看到这个层面知识点不少。但是在实际的工程使用中,怎样使HTTP达到高性能,达到工程商用的标准,下一讲我们继续看HTTP\1扩展出来的只是。
网友评论