HTTP
本文最后更新于307 天前,其中的信息可能已经过时,如有错误请发送邮件到3063503032@qq.com

DNS过程

1.用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端 了 2.浏览器将接收到的url中抽取出域名字段,就是访问的主机名,, 并将这个主机名传送给 DNS应用的客户端。 3.DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段 (中间包括一些列缓存查询以及分布式DNS集群的工作) 4.该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址。 5.一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP 连接。

web开发框架有哪些

介绍一下你对浏览器内核的理解?

主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。 (1)渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。 (2)JS引擎则:解析和执行javascript来实现网页的动态效果。 最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

Http协议

简介

HTTP协议Hyper Text Transfer Protocol(超文本传输协议),用于从万维网服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件,图片文件, 查询结果等)的应用层协议。 HTTP协议工作于C/S或C/B架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP 工作原理

  • HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
  • Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
  • Web服务器根据接收到的请求后,向客户端发送响应信息。
  • HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

URL

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。 URL是一种特殊类型的URI,全称是UniformResourceLocator(统一资源定位符),是互联网上用来标识某一处资源的地址。

URL组成部分

浏览器输入url按回车背后经历了哪些?

1.在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事? 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会得到服务器端ip。若没有,则跳到第三步操作。 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求; 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存); 路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存; ISP缓存:若上述均失败,继续向ISP搜索。 3、域名解析(DNS解析),解析获取相应的(服务器)IP地址。然后发送http请求来建立TCP三次握手。 4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。 5、握手成功后,浏览器向服务器发送http请求,请求数据包。 6、服务器处理收到的请求,将数据返回至浏览器 7、浏览器收到HTTP响应 8、浏览器解码响应,如果响应可以缓存,则存入缓存。 9、 浏览器解析HTML,准确地说,浏览器需要加载解析的不仅仅是HTML,还包括CSS、JS。以及还要加载图片、视频等其他媒体资源。 10、页面根据渲染规则全部渲染结束。 11.客户端没有数据发送时就需要断开连接,以释放服务器资源。(四次挥手)

GET POST区别

一般我们在浏览器输入一个网址访问网站都是GET请求,在FORM表单中,可以通过设置MEthod指定提交方式为GET或者POST提交方式, 默认为GET提交方式

  1. 原理上的区别:HTTP定义了与服务器交互的不同方法,其中最基本的四种GET POST PUT DELETE HEAD,GET和HEAD被称为安全方 法,意味着不会在服务器上产生任何动作,不会修改信息,POST可能会修改服务器上的资源的请求
  2. 请求上的区别: GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接,URL的编码格式采用ASCII,而不是 unicode,也就是是说所有非ASCII字符都要编码之后再传输 Post 请求:请求会把请求的数据设置再HTTP请求包的包体中,因此GET请求的数据会暴露再地址栏中,而POST请求则不会。
  3. 传输数据的大小: 对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。一般传输数据大 小不超过2k-4k 对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS 都有各自的配置。
  4. 安全性(这里说的是真正的安全性) POST的安全性比GET的高,这里的安全指的是真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务 器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏 览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击
  5. 后退页面的反应: get请求页面后退时,不产生影响 post请求页面后退时,会重新提交请求 **GET在浏览器回退时是无影响的,POST会再次提交请求
  6. 缓存性: get请求是可以缓存的 post请求不可以缓存 GET请求会被浏览器主动cache,而POST不会,除非手动设置
  7. 数据传输上: get,通过拼接url进行传递参数 post,通过body体传输参数 GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包, 浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

什么是长连接、短连接?

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。 HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

工作流程

针对Server端来说:

建立连接

接收请求

处理请求

访问资源

构建响应报文

发送响应报文

记录日志

http重定向

当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。 性能缺陷:

  • 吞吐率限制

