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协议的主要内容,如果未能解决你的问题,请参考以下文章

怎么用http协议实现安卓数据

CPNtools协议建模安全分析---实例变迁标记

HTTP客户端代码片段

高效Web开发的10个jQuery代码片段

如何从一个片段导航到另一个片段?

这两个代码片段有啥区别?