HTTP协议
Posted zjsthunder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。
HTTP协议是:超文本传输协议,该协议规定了浏览器和万维网服务器之间相互通信的规则。
1、客服端发送到服务器的为“请求协议”
2、服务器发送到客服端的为“响应协议”
http协议为无状态协议,
代理服务器功能:
1、提高访问速度,大多数代理服务器都有缓存功能
2、突破限制
3、隐藏那个身份
url格式:
schema://host[:port#]/path/.../[?query-string][#anchor]
scheme 指定底层使用的协议(例如:http, https, ftp)
host HTTP服务器的IP地址或者域名
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path 访问资源的路径
query-string 发送给http服务器的数据
anchor- 锚
http协议定义了很多客服端与服务器交互的协议,基本的有4种,GET,POST,PUT,DELETE,一个url对应一个网络上的资源,而4中交互分别为:查、更新、增、删;
一、请求协议
请求首行; // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1
请求头信息;// 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost
空行; // 用来与请求体分隔开
请求体。 // GET没有请求体,只有POST有请求体。
1、请求
请求有get请求和post请求,http默认请求为get请求。
get请求特点:
1、没有请求体
2、数据在1k范围内
3、数据会暴露在url地址上
4、在浏览器地址栏上输入url为get请求
5、页面上的超链接为get请求,a标签
6、表单提交数据默认为get请求,也可设置为post请求
post请求特点:
1、有请求体
2、数据不会出现在地址栏中
3、数据大小没有限制
二、响应协议
响应首行;
响应头信息;
空行;
响应体
响应头中状态码:
响应首行为状态行:由HTTP协议版本号, 状态码, 状态消息 三部分组成
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
304:表示index.html与浏览器上次缓存的相 同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修 改,服务器会响应200。如果你不想使用本地缓存可以用Ctrl+F5 强制刷新页面
400 Bad Request 客户端请求与语法错误,不能被服务器所理解
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found请求资源不存在(输错了URL)
Django中的request对象
Django会将浏览器发送过来的请求对象,封装为HttpRequest 对象,django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
属性:
1、HttpRequest.scheme 一个字符串,代表请求的方案,一般为 ‘http’ 或 ‘https’。
2、HttpRequest.path 一个字符串,表示请求的路径组件(不含域名)。
3、HttpRequest.path_info
4、HttpRequest.method 一个字符串,表示请求使用的HTTP 方法。必须使用大写。
5、HttpRequest.GET 一个类似于字典的对象,包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。
6、HttpRequest.POST 一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成 QueryDict 对象
7、HttpRequest.encoding 一个字符串,表示提交的数据的编码方式
8、HttpRequest.COOKIES 一个标准的Python 字典,包含所有的cookie。键和值都为字符串。
9、HttpRequest.FILES
一个类似于字典的对象,包含所有的上传文件信息。FILES 中的每个键为<input type="file" name="" /> 中的name,值则为对应的数据。
注意,FILES 只有在请求的方法为POST 且提交的<form> 带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。
10、HttpRequest.session 一个既可读又可写的类似于字典的对象,表示当前的会话。只有当Django 启用会话的支持时才可用。
方法:
1、HttpRequest.get_host()
2、HttpRequest.get_full_path()
3、HttpRequest.build_absolute_uri(location)
4、HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=‘‘, max_age=None)
5、HttpRequest.is_secure() 如果请求时是安全的,则返回True;即请求通是过 HTTPS 发起的。
6、HttpRequest.is_ajax() 如果请求是通过XMLHttpRequest 发起的,则返回True
7、HttpRequest.read(size=None)
像文件一样读取请求报文的内容主体,同样的,还有以下方法可用。
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.xreadlines()
其行为和文件操作中的一样。
HttpRequest.__iter__():说明可以使用 for 的方式迭代文件的每一行。
以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章