浅谈HTTP协议
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
浅谈HTTP协议的更多相关文章
- 【转】 浅谈Radius协议
浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报 分类: Radius协议分析(6) 从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...
- 转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221
浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报 分类: Radius协议分析(6) 从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...
- 浅谈HTTP协议(下)
下面来讲响应消息.响应消息也分为响应起始行.响应头部.CRLF.响应主体. 响应起始行包括协议版本.响应状态码.原因短句.这里的重点就是响应状态码,它一共分为5类,状态码准确的说是一个三位数. 1xx ...
- 浅谈ARP协议以及应用
0. 前言 本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP. 1. ARP协议原理 ARP,全称Address Resolution Protocol,地址解析协议, ...
- 浅谈HTTP协议(上)
今天讨论一下HTTP协议.一个做前端的,如果连HTTP协议都不了解,那实在是太不合格了. 首先,什么是HTTP?Hyper Text Transfer Protocol(超文本传输协议),用在浏览器和 ...
- 从日常开发说起,浅谈HTTP协议是做什么的。
引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...
- 通过Java代码浅谈HTTP协议
最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...
- 浅谈HTTP协议与TCP协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送议. 主要特点 ...
- 浅谈Http协议是怎么回事?
老实说关于http协议这个概念,见到最多的还是各类招聘信息.在平时的工作中,除了了解一些请求,响应,请求头这些概念外,对于http协议也没有太多的关心.因为貌似对平时的工作没有什么影响,所以在写这篇关 ...
随机推荐
- java web(1)
获取项目的根路径:this.getservletcontext().getRealPath() 下载:不正规做法:test/html!!!! 正规做法:1,在响应头设置:res.addHeader(& ...
- java多线程的理解
java多线程的理解 线程的5种状态:新建,就绪,运行,阻塞,死亡. Thread.sleep:线程 运行状态 转为 阻塞状态,(其它线程启动运行) Thread.yield: 线程 运行 ...
- SpringBoot框架Scheduled注入参数说明
注解 @Scheduled(cron = "0/5 * * * * ?") @Scheduled(fixedDelay = 1000 * 7,initialDelay=1000*1 ...
- git常用笔记整理
Git 什么是Git 初始化 guthub创建sshKey 下载 上传 更新 创建切换分支 删除分支 合并分支 查看命令历史|提交历史 撤回 设置用户名和密码 查看配置信息 强制pull 强制push ...
- html 标签内联元素和块元素分类【转】
常见的块状元素与内联元素 块状元素 内联元素 address - 地址 blockquote - 块引用 center - 居中对齐 dir - 目录列表 div - 常用块级容易,也是CSS lay ...
- msql索引
从网上找了两种解决方案: 最近要给一个表加一个联合唯一索引,但是表中的两个联合健有重复值,导致无法创建: 解决方案一:ignore(会删除重复的记录(重复记录只保留一条,其他的删除),然后建立唯一索引 ...
- 用shell处理以下内容 1、按单词出现频率降序排序! 2、按字母出现频率降序排序! the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support
此题目有多种解法,sed.awk.tr等等,都可以解决此题,命令运用灵活多变. 编写shell脚本no_20.sh 解法1: #!/bin/bash ###-------------CopyRight ...
- linux下c编程 基础
1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理 ...
- Makefile基础---编译
首先写一个自己的库: #include "../MyAPI.h" #include <cstdlib> #include <ctime> int getRa ...
- urllib使用
1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=Fals ...