浅谈HTTP协议

Posted 诚实善良小郎君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈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协议的主要内容,如果未能解决你的问题,请参考以下文章

浅谈HTTP协议

浅谈http协议(如何TCP实现HTTP)

浅谈http协议

浅谈HTTP协议

浅谈HTTP协议(上)

浅谈HTTP协议