HTTP协议
Posted lesleysbw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。
1. 什么是HTTP协议?
HTTP(HyperText Transfer Protocol),是一套计算机通过网络进行通信的协议,使得HTTP客户(eg:Web浏览器)能从HTTP服务器(Web服务器)请求信息和服务。
2. 性质:
1)是一种无状态的协议。无状态是指当一个客户端向服务器端发出请求(Request),然后服务器端返回相应(Response),连接就会被关闭,在服务器端不保留连接的有关信息。
2)遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并且返回适当的应答。所有HTTP连接都会被构造成一套请求和应答。
3)使用内容类型。指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME Internet邮件协议上模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是html文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序,它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。
3. HTTP通信机制
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成以下4个步骤:建立TCP连接 —— Web浏览器向Web服务器发送请求(Request) —— Web服务器向Web浏览器发送应答(Response)——关闭TCP连接。
1. 建立TCP连接。
HTTP为应用层协议,在HTTP工作开始之前,Web浏览器首先通过网络与Web服务器建立连接——TCP/IP协议。一般TCP连接的端口号:80
2. Web浏览器 —> Web服务器发送请求命令
HTTP请求格式分为三个部分:
1)请求方法 + URI + 协议/版本
GET/sample.jsp HTTP/1.1
- GET:请求方法
- /sample.jsp:URI(统一资源标识符:用于标识某一互联网资源名称的字符串)
- HTTP/1.1:协议和版本号
2)请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
Accept:image/gif.image/jpeg.*/* Accept-Language:zh-cn Connection:Keep-Alive Host:localhost User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0) Accept-Encoding:gzip,deflate.
3)请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
3. Web服务器应答
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成:
- 协议状态版本代码描述
- 响应头(Response Header)
- 响应正文
HTTP/1.1 200 OK Server:Apache Tomcat/5.0.12 Date:Mon,6Oct2003 13:23:42 GMT Content-Length:112 <html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
其中:
第一行:协议状态版本代码描述,表示协议为:HTTP/1.1,200表示:服务器已经成功的处理了客户端发送的请求。
响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:
Server:Apache Tomcat/5.0.12 Date:Mon,6Oct2003 13:23:42 GMT Content-Length:112
相应正文:就是服务器返回的HTML页面(与响应头以一行空行间隔):
<html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
4. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了应答数据,它就要关闭TCP连接。但是我们乐意通过在头文件中加入:
Connection:keep-alive
使得TCP连接在Web服务器发送了应答后仍然保持连接,从而使得浏览器可以继续通过相同的连接发送请求,以节省每个请求都需要建立所需要的时间,同时节约了网络带宽。
4. HTTP请求方法
1)Get方法
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患。
Http://127.0.0.1/login.jsp?Name=lesley&Age=16&Submit=%cc%E+%BD%BB
从上面的URL请求中,我们可以辨认出表单提交的内容(?以后的信息)。另外,由于GET方法提交的数据是作为URL请求的一部分,所以提交的数据量不能太大。
2)POST方法
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。
5. HTTP应答码
- 1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
- 2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK
- 3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。
- 4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT Found,意味着请求中所引用的文档不存在。
- 5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500
6. 安全连接(SSL协议)
Web应用最常见的用途之一是电子商务,可以利用Web服务器端程序使人们能够网络购物,需要指出一点是,缺省情况下,通过Internet发送信息是不安全的,如果某人碰巧截获了你发给朋友的一则消息,他就能打开它,假想在里面有你的信用卡号码,这会有多么糟糕,幸运的是,很多Web服务器以及Web浏览器都有创立安全连接的能力,这样它们就可以安全的通信了。
通过Internet提供安全连接最常见的标准是安全套接层(Secure Sockets Layer,SSL)协议。SSL协议是一个应用层协议(和HTTP一样),用于安全方式在Web上交换数据,SSL使用公开密钥编码系统。从本质讲,这意味着业务中每一方都拥有一个公开的和一个私有的密钥。当一方使用另一方公开密钥进行编码时,只有拥有匹配密钥的人才能对其解码。简单来讲,公开密钥编码提供了一种用于在两方之间交换数据的安全方法,SSL连接建立之后,客户和服务器都交换公开密钥,并在进行业务联系之前进行验证,一旦双方的密钥都通过验证,就可以安全地交换数据。
以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章