http协议详解
HTTP协议:超文本链接协议,是一种互联网中应用最广泛的网络协议。
一、http的协议特点可以分为一下几种:
1.支持c/s模式
2.传输内容灵活,可以支持所有传输内容类型。
3.无状态协议,服务器不保存客户端的连接状态,节省了服务器的工作负担。
HTTP是一种基于客户端/服务器模式的应用层协议,通常客户端使用的是浏览器,在浏览器上方输入一个url即可访问目标服务器的url,url的具体结构如下。
http://[host]:[port]/[abs]
一个url包含了使用的协议类型http/https、目标主机的域名或者ip地址、访问目标服务器应用运行的端口(在缺省情况下默认是80),以及访问目标服务器的相对路径,如果没有则必须用/的形式给出。
我们在浏览器输入一个www.baidu.com的时候,浏览器会自动帮我们将其填充为https://www.baidu.com/。
输入完url之后,浏览器会向目标服务器发送链接请求,这个链接一般是基于tcp/ip协议簇的,但是http并没有规定一定要使用tcp/ip协议,只是假定要运行在可靠的链接协议之上,所以使用其他协议或者网络调用http协议也是可行的。
二、HTTP请求:
http的请求头可以分为三个部分:请求行,请求报头,请求正文。
1.请求行以请求方法开头,之后接着请求的url,最后是使用的协议类型(HTTP1.0/HTTP1.1/HTTP2.0)
例:GET https://www.baidu.com/ HTTP2.0
2.请求报头
常见请求头:
referer:表示是从哪个url跳转过来的,通常可以使用防御csrf攻击,但可以被篡改。
accept:告诉服务器可以接受的相应数据类型,专业术语为MIME类型。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
text/html,html文件
text/css,css文件
text/javascript,js文件
image/*,所有图片文件
cookie:客户端携带的cookie信息。
User-Agent:浏览器通知服务器,客户端浏览器与操作系统相关信息
Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接,close已关闭
host:请求的主机名
content-length:请求体的长度
Cache-Control:指定请求和响应遵循的缓存机制
三、HTTP响应
http的响应也是由三个部分组成的:状态行,消息报头,响应正文。
1.状态行形式由http协议类型(HTTP1.0/HTTP1.1/HTTP2.0),响应码,状态码的文本描述组成。
例:HTTP2.0 200 OK
状态码由三个数字组成,第一个数字代表了响应的类别,且有五种可能的取值:
1xx:指示信息,表示请求已经接受,继续处理
2xx:成功,表示请求已经被成功接收处理
3xx:重定向,要完成此请求必须完成重定向操作
4xx:客户端错误,请求有语法错误或者无法达到
5xx:服务器错误,服务器未能实现会话
状态码的文本描述分为:
200 OK
400 BAD REQUEST
401 Unauthorized
403 Forbidden
404 Not Found
500 Internet Server Error
503 Server Unavailable
2.消息报头
Location:指定相应的路径,需要配合302进行重定向。
Set-cookie:向客户端写入cookie信息。
Server:指定的是服务器的容器。apache nginx
四、HTTP请求详细过程
当我们在浏览器输入一个地址WWW.QQ.COM到网页回显到我们的浏览器上,一般经过一下几个步骤
1.dnslookup,根据我们在浏览器输入的域名,我们会根据dns协议去寻找对应的ip地址,来访问目标主机
2.客户端与服务器建立tcp链接,三次握手:syn,synack,ack
3.客户端封装请求报文
4.客户端发送请求报文
5.服务器接收请求报文并解析
6.WSGI数据解析,将『请求报文』封装城HtttpRequest对象:WSGI Web Server Gateway Interface 服务器网关接口
7.WSGI 进行协议解析,将HttpResponse对象封装成『响应报文』
8.HTTP Server将『响应报文』发送给客户端
9.关闭tcp链接,四次握手fin,ack,fin,ack(如果connection:keep-alive则不关闭tcp链接)
10.客户端接受『响应报文』
11.解析报文渲染成网页。