浅谈HTTP协议
程序员文章站
2022-06-30 13:39:35
1 HTTP概念 把握三个点: 1 HTTP协议(超文本传输协议) HTTP是一个基于TCP/IP通信协议来传递数据,默认端口80 2 HTTP是无连接(限制每次连接只处理一个请求),无状态的(对于事务处理没有记忆能力) 3 HTTP使用统一资源标识符(Uniform Resource Identi ......
1 HTTP概念
把握三个点: 1 HTTP协议(超文本传输协议) HTTP是一个基于TCP/IP通信协议来传递数据,默认端口80 2 HTTP是无连接(限制每次连接只处理一个请求),无状态的(对于事务处理没有记忆能力) 3 HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
2 HTTP协议结构
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。流程大致 : web Browser -- HTTP Protocol -- HTTP Server -- CGI Program -- Database 客户端 c:request 请求行 request line 请求方法 url 协议版本 请求头 header 头部字段名 : 值 请求主体 例如 GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi 服务端 s:response 状态行 HTTP/1.1 200 OK 协议 状态码 注释 消息报头 Date Content-Type content-Lnegth 响应正文 content 例如: HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain
3 HTTP协议请求方式
PUT 创建资源 从客户端向服务器传送的数据取代指定的文档的内容。 POST 更新资源 post请求有消息体,可以携带大量数据,数据放在消息体中 GET 获取资源 get请求无消息体,只能携带少量数据,数据放在url中 HEAD 获取报头资源 OPTIONS 允许客户端查看服务器的性能。 DELETE 删除指定页面资源 TRACE 回显服务器收到的请求,主要用于测试或诊断 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
4 HTTP响应头信息
Allow 服务器支持的方法 content-encoding 文档编码方法 content-length 内容长度 content-type 文档所属类型 date 当前的时间 location 客户端去哪提取文档 reflesh 浏览器应在多少时间刷新文档 server 服务器名字 set-cookie 设置页面关联的cookie last-modified 文档最后的改动时间 Host 域名 Date 时间 User-Agent 浏览器版本
5 HTTP状态码
5 种类型 1** 信息,服务器收到请求,需要请求者继续执行操作 2** 成功,操作被成功接收并处理 3** 重定向,需要进一步寻找资源 4** 客户端错误,请求包含语法错误或无法完成请求 5** 服务器错误,服务器在处理请求的过程中发生了错误 常见的http状态码 200- 请求成功 301-资源被永久转移到其他URL 404 请求资源页面不在 500 内部服务器错误
6 HTTP对象HttpRequest
HttpRequest代表来自客户端的Http请求 原理:request与response是页面发生请求时,Django内置模块把data数据包装成HttpRequest对象,然后Django加载合适的view方法,将HttpRequest对象作为第一个参数传给view方法,则其返回的结果就是HttpResponse对象. HttpRequest属性列表: path 请求页面的全路径,不包括域名—例如, "/django/student/" method 请求类型,大写表示, GET,POST 等 GET 包含所有HTTP GET参数的Queryset对象,获取通过找到key获取value POST 包含所有HTTP POST参数的Queryset对象,获取通过找到key获取value COOKIES 包含所有cookies的Python字典对象,键值对Keys和values都是字符串 META 包含所有可用HTTP头部信息的字典(端口,主机名,主机头信息等) FILES 包含所有上传文件的Queryset对象,对应 <input type="file" name="" />标签中name属性的值 注意:只有在请求方法是POST,并且在<form>有enctype="multipart/form-data"属性时FILES才拥有 数据。否则,FILES 为空 user 是一个django.contrib.auth.models.User 对象,代表当前登录的用户,需要引入使用 from django.contrib.auth import User 实例化 user = User() session 唯一可读写的属性,代表当前会话的字典对象。只有激活Django中的session支持时该属性才可用 当服务器session存储数据时,可以在request中调用 request.session['key']
7 HTTP对象HttpResponse
HttpResponse代表来自服务端的Http响应 HttpResquest是由Django自动创建,但是HttpResponse则必须由我们自己创建,每个view方法必须返回一个HttpResponse对象 from django.http.response import HttpResponse HttpResponse常见的方法 HttpResponse.has_header(header) 判断响应头是否有给定的名称,返回True or False,不区分大小写 HttpResponse.set_cookie() 通知客户端设置cookie信息,一般存储sessionid+value用于session取值 HttpResponse.delete_cookie 清除cookie信息 HttpResponse.write(content) 写入content至报文中 HttpResponse.flush() 将缓存区的内容写入报文 HttpResponse.tell() 移动文件中的操作指针 HttpResponse 子类 class HttpResponseRedirect 资源重定向 class HttpResponseNotFound 资源未找到 404 class HttpResponseBadRequest 错误请求 400 class HttpResponseForbidden 无权限访问 403 class HttpResponseServerError 服务器错误 500
上一篇: 过了个搞笑的母亲节
下一篇: 使用Map标签指定点击区域时的兼容性问题