知识内容:

1.网络协议复习

2.模拟web

3.web本质总结

参考:

http://www.cnblogs.com/wupeiqi/articles/5237672.html

http://www.cnblogs.com/haiyan123/p/7695133.html

http://www.cnblogs.com/wyb666/p/9014857.html

一、网络协议复习

1.HTTP协议

(1)HTTP特点

 HTTP协议属于应用层,并工作于客户端-服务端架构上

 HTTP协议是用于从服务器传输超文本到本地浏览器的传送协议

 HTTP是一个基于TCP/IP通信协议来传递数据的协议

 浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应

 简单快速:客户向服务器请求服务时,只需传送请求方法和路径;由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度快

 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记

 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间

 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

HTTP协议流程如下图:

(2)HTTP请求格式

请求首行;        // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1
请求头信息; // 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost
空行; // 用来与请求体分隔开
请求体。 // GET没有请求体,只有POST有请求体。

浏览器发送给服务器的内容就这个格式的,如果不是这个格式服务器将无法解读!在HTTP协议中,请求有很多请求方法,其中最为常用的就是GET和POST

HTTP默认的请求方法就是GET

注意:

  • 没有请求体
  • 数据量有限制!
  • GET请求数据会暴露在浏览器的地址栏中

GET请求常用的操作:
       1. 在浏览器的地址栏中直接给出URL,那么就一定是GET请求
       2. 点击页面上的超链接也一定是GET请求
       3. 提交表单时,表单默认使用GET请求,但可以设置为POST

(3)HTTP响应格式

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

  • 第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
  • 第二部分:消息报头,用来说明客户端要使用的一些附加信息
  • 第三部分:空行,消息报头后面的空行是必须的
  • 第四部分:响应正文,服务器返回给客户端的文本信息。

关于响应状态码:

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求 常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

(4)GET和POST请求的区别

GET请求

GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive 注意最后一行是空行
POST请求 POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley

GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中)

POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据

因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。

而在实际开发中存在的限制主要有:

  • GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。因此对于GET提交时,传输数据就会受到URL长度的 限制
  • POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置

GET和POST的区别:

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

2.TCP协议和UDP协议

(1)TCP

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP的特性:  有序性、真确性、可靠性、可控性,TCP使用面向连接的方式收发数据,在收发数据之前需建立连接,在数据传输之后释放连接,建立连接时采用3次握手的方式来保证发送的可靠性、可控性

在双方成功握手之后将在两个应用程序之间建立一个全双工的通信,这个全双工通信将占用两个计算机之间的通信线路,直到它被一方关闭或双方关闭为止

全双工:双方可以收发消息,接受消息

应用:web浏览器、电子邮件、文件传输

(2)UDP

UDP是一种无连接的传输层协议,提供面向对象的简单的不可靠信息传送服务,虽然UDP不可靠,但是由于UDP的开销小一般UDP适用于吞吐量大(轻量级控制)、可以承受信息丢失(传输不可靠)的应用场景。而且在网络状况良好的情况下,UDP的丢包率在实际情况下也非常少,所以有很多经典的协议采用UDP进行传输,比如SNMP、NFS、DNS等

应用:域名系统(DNS)、视频流

(3)TCP与UDP

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快

二、模拟web

1.WEB应用(网站)
        Http协议:
            发送:
                POST /index HTTP/1.1
                Host: 127.0.0.1:8080
                Connection: keep-alive
                Cache-Control: max-age=0
                Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
                User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36
                HTTPS: 1
                Accept-Encoding: gzip, deflate, sdch
                Accept-Language: zh-CN,zh;q=0.8
                Cookie: csrftoken=hNmu2JOtntGMN0hSRSPmMQk2newEb3o8zb6pXW5Cc3m54IaA5VlTkUvqWsFezpni

p=123
            
            响应:
                200 OK
                Cache-Control:public, max-age=15
                Connection:keep-alive
                Content-Encoding:gzip
                Content-Type:text/html; charset=utf-8
                Date:Wed, 14 Jun 2017 01:21:17 GMT
                Expires:Wed, 14 Jun 2017 01:21:33 GMT
                Last-Modified:Wed, 14 Jun 2017 01:21:03 GMT
                Transfer-Encoding:chunked
                Vary:Accept-Encoding
                X-Frame-Options:SAMEORIGIN
                X-UA-Compatible:IE=10

浏览器解析响应然后用户在页面看到内容(字符串)

2.以博客园为例
        浏览器(socket客户端)
            2. www.cnblogs.com(42.121.252.58,80)
                sk.socket()
                sk.connect((42.121.252.58,80))
                
                sk.send('我想要xx')
            5. 接收
            6. 连接断开
            
            
            
        博客园(socket服务端)
            1. 监听ip和端口(42.121.252.58,80)
                while True:
                    用户 = 等待用户连接
                    3. 收到'我想要xx'
                    4. 响应:“好”
                     用户已断开

3.模拟web

模拟访问网页:运行下列代码,在浏览器中输入http://localhost:8000/并回车将看到Hello, Seven

 import socket

 # 处理请求:
def handle_request(client):
buf = client.recv(1024)
client.send(b"HTTP/1.1 200 OK\r\n\r\n")
client.send(b"Hello, Seven") def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 监听网络
sock.bind(('localhost', 8000))
sock.listen(5) while True:
# 等待连接
connection, address = sock.accept()
handle_request(connection)
connection.close() if __name__ == '__main__':
main()

三、web本质总结

web框架的本质说简单点就是socket服务端与浏览器之间的通信

         1. Http,无状态,短连接

         2. 客户端与服务端
浏览器相当于socket客户端
网站相当于socket服务端 3. 写网站,主要是写3部分:
a. socket服务端
b. 根据URL不同返回不同的内容
路由系统:URL -> 函数
c. 字符串返回给用户
模板引擎渲染:
HTML充当模板(特殊字符)
自己创造任意数据
字符串

web本质的更多相关文章

  1. http协议和web本质

    转载:http://www.cnblogs.com/dinglang/archive/2012/02/11/2346430.html http协议和web本质 当你在浏览器地址栏敲入“http://w ...

  2. http协言和web本质

    http协议和web本质 作为一个开发者,尤其是web开发人员,我想你有必要去了解这一系列的处理流程,在这期间,浏览器和服务器到底是如何打交道的?服务器又是如何处理的?浏览器又是如何将网页显示给用户的 ...

  3. Django之web本质

    Django之web本质 Web的本质,是基于socket玩的. 在我们上网的过程中,一个访问请求是如何工作的. Web的框架: 网络的连接都是基于Socket 在连接中有TCP/UDP 和HTTP协 ...

  4. http协议与web本质

    当你在浏览器地址栏敲入“http://www.csdn.net/”,然后猛按回车,呈现在你面前的,将是csdn的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员,我想 ...

  5. http协议和web本质(转)

    当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员, ...

  6. 【转载】HTTP协议与WEB本质

    当你在浏览器地址栏敲入"http://www.csdn.net/",然后猛按回车,呈现在你面前的,将是csdn的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是 ...

  7. Python练习 | Web本质Socket

    #--------------------------------客户端-------------------------------------- # 导入socket库 import socket ...

  8. web开发的本质

    1.浏览器上输入一个网址回车后都发生了什么? (1)浏览器相当于一个客户端,将域名翻译成ip,浏览器给服务端发送一个消息. (2)服务端拿到消息 (3)服务端返回消息 (4)浏览器展示页面 2.客户端 ...

  9. JavaScript之web通信

    web通信,一个特别大的topic,涉及面也是很广的.因最近学习了 javascript 中一些 web 通信知识,在这里总结下.文中应该会有理解错误或者表述不清晰的地方,还望斧正! 一.前言 1. ...

随机推荐

  1. DBWR进程

    --查询dbwr进程号 select pname,spid from v$process where pname like 'DBW%'; PNAME SPID----- -------------- ...

  2. caffe安装编译问题-ImportError: libopencv_core.so.3.4: cannot open shared object file: No such file or directory

    问题描述 >>> import caffe Traceback (most recent call last): File , in <module> File , in ...

  3. CTF-练习平台-Misc之 想蹭网先接开密码

    十三.想蹭网先接开密码 用wireshark打开,WiFi认证过程重点在WPA的四次握手包,找到EAPOL握手协议,另存为 根据题目提示,写字典 #include<stdio.h>int  ...

  4. linux下普通用户无法使用sudo命令问题

    今天在新装的linux虚拟机中使用sudo命令时,报错如下 We trust you have received the usual lecture from the local System Adm ...

  5. 破解UltraEdit(Ver20.00.0.1040),无限试用

    因为是第一次破解较大型的商业软件,所以有必要记录一下,另外UE的价格也实在太贵了... 第零步:准备 准备好破解常用软件.我常用的工具有IDA(用于静态分析).Ollydbg(动态调试).PEiD(用 ...

  6. word如何让单页变横向

    word作为图文排版用户最多的软件之一,其功能的强大自不必说,比如将某一页在版式排版上设置为横排方向.那么,应该如何才能设置为横排的纸张呢?请阅读下文! 工具/原料 Microsoft Office ...

  7. MQ中间件选型

    如果Java项目,数据量不大,用ActiveMQ,相对简单.支持JMS. 如果对性能.可靠性有一定要求,用RabbitMQ. 如果对性能有很高要求,甚至可牺牲一些可靠性,选kakfa. 在当前大数据时 ...

  8. tomcat源码阅读之session管理器(Manager)

    一.UML图分析: (一) Session: Session保存了一个客户端访问服务器时,服务器专门为这个客户端建立一个session用来保存相关的会话信息,session有一个有效时间,这个时间默认 ...

  9. tomcat源码阅读之容器(Container)

    一. 实现容器的接口是Container接口,Tomcat中共有四种类型的容器: 1.Engine:表示整个Catalina Servlet引擎: 2.Host:表示含有一个或者多个Context容器 ...

  10. 【转】每天一个linux命令(20):find命令之exec

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/14/2769248.html find是我们很常用的一个Linux命令,但是我们一般查找出来的并不 ...