主站点服务器的吞吐率平均分配到了被转移的服务器。现假设使用RR(Round Robin)调度策略,子服务器的最大吞吐率为1000reqs/s,那么主服务器的吞吐率要达到3000reqs/s才能完全发挥三台子服务器的作用,那么如果有100台子服务器,那么主服务器的吞吐率可想而知得有大?相反,如果主服务的最大吞吐率为6000reqs/s,那么平均分配到子服务器的吞吐率为2000reqs/s,而现子服务器的最大吞吐率为1000reqs/s,因此就得增加子服务器的数量,增加到6个才能满足。

  • 重定向访问深度不同

有的重定向一个静态页面,有的重定向相比复杂的动态页面,那么实际服务器的负载差异是不可预料的,而主站服务器却一无所知。因此整站使用重定向方法做负载均衡不太好。 我们需要权衡转移请求的开销和处理实际请求的开销,前者相对于后者越小,那么重定向的意义就越大,例如下载。你可以去很多镜像下载网站试下,会发现基本下载都使用了Location做了重定向。

头部信息

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。

登录到CSDN后,随便点了一个资源,看看HTTP头部信息:  从上图可以看到,头部信息包括三部分: 1、通用头部 2、请求头部 3、响应头部 4、查询字符串参数 分别介绍:

1、通用头部

通用头域包含请求和响应消息都支持的头域。Request URL:请求的URL地址
Request Method: 请求方法,get/post/put/……
Status Code:状态码,200 为请求成功
Remote Address:路由地址

2、请求头部

1) Accept: 告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型;
    2)Accept-Charset: 浏览器申明自己接收的字符集
    Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
    3)Accept-Language: 浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。
    4)Authorization: 当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,该头部来回应自己的身份验证信息给WEB服务器。
    5)Connection:表示是否需要持久连接。close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,
    不要等待本次连接的后续请求了)。keep-alive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。
    6)Referer:发送请求页面URL。浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL。
    7)User-Agent: 浏览器表明自己的身份(是哪种浏览器)。
    8)Host: 发送请求页面所在域。
    9)Cache-Control:浏览器应遵循的缓存机制。
          no-cache(不要缓存的实体,要求现在从WEB服务器去取)
          max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)
          max-stale:(可以接受过去的对象,但是过期时间必须小于 max-stale 值)  
          min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象)
    10)Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。
    11)Range:浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。
    12)Form:一种请求头标,给定控制用户代理的人工用户的电子邮件地址。
    13)Cookie:这是最重要的请求头信息之一

以上仅列出了我见过的请求头部,欢迎指正和补充!

3、响应头部

1)Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。
    2)Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受。
    3) Cache-Control:服务器应遵循的缓存机制。
            public(可以用 Cached 内容回应任何用户)
            private(只能用缓存内容回应先前请求该内容的那个用户)
            no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)
            max-age:(本响应包含的对象的过期时间)  
            ALL: no-store(不允许缓存)  
    4) Connection: 是否需要持久连接
            close(连接已经关闭)。
            keepalive(连接保持着,在等待本次连接的后续请求)。
            Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300
    5)Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。 例如:Content-Encoding:gzip
    6)Content-Language:WEB 服务器告诉浏览器自己响应的对象的语言。
    7)Content-Length:WEB 服务器告诉浏览器自己响应的对象的长度。例如:Content-Length: 26012
    8)Content-Range:WEB 服务器表明该响应包含的部分对象为整个对象的哪个部分。例如:Content-Range: bytes 21010-47021/47022
    9)Content-Type:WEB 服务器告诉浏览器自己响应的对象的类型。例如:Content-Type:application/xml
    10)Expired:WEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。
    11) Last-Modified:WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。
    12) Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。
    13)Proxy-Authenticate: 代理服务器响应浏览器,要求其提供代理身份验证信息。
    14)Server: WEB 服务器表明自己是什么软件及版本等信息。
    15)Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。

