之前有人问我web是什么?懂得的人和不懂得的区别在于你是否看了下面的内容

什么是HTTP协议 
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。 
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。 
HTTP协议永远都是客户端发起请求,服务器回送响应。见下图: 
图1 
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。 
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

2、HTTP协议的请求过程和响应过程 
步骤1:浏览器首先向服务器发送HTTP请求,请求包括: 
方法:GET还是POST,GET仅请求资源,POST会附带用户数据; 
路径:/full/url/path; 
域名:由Host头指定:Host: www.sina.com 
以及其他相关的Header; 
如果是POST,那么请求还包括一个Body,包含用户数据 
步骤2:服务器向浏览器返回HTTP响应,响应包括: 
响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生错 误; 
响应类型:由Content-Type指定; 
以及其他相关的Header; 
通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。 
步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。 
Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在 HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个 HTTP请求,因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接只获取一个资源,如需要多个就需要建立多个链接)

3、请求行的格式 
图片2 
图片3 
每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。 
HTTP协议是一种文本协议,所以,它的格式也非常简单。 
HTTP GET请求的格式:

 GET /path HTTP/1.1
    Header1: Value1
    Header2: Value2
    Header3: Value3
  • 1
  • 2
  • 3
  • 4

每个Header一行一个,换行符是\r\n。 
HTTP POST请求的格式:

 POST /path HTTP/1.1
    Header1: Value1
    Header2: Value2
    Header3: Value3

    body data goes here...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

请再次注意,Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。 
当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

4、请求行包含哪几部分 
求方法字段、URL字段和HTTP协议版本 
例如:GET /index.html HTTP/1.1 
get方法将数据拼接在url后面,传递参数受限 
请求方法,空格,URL,空格,协议版本,回车符,换行符(看图2)

5、常用的请求头有哪些,表示什么意思 
User-Agent:产生请求的浏览器类型。客户机通过这个头告诉服务器,客户机的软件环境。 
Accept:客户端可识别的内容类型列表。告诉服务器,客户端支持的数据类型 
Host:主机地址,客户机通过这个头告诉服务器,想访问的主机名。 
Accept-Charset:告诉服务器,客户端采用的编码。 
Accept-Encoding:告诉服务器,客户机支持的数据压缩格式。 
Accept-Language:告诉服务器,客户机的语言环境。

If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。 
Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链) 
Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。

6、响应行的格式 
HTTP响应的格式:

 200 OK
    Header1: Value1
    Header2: Value2
    Header3: Value3

    body data goes here...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。

7、响应行包含哪几部分 
消息报头、状态行、响应正文(参考图3)(响应头,响应行,响应体)

8、常用的响应码有哪些,表示什么意思 
1xx:指示信息–表示请求已接收,继续处理 
2xx:成功–表示请求已被成功接收、理解、接受 
3xx:重定向–要完成请求必须进行更进一步的操作 
4xx:客户端错误–请求有语法错误或请求无法实现 
5xx:服务器端错误–服务器未能实现合法的请求

9、什么是WSGI协议 
WSGI是一种规范,规范了服务端和框架,进行相互配合。 
Python Web Server Gateway Interface (或简称 WSGI,读作“wizgy”) 
WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的接口规范

在WSGI规范下,web组件被分成三类:client, server, and middleware. 
WSGI apps(服从该规范的应用)能够被连接起来处理一个request,这也就引发了中间件这个概念,中间件同时实现c端和s端的接口,c看它是上游s,s看它是下游的c。 
WSGI的s端所做的工作仅仅是接收请求,传给application(做处理),然后将结果response给middleware或client.除此以外的工作都交给中间件或者application来做。

