zoukankan      html  css  js  c++  java
  • [转]HTTP协议通信原理

    本文转自《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方法提交的数据则可以从标准输入流中获取。

  • 相关阅读:
    (字典树)Revenge of Fibonacci -- HDU -- 4099
    (字符串 KMP)Blue Jeans -- POJ -- 3080:
    (广搜)聪明的打字员 -- POJ --1184
    (线段树 点更新 区间求和)lightoj1112
    Jquery弹窗插件Lhgdialog的用法
    SQL Server数据库大型应用解决方案总结
    C# 使用XmlDocument类对XML文档进行操作
    反射实例【转】
    如何使用dynamic
    [C#]DataTable常用操作总结
  • 原文地址:https://www.cnblogs.com/my_captain/p/9452356.html
Copyright © 2011-2022 走看看