首页 > Web开发 > 详细

http

时间:2019-12-14 14:38:24      阅读:86      评论:0      收藏:0      [点我收藏+]

 

10-URI的基本格式以及与URL的区别

 HTTP连接的常见流程

 

技术分享图片

 从TCP编程上看HTTP请求处理

 

技术分享图片

 

 

 长连接与短连接

技术分享图片

 

补充一下代理的知识

什么是正向代理,什么是反向代理?

想在外部公网访问公司内部局域网时,需要连公司的代理跳板机进行代理访问;再比如后端开发部署 java项目时,在公司里面也听到了运维那边各种利用 nginx来支持反向代理部署。

正向代理

  正向代理是是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容, 客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

  正向代理是最常接触到的代理模式,最大的特点是客户端非常明确要访问的服务器地址,服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端,正向代理模式屏蔽或者隐藏了真实客户端信息。

正向代理的用途:

  • 访问原来无法访问的资源,如Google

  • 可以做缓存,加速访问资源

  • 对客户端访问授权,上网进行认证

  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

 

 

反向代理( Reverse Proxy )

  反向代理是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

  多个客户端给服务器发送的请求,Nginx服务器接收之后,按照一定的规则分发给了后端的业务处理服务器进行处理了,此时,请求的来源是客户端,但是请求具体来自哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理的角色。

  客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理,"它代理的是服务端",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:

  • 代理服务器,隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见。
  • 保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
  • 负载均衡,通过反向代理服务器来优化网站的负载,将用户的请求分发到空闲的服务器上。
  • 意味着用户和负载均衡服务器直接通信,即用户解析服务器域名时得到的是负载均衡服务器的 IP。

结构图如下:

技术分享图片

 

共同点:

  • 都是做为服务器和客户端的中间层。

  • 都可以加强内网的安全性,阻止 Web 攻击。

  • 都可以做缓存机制,提高访问速度。

 

区别:

  • 正向代理其实是客户端的代理,反向代理则是服务器的代理。

  • 正向代理中,服务器并不知道真正的客户端到底是谁;而在反向代理中,客户端也不知道真正的服务器是谁。

  • 作用不同。正向代理主要是用来解决访问限制问题;而反向代理则是提供负载均衡、安全防护等作用。

我们在此补充一下缓冲机制:

Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。
如果在用户A访问服务器B某数据J之前,已经有人通过代理服务器Z访问过服务器B上得数据J,那么代理服务器Z会把数据J保存一段时间,
如果有人正好取该数据J,那么代理服务器Z不再访问服务器B,而把缓存的数据J直接发给用户A。这一技术在Cache中术语就叫Cache命中。
如果有更多的像用户A的用户来访问代理服务器Z,那么这些用户都可以直接从代理服务器Z中取得数据J,而不用千里迢迢的去服务器B下载数据了。

 

几种常用的 web服务器对比:

技术分享图片

 

 

 

 Connection仅针对当前连接有效

技术分享图片

代理服务器对长连接的支持

 技术分享图片

 

 

 

16-HTTP消息在服务器端的路由

  • Host=uri-host[":"port]

为什么引入host头部?ip地址相对较少,域名相对较多。一个ip地址可能对应着多个域名。

Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术,不传递Host头部则返回400错误响应码。

有一台 ip 地址为 xxx.xxx.xxx.xxx 的服务器,在这台服务器上部署着谷歌、百度、淘宝的网站。为什么我们访问 https://www.google.com 时,看到的是 Google 的首页而不是百度或者淘宝的首页?

原因就是 Host 请求头决定着访问哪个虚拟主机。

虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。

为防止陈旧的代理服务器,发向正向代理的请求 request-target 必须以absolute-form形式出现

  • request-line=method SP request-target SP HTTP-version CRLF
  • absolute-form=absolute-URI
    • absolute-URI=scheme ":"hier-part["?"query]

规范与实现间是有差距的

https://tools.ietf.org/html/rfc7230#section-5.4

 A client MUST send a Host header field in all HTTP/1.1 request messages

A server MUST respond with a 400 (Bad Request) status code to any
HTTP/1.1 request message

  • that lacks a Host header field 
  • to any request message that contains more than one Host header field 
  • a Host header field with an invalid field-value.

 

Host 头部与消息的路由(nginx为例)

1.建立TCP连接
  ·确定服务器的IP地址
2.接收请求
3.寻找虚拟主机
  ·匹配Host头部与域名
4.寻找URI的处理代码
  ·匹配 URI
5.执行处理请求的代码
  ·访问资源
6.生成HTTP响应
  ·各中间件基于PF架构串行修改响应
7.发送HTTP响应
8.记录访问日志

 

技术分享图片

 

 12-详解HTTP的请求行

客户端与源服务器间存在多个代理

技术分享图片

DNS知识补充:

一、DNS域名结构与域名服务器

域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址,也可以说是一种组织成域层次结构的计算机和网络服务命名系统,

它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。

网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。

我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,

这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。

域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。

它的基本工作原理可用下图:

 

 

 

1、域名结构

在了解DNS服务器之前,需要先了解因特网上的域名空间结构,具体如下图所示:

http

原文:https://www.cnblogs.com/wqbin/p/12038861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!