文档章节

HTTP协议通信原理 (资源)

寰宇01
 寰宇01
发布于 2018/07/23 22:53
字数 3884
阅读 16
收藏 0

了解HTTP

HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。

HTTP 是一个网络协议,是专门用来帮你传输 Web 内容

HTTPS   HTTP 协议”和“SSL/TLS 协议”的组合。

·  http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态

·  httpd的多道处理三种模型  :   prefork 、work、event、

·  通过URL标记请求资源

·  Client    :     IE、Firefox、chrome、Opera、Safari

·  Server     :    Apache-httpd、IIS、nginx、lightpd、thttpd

·  应用程序服务器

IIS、tomcat (apache ,解析jsp的,开源软件)、Websphere (IBM,解析jsp的,商业软件)、Weblogic (Oracle,解析jsp的,商业软件 )、JBoss (RedHat)、、

·  在请求中 ,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成 

· 在响应中 ,HTTP报文由状态码(数字和原因短语)、HTTP版本、HTTP首部字段3部分构成 

· HTTP首部字段是由首部字段名字段值构成

· HTTP首部字段类型

             通用首部字段

             请求首部字段

             响应首部字段

             实体首部字段

· 次完整的http请求过程

    (1)建立或处理连接: 接收请求或拒绝请求

    (2)接收请求 :接收来自于网络的请求报文中对某资源的一次请求的过程;

             并发访问响应模型(Web I/O)

                 单进程 I/O结构 :  启动一个进程处理用户请求,而且一次只处理一个:多个请求被串行响应;               

                 多进程 I/O结构 :     并行启动多个进程,每个进程响应一个请求;

                 复用I/O结构 :一个进程响应n个请求;

                       多线程模型 : 一个进程生成N个线程,每个线程响应一个用户请求;

                       事件驱动 : event-driven

                复用的多进程 I/O结构 : 启动多个(m)进程,每个进程响应n个请求;

    (3)处理请求 : 对请求报文进行解析,并获取请求的资源及请求方法等相关信息

            元数据 : 请求报文首部

                   <method>URL<VERSION>

                   Host : www.magedu.com  请求的主机名称

                   Connection :

 

    (4)访问资源 :获取请求报文中请求的资源

             web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源:这些资源放置于本地系统某路径下,此路径通常称为DocRoot

            /var/www/html/

                     images/1.jpg

           https://www.ming.com/images/1.jpg

          web服务器资源路径映射方式 :

                      (a) docroot

                      (b)  alias          

                      (c) 虚拟主机docroot

                      (d)  用户家目录docroot

    (5)构建响应报文 :

              MIME类型 :

                       显式分类 

                       魔法分类 

                       协商分类 

             URL重定向 :

                    web服务构架的响应并非客户端请求的资源,而是资源另外一个访问路径;

    (6)发送响应报文

               

    (7)记录日志

http服务器程序 :

            httpd (apache)

            nginx

            lighttpd(轻量级)

            应用程序服务器 :

                    IIS

                   (轻量级)tomcat   , jetty   ,jboss   ,resin  ,

                   (重量级)webshpere  ,weblogic   ,   oc4j ,          

Web服务器的主要操作  : 

1、建立连接 --- 接受或拒绝客户端连接请求;

2、接收请求 --- 通过网络读取HTTP请求报文;

3、处理请求 --- 解析请求报文并做出相应的动作;

4、访问资源 --- 访问请求报文中相关的资源;

5、构架响应 --- 使用正确的首部生成HTTP响应报文;

6、发送响应 --- 向客户端发送生成的响应报文; 

7、记录日志 --- 当已经完成的HTTP事务记录进日志文件;

 

· httpd的特性

             高度模块化 : core + modules

            DSO (动态共享对象): Dynamic Shared Object

            MMP(多路访问模块) :Multipath Processing Modules

                 prefork : 多进程模型,每一个进程响应一个请求

                            一个主进程,负责生成n个子进程,子进程也称为工作流程,每个子进程处理一个用户请求,也会预先生成多个空闲进程,随时等待请求到达:最大不会超过1024个;

                 worker :

                 event : 

· 客户端与服务器端的一次通信,就是一次会话

· 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据

· 存储方式包括cookie、session,会话一般指session对象

· 使用cookie,所有数据存储在客户端,注意不要存储敏感信息

· 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id

· 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

· 注意:不同的请求者之间不会共享这个数据,与请求者一一对应

HTTP使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型都被模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是文档、GIF格式图像声音文件还是应用程序。它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。

       端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。

     CPU通过接口寄存器或特定电路与外设进行数据传送,这些寄存器或特定电路称之为端口。

      端口是指接口电路中的一些寄存器,这些寄存器分别用来存放数据信息、控制信息和状态信息,相应的端口分别称为数据端口、控制端口和状态端口。

 

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

GET                  获取资源       

POST                传输实体主体

PUT                       传输文件

HEAD                     获得报文首部

DELETE                   删除文件

OPTIONS               询问支持的方法

TRACE                    追踪路径

CONNECT              要求用隧道协议连接代理

LINK                       建立和资源之间的联系

UNLINK                  断开连接关系

状态码,状态文字

状态码是用来反服务器响应情况

最常见的如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方法提交的数据则可以从标准输入流中获取。

 

链接:HTTP 断点续传(PHP实现)https://mp.weixin.qq.com/s/nOUIj9q6-8b7_os5zQvxPQ

HTTP协议中POST、GET、HEAD、PUT等请求方法及相应值得含义  https://mp.weixin.qq.com/s/_X-eqZHlWVX3QA_evR8aRA

 

 

OSI模型 :https://mp.weixin.qq.com/s/5pxA2kyQO-tiSMbQRRZBnA

网际协议 -- IP : https://mp.weixin.qq.com/s/tyz2m3cdynCuqgKIPI3hAQ

传输控制协议 -- TCP : https://mp.weixin.qq.com/s/5t3MAed4VsYiFr84E6Dm-w

UNIX下的五种IO模型 : https://mp.weixin.qq.com/s/bXl9yKTuUyjAoR9FK7MzSg

TCP/IP 协议族简介 : https://mp.weixin.qq.com/s/ZegPYeJk5vuA55S3euPnrg

HTTP 协议简介 : https://mp.weixin.qq.com/s/oOJK-OU9U4GDkvw8izMKNw

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文转载自:https://mp.weixin.qq.com/s/ZO8JN04yo5WPdDA6MhkBnQ

共有 人打赏支持
寰宇01
粉丝 8
博文 287
码字总数 745449
作品 0
南京
程序员
私信 提问
RESTful Web服务谁能通俗易懂的讲解下呢?

基于资源的一种架构方式,每个资源有自己特定的uri。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段...

缪斯的情人
2012/08/01
1K
7
01套按字及http基础知识

01套按字及http基础知识 ——以下内容摘自马哥教育课堂 OSI参考模型 资源子网(3)+通信子网(4) 应用层细节 通信细节 用户空间 内核空间 每种用户空间程序有自己的通信协议 进程之间通信如何标...

zhuhc1988
2017/01/08
0
0
Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术...

浮躁的码农
2017/11/07
0
0
WebSocket 实战之——【WebSocket 原理】

一、WebSocket是什么? HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)。 首先HTTP有1.1和1.0之说,也就是所谓的kee...

tinywan1227
2016/09/21
0
0
web服务器、应用服务器、web容器、反向代理服务器区别与联系

我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难。有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现。本文将带读者对这四个相似概念如何...

younger008
2017/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
1
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
2
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部