什么是HTTP协议
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。目前有两个版本 HTTP/1.0和HTTP/1.1。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议(同一个客户端的这次请求和上次是没有关系的)。HTTP协议永远都是客户端发起请求,服务器回送响应。默认HTTP的端口号为80,HTTPS的端口号为443。
一次HTTP操作流程
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
HTTP请求报文
包括:请求行,请求头部,\r\n,请求体
请求行: 请求方法(空格)URL(空格)协议版本
一个典型的 URL 是这样的
http://www.example.com/path/to/file?para1=foo&2=bar#abc
问号之前的部分可以理解为文件的路径,它指向服务器上的一个脚本文件。问号之后井号之前是传给这个脚本的一些参数。这些参数之间是用 「&」符号分隔的。每个参数等号前是参数名,等号后是参数值。
井号之后是页面内定位用的,指向页面内的标签。
请求方法:
get请求:
将请求参数追加在url后面,不安全,url长度限制get请求方式数据的大小,没有请求体,一般的HTTP请求大多都是GET。
post请求:
请求参数在请求体处,较安全。请求数据大小没有显示,只有表单设置为method=“post”才是post请求,其他都是get请求
HEAD请求:
HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
DELETE请求:
删除某一个资源。
OPTIONS请求:
用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
PUT请求:
把一个资源存放在指定的位置上,本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
TRACE请求:
回显服务器收到的请求,主要用于测试或诊断。
CONNECT请求:
CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。
请求头:
请求头通常以键值对{key:value}方式传递数据。
key为规范的固定值,value为key对应的取值,通常是一个值,可能是一组。
Referer:表示这个请求是从哪个url跳过来的,通过百度来搜索淘宝网,那么在进入淘宝网的请求报文中,Referer的值就是:www.baidu.com。如果是直接访问就不会有这个头。
Accept:告诉服务端,该请求所能支持的响应数据类型,专业术语称为MIME 类型(文件类型的一种描述方式)
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/*,所有图片文件
User-Agent:浏览器通知服务器,客户端浏览器与操作系统相关信息
Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接,close已关闭
Host:请求的服务器主机名
Content-Length:请求体的长度
Content-Type:请求的与实体对应的MIME信息。如果是post请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码
Accept-Encoding:浏览器通知服务器,浏览器支持的数据压缩格式。如GZIP压缩
Accept-Language:浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n)
请求体
当请求方式是post的时,请求体会有请求的参数,格式如下:
username=zhangsan&password=123
HTTP响应报文
响应头:协议版本(空格)状态码(空格)状态码的描述
响应头部
\r\n
响应体:响应报文体,服务器发送给浏览器的正文,即我们真正要的“干货” ;浏览器将正文加载到内存,然后解析渲染 显示页面内容。