10、WSGI协议的接口规范是什么,参数表示什么意思 
这个接口就是WSGI:Web Server Gateway Interface。 
WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。我们来看一个最简单的Web版本的“Hello, web!”:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, web!</h1>']
  • 1
  • 、什么是HTTP协议 
    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。 
    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 
    HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。 
    HTTP协议永远都是客户端发起请求,服务器回送响应。见下图: 
    图1 
    这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。 
    HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

    2、HTTP协议的请求过程和响应过程 
    步骤1:浏览器首先向服务器发送HTTP请求,请求包括: 
    方法:GET还是POST,GET仅请求资源,POST会附带用户数据; 
    路径:/full/url/path; 
    域名:由Host头指定:Host: www.sina.com 
    以及其他相关的Header; 
    如果是POST,那么请求还包括一个Body,包含用户数据 
    步骤2:服务器向浏览器返回HTTP响应,响应包括: 
    响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生错 误; 
    响应类型:由Content-Type指定; 
    以及其他相关的Header; 
    通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。 
    步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。 
    Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在 HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个 HTTP请求,因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接只获取一个资源,如需要多个就需要建立多个链接)

    3、请求行的格式 
    图片2 
    图片3 
    每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。 
    HTTP协议是一种文本协议,所以,它的格式也非常简单。 
    HTTP GET请求的格式:

     GET /path HTTP/1.1
        Header1: Value1
        Header2: Value2
        Header3: Value3
  • 1
  • 2
  • 3
  • 4
  • 每个Header一行一个,换行符是\r\n。 
    HTTP POST请求的格式:

     POST /path HTTP/1.1
        Header1: Value1
        Header2: Value2
        Header3: Value3
    
        body data goes here...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

    请再次注意,Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。 
    当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

    4、请求行包含哪几部分 
    求方法字段、URL字段和HTTP协议版本 
    例如:GET /index.html HTTP/1.1 
    get方法将数据拼接在url后面,传递参数受限 
    请求方法,空格,URL,空格,协议版本,回车符,换行符(看图2)

    5、常用的请求头有哪些,表示什么意思 
    User-Agent:产生请求的浏览器类型。客户机通过这个头告诉服务器,客户机的软件环境。 
    Accept:客户端可识别的内容类型列表。告诉服务器,客户端支持的数据类型 
    Host:主机地址,客户机通过这个头告诉服务器,想访问的主机名。 
    Accept-Charset:告诉服务器,客户端采用的编码。 
    Accept-Encoding:告诉服务器,客户机支持的数据压缩格式。 
    Accept-Language:告诉服务器,客户机的语言环境。

    If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。 
    Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链) 
    Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。

    6、响应行的格式 
    HTTP响应的格式:

     200 OK
        Header1: Value1
        Header2: Value2
        Header3: Value3
    
        body data goes here...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。

    7、响应行包含哪几部分 
    消息报头、状态行、响应正文(参考图3)(响应头,响应行,响应体)

    8、常用的响应码有哪些,表示什么意思 
    1xx:指示信息–表示请求已接收,继续处理 
    2xx:成功–表示请求已被成功接收、理解、接受 
    3xx:重定向–要完成请求必须进行更进一步的操作 
    4xx:客户端错误–请求有语法错误或请求无法实现 
    5xx:服务器端错误–服务器未能实现合法的请求

    9、什么是WSGI协议 
    WSGI是一种规范,规范了服务端和框架,进行相互配合。 
    Python Web Server Gateway Interface (或简称 WSGI,读作“wizgy”) 
    WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的接口规范

    在WSGI规范下,web组件被分成三类:client, server, and middleware. 
    WSGI apps(服从该规范的应用)能够被连接起来处理一个request,这也就引发了中间件这个概念,中间件同时实现c端和s端的接口,c看它是上游s,s看它是下游的c。 
    WSGI的s端所做的工作仅仅是接收请求,传给application(做处理),然后将结果response给middleware或client.除此以外的工作都交给中间件或者application来做。

    10、WSGI协议的接口规范是什么,参数表示什么意思 
    这个接口就是WSGI:Web Server Gateway Interface。 
    WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。我们来看一个最简单的Web版本的“Hello, web!”:

    def application(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [b'<h1>Hello, web!</h1>']
  • 1
  • 2
  • 3
  • 上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数: 
    1.environ:一个包含所有HTTP请求信息的dict对象; 
    2.start_response:一个发送HTTP响应的函数。 
    在application()函数中,调用:

    start_response('200 OK', [('Content-Type', 'text/html')])
  • 1
  • 就发送了HTTP响应的Header,注意Header只能发送一次,也就是只能调用一次start_response()函数。start_response()函数接收两个参数,一个是HTTP响应码,一个是一组list表示的HTTP Header,每个Header用一个包含两个str的tuple表示。 
    图片4

    3

上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数: 
1.environ:一个包含所有HTTP请求信息的dict对象; 
2.start_response:一个发送HTTP响应的函数。 
在application()函数中,调用:

start_response('200 OK', [('Content-Type', 'text/html')])
  • 1


图片4

有需要的联系我yxxy 1717     qq     2317384986

猜你喜欢

转载自blog.csdn.net/qq_42851004/article/details/81943602
今日推荐