a.一次完整的http请求过程

1.域名解析,得到域名对应的IP;

2.三次握手,客户端与服务器通过socket建立TCP/IP连接;

3.浏览器向服务器发送http请求,如:GET/index.html HTTP/1.1;

4.浏览器发送请求头信息,请求内容,最后会发送空白行,表示客户端请求完毕;

5.服务器处理请求:读取参数并进行逻辑操作后,生成指定的数据;

6.服务器做出应答,如:HTTP/1.1 200 OK(协议的版本号和应答状态码);

7.服务器发送应答头信息;

8.服务器发送数据:

服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息发送结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据;

9.tcp连接关闭

一般情况下,一旦Web服务器向发送了客户端请求的数据,它就要关闭TCP连接,如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求,保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽,但会降低服务器性能.

像上面这种写法,是大多数博客上通用的写法,不仅啰嗦,而且还给人一种像是在背书的感觉,下面是我重新整理之后的总结:

1.域名解析,得到域名对应的IP;

2.三次握手,建立TCP/IP连接;

3.客户端向服务器发送HTTP请求报文,此时已经建立了HTTP连接;

4.服务器向客户端发送HTTP响应报文;

5.关闭TCP连接.

请求报文格式说明
请求行-1.请求方法(GET);2.URL(/index.html);3.协议版本(HTTP/1.1)
请求头-字段名1:值1;字段名2:值2...
请求头信息
Accept:image/gif,image/jpeg(媒体类型)
Accept-Language:zh-cn(语言类型)
Accept-Encoding:gzip(支持压缩)
User-Agent(客户端类型)
Host:www.baidu.com(主机名)
空行:最后一个请求头部信息之后是一个空行,发送回车符和换行符,通知Web服务器,空行以下不会再有请求头的信息了
请求报文主体-GET方法没有请求报文主体;POST方法才有,因为POST方法会向服务器发送数据. 响应报文的一般格式
起始行-1.协议及版本号;2.数字状态吗;3.状态信息.
响应头部-字段名1:值1;字段名2:值2...
响应头信息
Content-Type:text/html;charset=utf-8
Content-Length:78
空行:最后一个响应头部信息之后是一个空行,发送回车符和换行符,通知Web服务器,空行以下不会再有响应头的信息了
响应报文主体

b.SYN攻击

在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态,当收到ACK后,服务器转入ESTABLISHED状态.

Syn攻击就是:攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,

这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪.

Syn攻击是一个典型的DDOS攻击.检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击:netstat -np TCP | grep SYN_RECV

一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现.主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.但是不能完全防范syn攻击.

http请求过程1:https://www.cnblogs.com/ddddemo/p/5624053.html

http请求过程2:https://blog.csdn.net/liudong8510/article/details/7908093

TCP的三次握手与四次挥手:https://blog.csdn.net/qzcsu/article/details/72861891

更详细的三次握手四次断开:https://www.cnblogs.com/zmlctt/p/3690998.html

c.正向代理和反向代理

正向代理:代理服务器代理内网用户访问外网;

反向代理:代理外网用户访问内网.

nginx做反向代理:代理服务器为A,内网服务器为B,A把请求转发给B,B处理后,将数据交给A,A再把数据发送给用户;

LVS做负载均衡器:负载均衡器为A,内网服务器为B,A把请求转发给B,B处理后,直接把数据发送给用户,效率略微高点.

nginx作为Web服务器的主要应用场景:

1.使用nginx运行HTML、JS、CSS、图片等静态数据(类似于lightpd);

2.nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass);

3.nginx结合tomcat/resin等支持Java动态程序(常用proxy_pass).

d.网络I/O模型--nginx使用epoll,Apache使用select

select的调用复杂度是线性的,即O(n).举例:一个保姆照看一群孩子,如果把每个孩子是否需要吃饭,比作网络I/O事件,select的工作原理就好比:这个保姆挨个询问每个孩子:你要吃饭么?如果孩子回答:是,则把孩子领出来放到另外一个地方.当所有孩子询问完毕之后,保姆领着这些要吃饭的孩子去吃饭(去处理网络I/O事件);

epoll机制下,保姆不再需要挨个询问每个孩子,而是谁需要吃饭,就主动站到事先约定好的地方,如果有小孩,就带着小孩去吃饭.因此epoll能高效的处理成千上万的并发连接,而且性能不会随着连接数增加而下降太多.