报文格式

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度 是不确定的。HTTP有两类报文:请求报文和响应报文。 请求报文 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数 据4个部分组成。 请求行,请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们 用空格分隔。例如,GET /index.html HTTP/1.1。 请求头部,请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。 请求头部通知服务器有关于客户端请求的信息,典型的请求头有: 空行,最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再 有请求头。对于一个完整的http请求来说空行是必须的,否则服务器会认为本次请求 的数据尚未完全发送到服务器,处于等待状态。 请求数据,请求数据不在GET方法中使用,而是在POST方法中使用。Http中 header主要来存放cookie,token等信息的 body主要用来存放post的一些数据

图片.png

请求方法

Http请求方式,请求头 GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取 POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交 HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响 应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全 部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看 服务器的性能 PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法 客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。 GET:请求指定的页面信息(仅0.9) HEAD:类似get请求,但是返回仅仅是(1.0) POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)(1.0) PUT:从客户端向服务器传送的数据取代指定的文档内容(1.1) DELETE:请求服务器删除指定的页面(1.1) CONNECT: 预留给能够将连接改为管道方式的代理服务器 OPTIONS:允许客户端查看服务器的性能 TRACE: 回显服务器收到的请求,主要用于测试或诊断!

HTTP协议版本

HTTP/0.9:仅支持GET方法,仅能访问HTML格式的资源。 HTTP/1.0:增加POST和HEAD方法,MIME支持多种数据格式,开始支持Cache。 HTTP/1.1:支持持久连接(保持连接),一个TCP连接允许多个请求,新增PUT、PATCH、DELETE等方法,带宽优化及网络连接的使用。 HTTP/2.0:性能大幅提升,新的二进制格式,多路复用,header压缩,服务端推送。

服务端推送

服务端推送是一种在客户端请求之前发送数据的机制。在HTTP2.0中服务端可以对客户端的一个请求发送多个响应。Server Push让HTTP1.x使用内嵌资源的优化手段变得没有意义。 服务端推送还有一个很大的优势:可以缓存。也让在遵循同源的情况下,不同的页面之间共享资源成为可能。

二进制分帧

关键之一就是在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。 二进制分帧层中,HTTP/2会将所有传输的信息分割成为更小的消息和帧,并对他们采用二进制格式的编码。

多路复用:

**Keep-Alive**解决的核心问题:一定时间内,同一域名多次请求数据,只建立一次HTTP请求,其他请求可复用每一次建立的连接通道,以达到提高请求效率的问题。这里面所说的一定时间是可以配置的,不管你用的是Apache还是nginx

第一个:串行的文件传输。 当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。(注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输)

HTTP/2引入二进制数据帧的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据,这就是所做的事情。

第二个:连接数过多。 我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。

HTTP/2对同一域名下所有请求都是基于,也就是说同一域名不管访问多少文件,也只建立一路连接。同样Apache的最大连接数为300,因为有了这个新特性,最大的并发就可以提升到300,比原来提升了6倍!

header压缩:

1.2.0中head头部更小 2.通讯双方各有一个head表,避免重复发送 3.使用新的二进制格式,更加健全

get和post方法区别

1.GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx? name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。 2.GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。 3.GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。 4.GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

响应报文

Response消息格式:

状态行、响应报头、空行和响应数据四个部分组成 状态行:协议/协议版本 状态码 状态消息 响应头部:说明客户端使用的一些附加信息 空行 响应数据

状态码

1xx:指示信息——表示请求已经接收,继续处理 2xx:成功,表示请求已经被成功接收、理解、接收 3xx:重定向——要完成请求必须进行更进一步的操作 4xx:客户端错误——请求的语法有错误或请求无法实现 5xx:服务端错误——服务器未能实现合法的请求!

200:OK请求已经正常处理完毕 301:请求永久重定向 302:请求临时重定向 304:请求被重定向到客户端本地缓存 400:客户端请求存在语法错误 401:客户端请求没有经过授权 403:客户端的请求被服务器拒绝,一般为客户端没有访问权限 404:客户端请求的URL在服务端不存在 500:服务端永久错误 503:服务端发生临时错误 ##

网站访问量

IP访问量 PV网页访问量 UV访客访问量

HTTPS协议

HTTPS工作流程

HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。 SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0 TLS的全称是Transport Layer Security,即安全传输层协议,最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。 HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。

