• web本质


    知识内容:

    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特点

     1 HTTP协议属于应用层,并工作于客户端-服务端架构上
     2 
     3 HTTP协议是用于从服务器传输超文本到本地浏览器的传送协议
     4 
     5 HTTP是一个基于TCP/IP通信协议来传递数据的协议
     6 
     7 浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应
     8 
     9 简单快速:客户向服务器请求服务时,只需传送请求方法和路径;由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度快
    10    
    11 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
    12     
    13 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
    14     
    15 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

    HTTP协议流程如下图:

    (2)HTTP请求格式

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

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

    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

     1 import socket
     2 
     3 
     4 # 处理请求:
     5 def handle_request(client):
     6     buf = client.recv(1024)
     7     client.send(b"HTTP/1.1 200 OK
    
    ")
     8     client.send(b"Hello, Seven")
     9 
    10 
    11 def main():
    12     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13     # 监听网络
    14     sock.bind(('localhost', 8000))
    15     sock.listen(5)
    16 
    17     while True:
    18         # 等待连接
    19         connection, address = sock.accept()
    20         handle_request(connection)
    21         connection.close()
    22 
    23 
    24 if __name__ == '__main__':
    25     main()

    三、web本质总结

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

     1         1. Http,无状态,短连接
     2         
     3         2. 客户端与服务端
     4             浏览器相当于socket客户端
     5             网站相当于socket服务端
     6             
     7         3. 写网站,主要是写3部分:
     8             a. socket服务端
     9             b. 根据URL不同返回不同的内容
    10                 路由系统:URL -> 函数
    11             c. 字符串返回给用户
    12                 模板引擎渲染:
    13                     HTML充当模板(特殊字符)
    14                     自己创造任意数据
    15                 字符串             
  • 相关阅读:
    echarts实现中国地图(部分省份版)
    Head First 设计模式——与设计模式相处
    Head First 设计模式-复合模式
    Head First 设计模式-状态、代理模式
    Head First 设计模式-模板方法、迭代器
    魔幻的一个月~
    Head First 设计模式-命令与适配器模式
    突然想写点什么……
    Head First 设计模式- 工厂与单件模式
    Head First 设计模式——观察者与装饰者模式
  • 原文地址:https://www.cnblogs.com/wyb666/p/9034042.html
Copyright © 2020-2023  润新知