初步了解HTTP协议

时间:2021-08-13 05:00:40
简介:
http,超文本传输协议(Hyper Text Transfer Protocol),用户服务器和本地浏览器之间传送协议,是基于TCP/IP通信协议来传输数据的(HTML、图片、响应结果等)
【TCP/IP,Transmission Control Protocol /Internet Protocol  传输控制协议/因特网互联协议。】
http是一个应用层的面向对象协议,由于其简洁、快速的方式,适用于分布式超媒体信息系统。

主要特点:
1、简单快速:客户端发送请求时,只发送请求方法和路径,协议规模小,通信速度块;
2、灵活:允许传输任意类型的数据对象,正常传输的类型由Content-Type标记;
3、无连接:限制每次连接只处理一个请求,服务器处理完客户端请求,返回响应,并收到客户端的应答后,就断开此次连接;
4、无状态:对于事务处理没有记忆能力。因为缺少状态,如果后续的处理需要前面的信息,则它必须重传,这样会导致每次连接传送的数据量增大。不过,因为没有状态,服务器不需要之前的信息时,服务器应答的速度就较快。
5、HTTP可以用户B/S、C/S模式;

HTTP之URL
HTTP使用URI(Uniform Resource Identifiers)统一资源标识来传输数据和建立连接。其中URL (Uniform Resource Locator)统一资源定位符,是一种特殊的URI,一个URL包含如下部分:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

1、协议部分:http://
2、域名:www.aspxfans.com
3、端口:8080,端口的分配时需要注意,某些端口已经被特定的服务所占用,详细请参考该文章介绍【https://blog.****.net/qq_37788558/article/details/71054874】
4、虚拟目录:从域名后第一个‘/’到最后一个‘/’之间,为虚拟目录
5、文件名:从最后一个‘/’到‘?’之间
6、变量名:第一个而变量名从?开始,变量名之间使用&连接,数字和字符不改变,特殊符号改变,显示为%xx,其中,xx为该符号的ASCII码对应的16进制数。
7、锚部分:从‘#’开始到最后,都是锚部分
在一个URL中,协议+域名为必须包含部分。

URI - URL  - URN
1、URI,统一资源标识符,用来唯一标识一个资源:
    由访问资源的命名机制 + 存放资源的主机名 + 资源自身的名称,由路径表示
2、URL 统一资源定位器,具体URI
     由协议 + 存放由该资源的主机IP地址 + 主机资源具体地址,如目录和文件名等;
3、URN (Uniform resource name), 统一资源命名,通过名字来标识资源,如:mailto:java-net@java.sun.com
URI时一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识方式。URL和URN都是一种URLI,

HTTP之 请求消息 Request
客户端发出的http请求,一般包含:请求行(qreuest line)、 请求头部(header)、空行和数据组成。

初步了解HTTP协议








如下GET 请求 ,使用Charles抓取的request:
GET /234sdffsd/jpg HTTP/1.1
Host:img.mukewang.com
User-Agent:Mozilla/5.0(Windows NT 10.0 WOW64) ...
Accept:image/webp, image/*, */*; q=0.8
Referer:http://www.imooc.com/
Acept-Emcoding:gzip, deflate
Accept-Language:zh-CN, zh; q=0.8

解析:
请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本
请求头部:HOST指出请求的目的地, User-Agent,出服务器和客户端脚本都能访问它,是浏览器类型检测的基础,由你的浏览器客户端来定,在每一个请求中自动发送
空行:请求头部后面的空行是必须的,即使之后的请求数据为空,空行也是必须的
数据:请求数据也叫主体,可以添加任意的其他数据

如下是POST请求的示例:
POST / HTTP1.1
HOST:www.wrox.com
User-Agent:Mozilla/5.0(Windows NT 10.0 WOW64) ...
Content-Type:application/x-www-form-urlencoded
Content-Lenght:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley
第一部分:请求行,指明请求类型post,,协议版本http1.1
第二部分:请求头部,2-6行
第三部分:空行
第四部分:请求数据

HTTP之 响应消息 Response
响应消息也由4部分构成:分别为状态行,消息报头, 空行和响应正文
 
 
HTTP/1.1 200 okDate: Fri, 22 May 2009 06:07:08 GMTContent-Type: text/html; charset=UTF-8
<html> <head></head> <body> <!-- body content --> </body></html>
第一行:状态行,由HTTP协议版本号,状态码,状态消息三部分组成
第二行:消息报头,用来说明服务器的一些附加信息(2-3行)
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本消息。
HTTP之 状态码:
1xx:指示信息--表示已经接收,继续处理
2xx:   成功--表示已被成功接收,理解、接受
3xx: 重定向--要完成请求必须进一步的操作
4xx: 客户端错误--请求语法错误或鉴权不过
5xx: 服务器错误--服务器启动失败,或内部错误
200 ok                  //客户端请求成功
301 redirect            //永久性跳转
302 redirect            //暂时性跳转
400 Bad Request         //客户端请求语法错误,不被服务器理解
401 Ubauthorized        //请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
404 Not Found           //请求资源不存在,如输入了错误的资源
500 Internal Server Error //服务器内部错误
503 Server Unavaliable    //服务器当前不能处理请求,稍后重试
工作原理:
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法,URL,协议版本,请求头部和请求数据。服务器以一个状态行作为响应,内容包含协议版本,成功或错误码,服务器信息,响应头部和响应数据。
1、客户端连接到WEB服务器:
一个HTTP客户端,通常是web浏览器,建立一个TCP套接字连接
2、发送HTTP请求:
通过TCP套接字,客户端向服务端发送文本请求报文
3、服务器端接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源副本写到TCP套接字,由客户端读取。
4、释放连接TCP
若Connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接; 如果模式为keep-alive,则该连接保持一段时间,在该时间内可以继续接受请求(超过session,释放连接)。
5、客户端浏览器解析服务器端返回内容:
客户端浏览器首先解析状态行,查看表明请求是否成功的状态码, 然后解析每一个响应头,响应头告知一下为若干字的HTML文档和文档字符集。客户端读取响应数据并解析HTML,在浏览器窗口显示。