一次完整的http请求过程以及网络I/O模型select、epoll的更多相关文章

  1. 一次完整的 HTTP 请求过程

    一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端, ...

  2. 一个完整的HTTP请求过程详细

    整个流程1.域名解析 —> 2.与服务器建立连接 —> 3.发起HTTP请求 —>4. 服务器响应HTTP请求,浏览器得到html代码 —> 5.浏览器解析html代码,并请求 ...

  3. 在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)

    在浏览器中输入URL后,执行的全部过程.会用到哪些协议?(一次完整的HTTP请求过程) 整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议.ARP协议和OSPF协议. 发起 ...

  4. 一次完整的http请求过程

    转载:https://blog.51cto.com/linux5588/1351007 当我们在浏览器的地址栏输入 www.linux178.com,然后回车,回车这一瞬间到看到页面到底发生了什么呢? ...

  5. 面试题之----一次完整的HTTP请求过程

    当我们在浏览器的地址栏输入 www.linux178.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢? 以下过程仅是个人理解: 域名解析 --> 发起TCP的3次握手 --> ...

  6. 在浏览器中输入URL后,执行的全部过程。(一次完整的http请求过程)

    整个流程如下: 域名解析 为了将消息从你的PC上传到服务器 上.需要用到1P协议.ARP协议和0SPF协议 发起TCP的3次握手 建立TCP连接后发起http请求 服务器响应htp请求 浏览器解析ht ...

  7. 【面试题】在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)

    整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议.ARP协议和OSPF协议. 发起TCP的三次握手 建立TCP连接后发起HTTP请求 服务器响应HTTP请求 浏览器解析h ...

  8. Nginx处理请求过程

    1. worker进程工作机制  现在我们了解了当我们在操作nginx的时候,nginx内部做的一些事情,那么worker进程又是如何处理请求的呢?   我们前面有提到,worker进程之间是平等的, ...

  9. http一次请求过程

    物理层:支持底层网络协议: 其中网络层支持IP协议: 传输层支持TCP协议,它是面向连接的: 应用层支持 http,ftp  tftp,SMTP,DHCP协议 一个完整的http请求过程: 1.浏览器 ...

随机推荐

  1. linux学习-用户的特殊 shell 与 PAM 模块

    特殊的 shell, /sbin/nologin 『无法登入』指的是:『这个使用者无法使用 bash 或其他 shell 来登入系统』而已, 并不是说这个账号就无法使用其他的系统资源! 让某个具有 / ...

  2. 像玩魔兽一样编程——谈VS2010键盘流

    早年在学校里的时候,经常玩War3,那时候很痴迷,也经常看sky.moon的一些第一视角,有的时候也会模仿模仿...好吧,往事不堪回首,现在工作了,谈一谈.Net程序猿使用VS的键盘流,如果你不知道s ...

  3. day06 面向对象编程

    面向对象: 面向对象: 世界万物,皆可分类 世界万物,皆为对象   只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性         特性: 多态: 一个统一的接口,多种实现  例如:  一个 ...

  4. day37-- &MySQL step1

    m1.客户端与数据库服务器端是通过socket来交互数据,对数据库的理解:数据库就是一个文件夹,表就类比文件.m2.常用语句#查看数据库show databases:#创建数据库create data ...

  5. Linux inode 之我见

    Linux硬盘组织方式为:引导区.超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block).其中超级块中包含了关于该硬盘或分区上的 ...

  6. 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] C】Greedy Arkady

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举那个人收到了几次糖i. 最好的情况显然是其他人都只收到i-1次糖. 然后这个人刚好多收了一次糖 也即 (i-1)kx + x & ...

  7. js时间格式化工具,时间戳格式化,字符串转时间戳

    在开发中经常会用到时间格式化,有时候在网上搜索一大堆但不是自己想要的,自己总结一下,写一个时间格式化工具方便以后直接使用,欢迎大家来吐槽…… 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  8. [java开发篇][dom4j模块] 遍历xml文件

    http://blog.csdn.net/chenleixing/article/details/44353491 在android studio 导入dom4j库(build-gradle(Moud ...

  9. AtCoder Regular Contest 091

    数学场,做到怀疑人生系列 C - Flip,Flip, and Flip...... Time limit : 2sec / Memory limit : 256MB Score : 300 poin ...

  10. 实现chrome多用户独立cookie

    2018-02-08 10:58:57 在浏览器设置中添加一个用户并创建桌面快捷方式,属性中我们可以发现 "C:\Program Files (x86)\Google\Chrome\Appl ...