与HTTPS区别

一、传输信息安全性不同 1、http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。 2、https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。 二、连接方式不同 1、http协议:http的连接很简单,是无状态的。 2、https协议:是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。 三、端口不同 1、http协议:使用的端口是80。 2、https协议:使用的端口是443. 四、证书申请方式不同 1、http协议:免费申请。 2、https协议:需要到ca申请证书,一般免费证书很少,需要交费。

## HTTPS在传输的过程中会涉及到三个密钥: 服务器端的公钥和私钥,用来进行非对称加密 客户端生成的随机密钥,用来进行对称加密 一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。 1.客户端向服务器发起HTTPS请求,连接到服务器的443端口 2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。 3.服务器将自己的公钥发送给客户端。 4.客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。 5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。 6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。 7.然后服务器将加密后的密文发送给客户端。 8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

SOCKET

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。包 含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的 协议端口,远地主机的IP地址,远地进程的协议端口。

意义

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服 务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输 数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP /IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区 分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

建立socket连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket , 另一个运行于服务器端,称为ServerSocket 。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状 态,实时监控网络状态,等待客户端的连接请求。 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。 为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接 字的地址和端口号,然后就向服务器端套接字提出连接请求。 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响 应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端, 一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状 态,继续接收其他客户端套接字的连接请求。

socket通信流程、

服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket 服务器为socket绑定ip地址和端口号 服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的 socket并没有被打开 客户端创建socket 客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket 服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户 端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端 返回连接信息后才返回,开始接收下一个客户端谅解请求 客户端连接成功,向服务器发送连接状态信息 服务器accept方法返回,连接成功 客户端向socket写入信息 服务器读取信息 客户端关闭 服务器端关闭

Socket连接与HTTP连接区别

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可 开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器 之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火 墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮 询告诉网络,该连接处于活跃状态。

而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要 客户端向服务器发出请求后,服务器端才能回复数据。 很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时 与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端; 若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回 给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也 是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

Cookie and Session,Token

Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器 cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie 的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关 闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话 cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开 浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以 在不同的浏览器进程间共享,比如两个IE窗口。

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就 是使用散列表)来保存信息。

区别

1.存取方式的不同,Cookie中只能保管ASCII字符串,而Session中能够存取任何类型 的数据,包括而不限于String、Integer、List、Map等。 2.隐私策略的不同,Cookie存储在客户端阅读器中,对客户端是可见的,而Session存 储在服务器上,对客户端是透明的。假如选用Cookie,比较好的方法是,敏感的信息 如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加 密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。 3.有效期上的不同,Cookie可以方便的设置。Session依赖于名为JSESSIONID的 Cookie,而且假如设置Session的超时时间过长,服务器累计的Session就会越多,越 容易招致内存溢出。 4.服务器压力的不同,Session是保管在服务器端的,每个用户都会产生一个Session ,耗费大量的内存。而Cookie保管在客户端,不占用服务器资源 5.跨域支持上的不同,Cookie支持跨域名访问,而Session则不会支持跨域名访问。 Session仅在他所在的域名内有效。

Token :

token是用户身份的验证方式,我们通常叫它:令牌。最简单的token组成:uid(用户唯 一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算 法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还 可以把不变的参数也放进token,避免多次查库。 **

应用场景:

A:当用户首次登录成功(注册也是一种可以适用的场景)之后, 服务器端就会生成一 个 token 值,这个值,会在服务器保存token值(保存在数据库中),再将这个token值返 回给客户端. B:客户端拿到 token 值之后,进行本地保存。(SP存储是大家能够比较支持和易于理 解操作的存储) C:当客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带 到参数中发送给服务器. D:服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值 做对比 对比一:如果两个 token 值相同, 说明用户登录成功过!当前用户处于登录状态! 对比二:如果没有这个 token 值, 则说明没有登录成功. 对比三:如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录.

session和 token并不矛盾,作为身份认证token安全性比session好,因为每个请求都 有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