rainit2006 / C-Program

C# Program knowledge
0 stars 0 forks source link

HTTP协议相关 和 Server #8

Open rainit2006 opened 7 years ago

rainit2006 commented 7 years ago

有HTTP协议不同版本的介绍 http://www.ruanyifeng.com/blog/2016/08/http.html

Cokie和session的区别 https://www.zhihu.com/question/19786827

概括: 1,session 在服务器端,cookie 在客户端(浏览器) 2,session 默认被存在在服务器的一个文件里(不是内存) 3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id) 4,session 可以放在 文件、数据库、或内存中都可以。 5,用户验证这种场合一般会用 session

servlet的doGet,doPost来处理http响应 https://www.zhihu.com/question/20144588

rainit2006 commented 7 years ago

Http2 http://blog.redbox.ne.jp/http2-cdn.html

主な機能

rainit2006 commented 7 years ago

正向代理和反向代理(reverse proxy)

正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。

反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。

rainit2006 commented 7 years ago

Firewall http://www.atmarkit.co.jp/ait/articles/0105/17/news002.html

ファイアウォールには、3枚のネットワークカードが差さっており、それぞれイントラネット、インターネット、そしてDMZという3つのネットワークに分けられています。DMZとは「DeMilitarized Zone」という意味で、非武装地帯と訳されます。DMZでは、インターネットに公開されるサービスが運用され、イントラネットには業務で使用されるパソコンが接続されるものとします。

ここでは、公開するサービスへのアクセスのみを許可し、DMZからイントラネットへのアクセスは基本的に不許可とします。もし万が一、DMZ上のホストが、悪意を持った人間に乗っ取られたとしても、イントラネット側には影響が及ばないようにするためです。

ファイアウォールの種類 ファイアウォールは大きく分けて、パケットフィルタリング型プロキシ型に分類できます。

パケットフィルタリング型 主にパケットのヘッダ部分を参照することによって、アクセスの許可/不許可を決定します。 セキュリティを高めるために、パケットフィルタリング型のファイアウォールでは、パケットフィルタリングと同時にアドレス変換機能をよく使います。アドレス変換とは、NAT(Network Address Translation)と呼ばれ、パケットの送信元/送信先アドレスを書き換えてしまう機能のことをいいます。

プロキシ型ファイアウォール プロキシ型のファイアウォールは、小包(パケット)をすべて開封して、あて先や中身を確認した後、代理で配送を行う配達人のような役割を果たします。同時に、ユーザー単位でのアクセス制限や、コンテンツによるフィルタリングなど、パケットフィルタリング型より細かい設定が可能です。 プロキシ型がパケットの中身(データ部分)まで参照しているため、このようなことが可能なのです。しかし、その分処理が多くなってしまうため、パケットフィルタリング型と比べるとパフォーマンスがあまりよくない、という欠点があります。 その代わり、プロキシ型はパケットフィルタリング型と比べて、TCP/IP についてあまり詳しい知識を必要としない、ログを参照すると通信状況が一目で分かる、などの利点を持っています。

ファイアウォール構築には、何が必要か? ファイアウォールの構築にあたっては、まずポリシー設計から始めます。ポリシーとは、アクセス制限のルールだけでなく、ファイアウォールを運用する際の方針まで含みます。

Difference between proxy server and reverse proxy server http://stackoverflow.com/questions/224664/difference-between-proxy-server-and-reverse-proxy-server/366212#366212

rainit2006 commented 7 years ago

アドレスとポート IPアドレスが住所だとすると、ポート番号は各サービスの窓口のようなものです。例えば、SMTPは25番、POPは110番というふうに、主要なサービスには「well-knownポート」と呼ばれるポート番号が割り当てられています

three-way handshaking TCPでは、データのやりとりを始めるまでに、「3ウェイ・ハンドシェイク(three-way handshaking)」と呼ばれる手順で接続を確立する必要があります。3ウェイ・ハンドシェイクでは、「SYN」「SYN+ACK」「ACK」という3種類のフラグがセットされたパケットがやりとりされます

TCPの接続において、オープン時に、スリーウェイハンドシェイクという手順で、接続を確立します。このハンドシェイクで初期シーケンス番号を交換し、2つのホストがそれぞれの初期シーケンス番号を同期させます。

http://atnetwork.info/tcpip/tcpip10101.jpg

rainit2006 commented 7 years ago

tomcat 与 nginx,apache的区别 https://www.zhihu.com/question/32212996

严格的来说,Apache/Nginx 应该叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。

一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。

而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。

NginX https://lnmp.org/nginx.html

nginX和Tomcat的结合应用 nginx可以做以下几件事:

反向代理 nginx做为reverse proxy server: 让nginx监听一个端口,譬如80端口。但实际上nginx会把请求转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回数据给nginx,再由nginx进行返回Client。 这里,Client会以为是nginx进行了处理,但实际上进行处理的是tomcat。

说到上面的方式,可以把静态文件交由nginx来进行处理。 事实上很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。

负载均衡 现在客户端所有请求都经过nginx了,那么nginx就可以决定将这些请求转发给谁,如果服务器A的资源更充分(CPU更多、内存更大等等),服务器B没有服务器A处理能力强,那么nginx就会吧更多的请求转发到A,转发较少的请求到服务器B,这样就做到了负载均衡,而且就算其中一台服务器宕机了,对于用户而言也能正常访问网站。 当然了,使用nginx做负载均衡之后还有一个很重要的问题亟待解决——session集群共享。 可以使用shiro和redis做session集群共享,这样子随着业务的增长,后期有更多的服务器需要负载均衡也算是有基础了。

nginx 的 upstream目前支持 4 种方式的分配

动静分离 借助于nginx强大的转发功能,可以通过配置实现网站的动态请求和静态文件进行分离,将动态请求发送到服务器A,将静态文件转发到服务器B,这样便于nginx做静态文件的缓存和后期对网站使用CDN。

配置tomcat实例(nginx+tomcat3台+redis): http://www.jb51.net/article/98825.htm