Web 开发—HTTP协议简介
HTTP协议
HTML是一种用来定义网页的文本,HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。
在浏览器的开发者工具中(需要chrome内核的浏览器才行,我用的QQ浏览器)Elements显示网页的结构,Network显示浏览器和服务器的通信。…(详细见廖雪峰Python教程)
找到 Request Headers 这里显示浏览器发送给目标服务器的请求。将最主要的前两行进行分析:
GET / HTTP / 1.1
GET
表示一个读取请求,将从服务器获得网页数据,/
表示URL的路径,URL总是以/
开头,/
就表示首页。最后的HTTP/1.1
指示采用的HTTP协议版本是1.1。
从第二行开始,每一行都是Xxx: dfsahalk
的结构:
Host: www.baidu.com
表示请求的域名是www.baidu.com
。
往下找到Response Headers
,这里显示服务器返回的原始响应数据:
HTTP响应分为Header和Body两部分,将比较重要的几行进行分析:
200 OK
200
表示一个成功的响应,后面的OK是说明。常见的失败响应:404 NOT FOUND(网页不存在)
,500 Internal Sever Error(服务器内部出错)
Content-Type: text/html
Content-Type
指示响应的内容,text/html
表示HTML网页。
HTTP请求
··步奏··
浏览器首先向服务器发送HTTP请求。 包括:
方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
路径:/full/url/path;
域名:由Host头指定:Host: www.sina.com.cn
以及其他相关的Header;
如果是POST,那么请求还包括一个Body,包含用户数据。服务器向浏览器返回HTTP响应。 包括:
响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;
响应类型:由Content-Type指定;
以及其他相关的Header;
通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。
HTTP格式
一个HTTP包括Header和Body两部分,其中Body是可选的。
HTTP GET请求的格式
GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
每个Header一行一个,换行符是\r\n
。
HTTP POST请求的格式:
POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
body data goes here...
当遇到连续连个\r\n(\r\n\r\n
)时,Header部分结束,后面的数据全部是Body。
HTTP响应的格式:
200 OK
Header1: Value1
Header2: Value2
Header3: Value3
body data goes here...
若HTTP响应包含body,也是通过\r\n\r\n
来分隔的。
Body的数据类型由Content-Type
头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。
当存在Content-Encoding
时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip
时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。