HTTP理解

看HTTP协议之前首先要
1.了解OSI七层网络模型(自己百度去)
2.其次要知道TCP/IP协议
为什么呢:因为首先要知道HTTP属于网络模型的哪一层,各层怎么个机制,同类的有哪些,HTTP协议是建立在TCP/IP协议的基础上,否则直接看HTTP协议就算能看懂,也只是懵懂,比如 简介的第二条和第三条就看不懂

1.简介

1.HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
2.HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
3.HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
4.HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

2.主要特点

1.简单快速:客户向服务器请求服务时,主需要传送请求方法和路径,请求方法常用的有GET,POST,HEAD,PUT,每种方法规定了客户与服务器联系的类型不同
2.灵活,允许传送任意类型的数据对象,正在传输的类型由请求头里的参数Content-Type标记,
3.无连接:每次只处理一个请求,服务器处理完客户的请求,收到客户端的应答(TCP应答)之后,就断开连接(TCP连接),
4.无状态:对事务没有记忆能力,意味着,如果后续需要处理前面的信息,就必须重新传输,可能会导致每次传输的数据增大,另一方面如果不需要之前的信息,就很快
5.支持B/S C/S模式,(浏览器服务器模式,客户端/服务器模式)

3 URL

URL (统一资源定位符)是互联网上用于标识某一处资源的地址
1.协议部分(http://)
2.域名部分(www.baidu.com)
3.端口部分(平时省略80,www.baidu.com:80一样的)
4.虚拟目录(/xxx/xxx/)
5.文件名部分(xxx.htm)
6.锚部分(#后面,非必须)
7.参数(?name=xxx&age=10)
URL是URI的一种

4HTTP请求

包含1请求行,2请求头,3,空行,4数据

post/get www.xxx.com/xxx/xxx.jsp?name=xxx&age=xxx http1.1
content-type:xxxxx

请求数据

举个例子(抓包抓到的)


http请求.png

第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
例子中的POST 空格,URL 协议HTTP/1.1 回车换行
第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行。
第四部分: 数据

5 HTTP 响应

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
举例子(抓包抓的)


http响应.png

6.响应状态

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息,--表示请求已接受继续处理
2xx:成功--表示请求已成功接受,理解,接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求语法错误或者请求无法实现
5xx:服务器端错误--服务器端未能实现合法请求
更多状态码http://www.runoob.com/http/http-status-codes.html

7 HTTP工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

1、客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

2、发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5、释放 TCP连接;

6、浏览器将该 html 文本并显示内容;

8get post 区别

get参数在URL中
post参数在请求体中
2
GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。
POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
3.安全性

你可能感兴趣的:(HTTP理解)