前端扫雷之http协议

是什么

HTTP协议(HyperText Transfer Protocol,超文本传输协议),是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在网络分层中位于传输层TCP和网络层IP之上(https还有个安全层TSL or SSL)。

一次http请求过程
访问网站:http://www.joes-hardware.com:80/tools.html
这里写图片描述

1、我们在浏览器中输入网址 http://www.joes-hardware.com:80/tools.html
2、服务器和客户端的通信是基于IP地址的,首先我们需要将域名解析成互联网上的IP地址,进行DNS域名解析得到IP地址
3、浏览器向服务器80端口发起请求经过三次握手建立TCP连接
4、建立连接后,浏览器向服务器发送http请求,请求http://www.joes-hardware.com:80/tools.html 的页面
5、服务器收到请求后将页面返回给浏览器
6、浏览器收到响应后请求关闭TCP连接并渲染页面。

历史

1991 http/0.9
只有一个GET命令,服务器发送完毕就关闭TCP连接。

1996.5 http/1.0
引入POST和HEAD命令,增加头信息,支持任何内容格式。
短连接,一次TCP连接只能发送一个请求。浏览器加入非标准字段Connection: keep-alive 来解决这个问题。

1997.1 http/1.1
当前使用的版本,引入了长连接,不用声明Connection: keep-alive 默认为长连接。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。目前,对于同一个域名,大多数浏览器允许同时建立6个长连接。

增加了DELETE PUT等命令、增加Host字段等。

2015 http/2
它不叫 HTTP/2.0,是因为标准委员会不打算再发布子版本了,下一个新版本将是 HTTP/3。
解决http/1.1 队头堵塞问题、采用二进制协议、允许服务器推送等。

队头堵塞
虽然http/1.1将长连接标准化减少了建立TCP连接的开销,但由于在同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。如果前面的回应特别慢,后面的就会排队等待,导致“队头堵塞”。
为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。

参考链接:http协议入门(阮一峰)

格式

http报文主要由起始行、首部字段、主体三部分组成。

这里写图片描述

首部以一个空行结束。
起始行和首部都是文本形式且都是结构化的,而主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。

请求报文
这里写图片描述

GET请求数据在URL中,因此没有请求数据即主体部分。

响应报文
响应报文起始行为状态行,由协议版本、状态码和状态描述组成。

状态码

状态码反映了响应的状态信息,告知客户端请求是否成功,或者是否需要采取其他动作。
常见的有以下几种:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

HTTP状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。
HTTP状态码共分为5种类型:
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

URL

URL(Uniform Resource Locator)统一资源定位符,URL 描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。

URL由协议、主机名、端口号和资源组成,如果没有端口号则默认为80端口。
如:http://www.joes-hardware.com:80/tools.html
协议:http://
主机名/域名:www.joes-hardware.com
端口::80
资源:/tools.html

猜你喜欢

转载自blog.csdn.net/u012075670/article/details/65440739