[转]HTTP协议通信原理
了解HTTP
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。
HTTP 是一个网络协议,是专门用来帮你传输 Web 内容
HTTPS HTTP 协议”和“SSL/TLS 协议”的组合。
HTTP使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型都被模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是文档、GIF格式图像、声音文件还是应用程序。它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。
HTTP 和 TCP 之间的关系
TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。
在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。
TCP 被称为“面向连接”的传输层协议。传输层主要有两个协议,分别是 TCP 和 UDP。TCP 比 UDP 更可靠。
有很多常见的应用层协议是以 TCP 为基础的,比如“FTP、SMTP、POP、IMAP”等。
HTTP 协议如何使用 TCP 连接:HTTP 对 TCP 连接的使用,分为两种方式:俗称“短连接”和“长连接”(“长连接”又称“持久连接”,洋文叫做“Keep-Alive”或“Persistent Connection”)
HTTP请求信息和响应信息的格式
请求:
(1)请求行
(2)请求头信息
(3)请求主题信息(可以没有)
(4)头信息结束后和主题信息之间要空一行
请求行又分3部分
请求方法 、请求路径、所用的协议
请求 方法:GET、POST、PUT、DELETE、TRACE、OPTIONS
状态码,状态文字
状态码是用来反服务器响应情况
最常见的如200 OK,404 NOT FOUND
状态文字是用来描述状态码的,便于人观察。
HTTP响应中的状态吗
状态码 定义 说明
1xx 信息 接收到请求,继续处理
2xx 成功 操作成功的收到,理解和接收
3xx 重定向 为了完成请求,必须采取进一部措施
4xx 客户端错误 请求的语法有错误或不能完全被满足
5xx 服务端错误 服务器无法完成明显有效的请求
常见返回值
200 —服务器成功返回网页
301/2 — 永久/临时重定向
304 Not —- 未修改 –取缓存
失败的状态码
404 —请求的网页不存在
503 — 服务器暂时不可用
500 —服务器内部错误
对称加密和非对称加密
“对称加密技术”,意思就是说:“加密”和“解密”使用【相同的】密钥。
“非对称加密技术”,意思就是说:“加密”和“解密”使用【不同的】密钥。
)“非对称加密”能干的事情比“对称加密”要多。
HTTP通信过程
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
1、建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更深层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
2、Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令
例如:GET/sample/hello.jsp HTTP/1.1。
3、 Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
4、Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答,
HTTP/1.1 200 OK
应答的第一部分是协议的版本号和应答状态码。
5、Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
6、Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
7、Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTP请求格式
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
-
请求方法URI协议/版本
-
请求头(Request Header)
-
空行
-
请求正文
下面是一个HTTP请求的例子:
1GET/sample.jspHTTP/1.1
2Accept:image/gif.image/jpeg,*/*
3Accept-Language:zh-cn
4Connection:Keep-Alive
5Host:localhost
6User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
7Accept-Encoding:gzip,deflate
8username=jinqiao&password=1234
请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
1Accept:image/gif.image/jpeg.*/*
2Accept-Language:zh-cn
3Connection:Keep-Alive
4Host:localhost
5User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
6Accept-Encoding:gzip,deflate.
请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。
HTTP请求方法
方法 |
描述 |
GET |
客户端请求指定资源信息,服务器返回指定资源 |
HEAO |
只请求响应报文中的HTTP首部 |
POST |
将客户端的数据提交到服务器 |
PUT |
用从客户端向服务器传送的数据取代指定文档内容 |
DELETE |
请求服务器删除Request-URI所表示的资源 |
MOVE |
请求服务器将指定的页面移至另一个网络地址 |
这里只讨论GET方法与POST方法。
GET方法
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。
例如:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大。
POST方法
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。