zoukankan      html  css  js  c++  java
  • HTTP协议 简介

    HTTP协议

    1.四大特性

    HTTP协议
    	1.四大特性
    		1.基于TCP/IP作用于应用层之上的协议
    		2.基于请求响应
    		3.无状态
    			cookie
    			session
    			token
    		4.无连接
    			keep-alive
    

    2.请求响应数据格式

    		请求首行(请求方式 协议版本)
    		请求头(一堆k:v键值对)  就类似于开路先锋 携带了一些服务端可以提前知道的信息
    		(/r/n)(如果请求头里没有内容 那就是 /r/n/r/n)
    		请求体(发送post请求 携带的数据都会放在请求体中)
    

    3.响应状态码

    下面是常见的HTTP状态码:

    • 200 - 请求成功
    • 301 - 资源(网页等)被永久转移到其它URL
    • 404 - 请求的资源(网页等)不存在
    • 500 - 内部服务器错误

    HTTP状态码分类

    分类 分类描述
    1** 信息,服务器收到请求,需要请求者继续执行操作
    2** 成功,操作被成功接收并处理
    3** 重定向,需要进一步的操作以完成请求
    4** 客户端错误,请求包含语法错误或无法完成请求
    5** 服务器错误,服务器在处理请求的过程中发生了错误

    HTTP协议介绍

    HTTP协议对收发消息的格式要求

    每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。 HTTP响应的Header中有一个 Content-Type表明响应的内容格式。如 text/html表示HTML网页。

    HTTP GET请求的格式:

    HTTP响应的格式:

    HTTP数据格式

    这说明我们发送给浏览器的响应式无效的, Web应用程序想要在网络中完整的传输, 就一定需要遵从一定的通信协议,而在Web端这个应用层协议就是HTTP协议.

    HTTP协议是有属于它自己的传输数据的格式的, HTTP的数据格式包含以下部分:

    • 请求首行 协议版本, 请求方式
    • 请求头 包含多个键值对形式的请求信息
    • 请求体

    服务端的响应格式也与之相对应:

    • 响应首行 协议版本, 状态码
    • 响应头 包含多个键值对形式的响应信息
    • 响应体

    返回正确响应

    了解了HTTP的基本数据格式之后, 只要我们发送合法的响应信息, 就能和浏览器做一个基本的通信了, 然后继续修改上述的代码.

    ...
    # 返回响应头
    response = 'HTTP/1.1 200 OK
    
    '
    # 返回响应体
    response += '<h1>Hello World!!!</h1>'
    ...
    
    HTTP协议
    	四大特性
    		1.基于TCP/IP作用于应用层之上的协议
    		2.基于请求响应
    		3.无状态
    		4.无连接
    			长连接websocket
    	数据格式
    		请求首行(HTTP/1.1 GET/POST)
    		请求头(一大堆的k,v键值对)
    		
    		请求体(post请求携带的数据)
    	
    	响应状态码
    		1XX:服务端已经接受到你的数据 正在处理 你可以继续提交相应数据
    		2XX:请求成功(200 OK)
    		3XX:重定向
    		4XX:请求错误(404请求资源不存在 403请求错误携带的数据不够 不符合相应规定)
    		5XX:服务器内部错误(500)
    	
    请求方式
    	1.get  获取资源
    	2.post 提交数据
    

    5. 应用层

    HTTP协议

    FTP协议

    TCP协议

    	流式协议,可靠协议
    
    	基于TCP协议通道
    
    	TCP协议传输数据之所以可靠,不是在于双通道,而是在于反馈机制,发送消息后必须等到对方回应,才会将内存中的数据清除。
    

    UDP协议
    数据报协议

    	无需建立双向通道    数据传输是不安全
    	将内存中的数据直接发送出去 不会做保留
    	早期的qq
    
    	三次握手四次挥手
    
    			三次握手建立连接
    
    			四次挥手断开连接
    
               ###如何解决TCP的粘包问题
    	基于TCP实现大文件的上传
    	客户端:
    		1.先生成一个字典
    		2.制作字典的报头
    		3.发送字典的报头
    		4.发送字典数据
    		5.发送真实数据
    	服务端
    		1.接收固定长度的报头
    		2.解析获取字典的长度
    		3.接收字典数据
    		4.解析获取真实数据信息
    		5.接收真实数据
    		
    socketserver
    	能够实现并发的效果
    
    并发:看上去像同时运行的
    并行:真正意义上的同时执行
    ps:单核的计算机绝对不可能实现并行 但是可以实现并发
    
    大文件上传
    		服务端
    			1.socket创建TCP服务
    			2.连接循环
    			3.通信循环
    				接受固定长度的字典的报头
    				解析获取字典数据的真实长度
    				接受字典数据 解码 反序列化成字典
    				从字典中获取文件大小 以及文件名等其他信息
    			4.循环接受文件数据
    				文件操作(wb) 接受一行往文件中写入一行
    
    		客户端
    			1.socket客户端代码
    			2.利用os.listdir获取文件夹中所有的文件名
    			3.循环打印 供用户选择想要上传的文件
    				用户选择是否符合要求
    			4.根据用户寻找及os.path.join方法拼接用户想要上传的文件绝对路径
    			5.根据文件路径获取文件大小os.path.getsize()
    			6.定义一个发送给服务端的字典
    				{
    				"file_name":用户选择的文件名,
    				"file_size":文件大小,
    				...额外键值对消息
    				}
    			7.制作字典的报头
    				序列化  编码
    			8.发送字典的报头
    			9.发送字典数据
    			10.发文件
    				文件操作 一行行读取并发送
    
  • 相关阅读:
    并发编程(线程)
    并发编程(进程)
    并发编程(操作系统的介绍)
    模块与包
    网络编程
    Django项目的创建与管理和pycharm与Github的秘密
    python解释器配置和python常用快捷键
    代码的调试.运行
    57. 三数之和
    1347. 尾随零
  • 原文地址:https://www.cnblogs.com/PowerTips/p/11615555.html
Copyright © 2011-2022 走看看