HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件,图片文件,查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
URL:
带层次的文件路径:浏览器请求的资源路径, “ / ”是HTTP服务器定义的逻辑上的根目录
查询字符串: 浏览器给HTTP服务器提交的数据
提交的单个数据是按照key=value的形式,多个数据之间用 & 进行分隔。
URL编码(urlencode):防止在提交数据的时候不加区分,造成歧义
比如数据C++中的+表示一个字符而非表达式中的加。
在传输特殊字符的时候,需要进行URL编码,编码的方式就是将特殊字符按照16进制进行传输,为了区别编码 之 后的字符,需要在编码之后的内容上加上% ,进行区分
对于服务器而言,在接收URL编码之后的查询字符串后,需要进行URL解码
片段标识符:表示当前页面被浏览器加载之后,定位到了什么位置。
HTTP请求/相应的步骤如下:
- 客户端连接到服务器(一个HTTP客户端,通常是 浏览器,与Web服务器的HTTP端口建立一个TCP套接字链接)
- 发送HTTP请求(通过TCP套接字,客户端向Web服务器发送一个文本的请求报文)
- 服务器接收请求并返回HTTP响应(Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,有客户端读取。)。
- 释放TCP连接(若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则连接会保持一段时间,在该时间内可以继续接受请求)
- 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
一个请求报文有请求首行、请求头部、空行和请求数据 4部分组成。
请求首行:请求方法 URL 协议版本 \r\n
请求头部:具有多行数据,每行数据都是一个key:value的形式,每行数据都是用\r\n进行分隔。
一个响应由状态行、响应头部、空行、响应数据4部分组成
响应首行:协议版本 状态码 状态码解释 \r\n
响应头部:具有多行数据,每行数据都是一个key:value的形式,每行数据都是用\r\n进行分隔。
请求方法:
GET: 从服务器上面获取一个资源的方法
GET并不是只能向服务器获取资源,其实也可以在查询字符串当中提交数据到浏览器当中
GET请求提交的数据都是在URL当中
POST 向服务器提交数据的方法
POST提交的数据是在正文当中
总之:POST方法比GET方法更加私密,但使用加密操作(ssl tsl)才更加安全
请求头部:
Content-Length :正文长度,防止粘包
Content-Type:正文的编码格式
text/html:HTML格式 application/json:json数据格式
text/plain:纯文本格式 application/msword :word文档格式
text/png :png图片格式
referer:当前的页面是从哪一个页面跳转过来的
Cookie:向服务器日较浏览器本地保存的认证信息,认证信息是之前登陆服务器的时候,服务器返回回来的。
Tranfer-Encoding:针对正文,支持分块传输;
Location:和重定向搭配使用,http服务器会告诉浏览器,你刚刚请求的页面应该去哪一个地址上面重新申请下
User-Agent:声明操作系统和浏览器版本信息
Connection:keep-alive 保持长连接
状态码:
1xx 接收到的请求正在处理
2xx 请求正常处理完毕 eg:200 OK
3xx 重定向状态,表示浏览器需要进行附加操作,才能完成刚才的请求操作 eg 302 临时重定向
4xx 服务器无法处理这个请求 eg:404 Page Not Found
5xx 服务器处理出错了 eg:502 Bad Gateway
在浏览器地址栏键入URL,按下回车之后会经历哪些流程呢?
-
浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
-
解析出IP地址后, 根据该IP地址和默认端口80,和服务器建立TCP连接
-
浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求作为TCP三次握手的第三个报文的数据发送给服务器
-
服务器对浏览器请求作出相应,并把对应的html文本发送给浏览器
-
释放TCP连接
-
浏览器显示html文本的内容
http协议是应用层的协议,在传输层使用tcp协议,在网络层使用ip协议
http本身是为了处理大量的请求,设计在传输层使用tcp连接为短连接,目前http已经支持了长链接
http是没有加密版本的http协议,加密版本可以使用https, s代表ssl:非对称加密