2018-08-28 09:24:08 qq_36381855 阅读数 621
  • python全栈习题课

    【程序员工具基础】图灵系统使用,Linux初步,DevOps 【Python基础语法】函数,OOP编程,调试技术 【Python高级语法】函数式编程,多线程,携程异步,IO编程,正则 【Web 编程基础 】Socket编程,WSGI,HTTP协议实战框架项目 【主流数据库】关系型非关系性三大主流数据库,不多说 【WEB实战开发框架】Flask,Django,twisted,tornado 【自动化测试】测试工程,测试脚本,自动化测试框架 【自动化运维】自动化部署工具,服务自动化搭建 【爬虫与反爬虫】ssl,js加密,ajax处理,模拟器selemium,验证码识别,Scrapy框架使用 【计算机数学基础】线性代数,微积分,统计概率,Python数学模块 【数据分析·处理】数据清洗,NLP,回归,贝叶斯,灰度预测,聚类,数据分析实战项目 【人工智能(AI)】回归,正则,决策树,贝叶斯,SVM,聚类,关联规则,神经网络,深度学习,手写字识别,猫狗分类,情感分析,推荐系统,目标检测,机器翻译

    393 人正在学习 去看看 刘英

前言

  • 关于计算机网络,HTTP网络通信协议在任何的开发工作中都非常重要
  • 今天,我将献上一份HTTP的学习指南,希望你们会喜欢

目录

示意图


1. 储备知识

讲解HTPP协议前,先了解一些基础的计算机网络相关知识

1.1 计算机网络体系结构

  • 定义 
    计算机网络的各层 + 其协议的集合

  • 作用 
    定义该计算机网络的所能完成的功能

  • 结构介绍 
    计算机网络体系结构分为3种:OSI体系结构、TCP / IP体系结构、五层体系结构

    • OSI体系结构:概念清楚 & 理念完整,但复杂 & 不实用
    • TCP / IP体系结构:含了一系列构成互联网基础的网络协议,是Internet的核心协议 & 被广泛应用于局域网 和 广域网
    • 五层体系结构:融合了OSI 与 TCP / IP的体系结构,目的是为了学习 & 讲解计算机原理

示意图

  • TCP / IP的体系结构详细介绍 
    由于 TCP / IP体系结构较为广泛,故主要讲解 
    示意图

1.2 HTTP 协议通信的基础模型

  • HTTP协议传输信息的基础:TCP/IP协议模型 
    示意图

  • HTTP协议 属于 最高层的应用层


2. 简介

下面,将简单介绍一下 HTTP

示意图


3. 工作方式

  • HTTP协议采用 请求 / 响应 的工作方式
  • 具体工作流程如下:

示意图


4. HTTP报文详解

  • HTTP在 应用层 交互数据的方式 = 报文
  • HTTP的报文分为:请求报文 & 响应报文 
    分别用于 发送请求 & 响应请求时
  • 下面,将详细介绍这2种报文

4.1 请求报文

4.1.1 报文结构

  • HTTP的请求报文由 请求行、请求头 & 请求体 组成,如下图

示意图

  • 下面,将详细介绍每个组成部分

4.1.2 结构详细介绍

组成1:请求行

  • 作用 
    声明 请求方法 、主机域名、资源路径 & 协议版本

  • 结构 
    请求行的组成 = 请求方法 + 请求路径 + 协议版本

    注:空格不能省

请求行的组成

  • 组成介绍

示意图

此处特意说明GET、PSOT方法的区别:

示意图

则 请求行是:GET /chn/yxsz/index.htm HTTP/1.1

组成2:请求头

  • 作用:声明 客户端、服务器 / 报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
  • 常用请求头 
    1. 请求和响应报文的通用Header

请求和响应报文的通用Header

2. 常见请求Header

常见请求Header

组成3:请求体

  • 作用:存放 需发送给服务器的数据信息

    可选部分,如 GET请求就无请求数据

  • 使用方式:共3种

示意图

至此,关于请求报文的请求行、请求头、请求体 均讲解完毕。

4.1.3 总结

  • 关于 请求报文的总结如下

示意图

  • 请求报文示例

示意图

4.2 HTTP响应报文

4.2.1 报文结构

  • HTTP的响应报文包括:状态行、响应头 & 响应体

示意图

  • 其中,响应头、响应体 与请求报文的请求头、请求体类似
  • 这2种报文最大的不同在于 状态行 & 请求行

下面,将详细介绍每个组成部分

4.2.2 结构详细介绍

组成1:状态行

  • 作用 
    声明 协议版本,状态码,状态码描述
  • 组成 
    状态行有协议版本、状态码 &状态信息组成 

    其中,空格不能省


状态行组成

  • 具体介绍 
    示意图

  • 状态行 示例 
    HTTP/1.1 202 Accepted(接受)、HTTP/1.1 404 Not Found(找不到)

组成2:响应头

  • 作用:声明客户端、服务器 / 报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
  • 常用请求头 
    1. 请求和响应报文的通用Header

请求和响应报文的通用Header

2. 常见响应Header

常见响应Header

组成3:响应体

  • 作用:存放需返回给客户端的数据信息
  • 使用方式:和请求体是一致的,同样分为:任意类型的数据交换格式、键值对形式和分部分形式

示意图

4.2.3 响应报文 总结

示意图

4.3 总结

下面,简单总结两种报文结构 
示意图


5. 额外知识

下面将讲解一些关于HTTP的额外知识:

  • HTTP1.1 与 HTTP1.0 的区别
  • HTTP 与 HTTPS的区别
  • HTTP 处理长连接的方式

5.1 HTTP1.1 与 HTTP1.0的区别

Http1.1 比 Http1.0 多了以下优点:

 


  • 引入持久连接,即 在同一个TCP的连接中可传送多个HTTP请求 & 响应
  • 多个请求 & 响应可同时进行、可重叠
  • 引入更加多的请求头 & 响应头 

 

如 与身份认证、状态管理 & Cache缓存等机制相关的、HTTP1.0host字段

5.2 HTTP 与HTTPS的区别

示意图

5.3 HTTP处理长连接的方式

示意图

2016-10-04 16:49:07 github_36305226 阅读数 1030
  • python全栈习题课

    【程序员工具基础】图灵系统使用,Linux初步,DevOps 【Python基础语法】函数,OOP编程,调试技术 【Python高级语法】函数式编程,多线程,携程异步,IO编程,正则 【Web 编程基础 】Socket编程,WSGI,HTTP协议实战框架项目 【主流数据库】关系型非关系性三大主流数据库,不多说 【WEB实战开发框架】Flask,Django,twisted,tornado 【自动化测试】测试工程,测试脚本,自动化测试框架 【自动化运维】自动化部署工具,服务自动化搭建 【爬虫与反爬虫】ssl,js加密,ajax处理,模拟器selemium,验证码识别,Scrapy框架使用 【计算机数学基础】线性代数,微积分,统计概率,Python数学模块 【数据分析·处理】数据清洗,NLP,回归,贝叶斯,灰度预测,聚类,数据分析实战项目 【人工智能(AI)】回归,正则,决策树,贝叶斯,SVM,聚类,关联规则,神经网络,深度学习,手写字识别,猫狗分类,情感分析,推荐系统,目标检测,机器翻译

    393 人正在学习 去看看 刘英

计算机网络笔记

网络层

网络层向上提供无连接的,尽最大努力交付的数据报服务

网络层不提供数据质量承诺

物理层使用的中间设备叫转发器repeater

数据链路层叫网桥bridge

网络层叫路由器router

网络层以上叫网关gateway

互联网由多种异构网络互联而成?

分类的ip地址

 

  配套使用的协议:

ARP:地址解析协议

RARP:逆向地址解析协议

ICMP:网络控制报文协议

IGMP:国际组管理协议

   ip地址被分为若干固定类 分别有ip地址 =  [网络号,主机号]

  ABC类都是单播地址,一对一通信

  A类地址 8位是网络号(第一位一定是0),24位主机号

所以,我们看到,AIp地址的范围是1.0.0.1—— 126.255.255.254(为什么是126?不是127?因为后七位不能全为1,作为保留地址)

B类IP地址16位网络号,16位主机号(一二位必须是10)

所以,B类地址的范围是128.0.0.1-191.255.255.254

C类ip地址24位网络号,8位主机号,前面以110开头。所以c类的范围是192.0.0.1-223.255.255.254

 

D类ip地址。1110开头,是多播地址 192.0.0.1-223.255.255.254

 

E类 以1111开头,作为保留地址

 

特殊的:0.0.0.0当前主机所在的网络地址 255.255.255.255当前子网

 

最大主机号数目的算法:2^(主机号位数) -2

比如A类那就是2^(24) – 2

 

IP地址在分配的时候只分配网络号,剩下的主机号由得到该网络的单位自由分配

 

IP地址与硬件地址的区别

从层次上看:硬件地址是数据链路层和物理层使用的地址

ip地址是网络层及以上各层使用的地址,是逻辑地址

                                                       |首部|应用层数据              |

                                     |ip地址| tcp报文                                         |

||首部(硬件地址|                 ip报文                                          ||

                                  ⬅️mac帧

 

注意:硬件地址,物理地址和MAC地址是同一个东西

划分子网

第一步,从 IP 中找到所属的网,好比是去找个人是哪个小区的;
第二布,再从 IP 中找到主机在个网中的位置,好比是在小区里面找到个人。

第一步中的网,就称之「子网」(Subnet)。
逻辑上来,一般同一子网(Subnet)是使用相同的网关。就好比,一个小区的入口。
IPv4 IP地址是 32位的,形式如http://xxx.xxx.xxx.xxx,每一个 xxx都是 0 - 255
到底是前三个 xxx 相同,就代表同一个子网,是前两个,是其他?个并不一定。
就好比小区有大有小,有的小区有上千人家,有的小区只有区区几个。
所以,就引入「子网掩」(SubnetMask)来标识该子网的大小

 

关于ip地址的理解:首先,于整个互网,ip地址不是唯一的。好比中国广州市/三  和中国广州/市三。他用的是同的ip地址,但是他并不是相同的人。而且他所在的地区也不同。子网掩里就是相对而言作为一个断句 而存在的东西。告诉你,哪个是地区,哪个是人名。所以108.223.255.124/24108.223.255.124/25是完全不一的两个人。然他用了同ip地址。

ip地址==网络号:子网号:主机号                                                        

什么是默认的子网掩码?

如果一个ip网络号不划分子网的话,那就使用默认的子网掩码。也就是说,子网就是它自己

A类:255.0.0.0

B类:255.255.0.0

C类:255.255.255.0

其实就是和他的网络号位数对应。因为那些是不可以改变的

 

采用子网掩码的是ip地址如何寻址的

采用三级寻址

1.        先去网络号(看你是哪一类的ip地址,子网掩码就能找到网络号)

2.        找到子网号:这时候就要用到子网掩码。看到你的子网号,看你到底是广州的还是广州市

3.        主机号:看你用的是哪一台主机了。

 

应用层协议

UDP协议(用户数据报协议)

无连接,尽最大努力,面向报文

TCP协议(传输控制协议)

提供可靠的交付服务

面向连接的传输层协议

提供全双工通信

点对点,每个连接都有两个端点: 嵌套字socket==ip地址加上端口号

                                   

面向字节流

 

 

 

 

应用层

1.       经典问题。从输入URL到页面加载完成到底发生了什么

1.       拿到URL后开始域名解析

2.  DNS查找 浏览操作系统缓路由器

  3.开始http请求

  GET http://facebook.com/ HTTP/1.1

Accept: application/x-ms-application, image/jpeg,application/xaml+xml,[...]

 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; WindowsNT 6.1; WOW64;[...]

  Accept-Encoding: gzip, deflate

 Connection: Keep-Alive

 Host: facebook.com

 Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]

 

4 .永久重定向(原因在下面)

5.浏览器跟踪重定向

6.服务器处理请求

7.服务器返回响应

8.浏览器表现页面(显示html)

9.浏览器获取嵌套在html里面的资源包括图片js css

浏览器解析HTML遇到需要下的文件,便再次向服器(CDN取文件的求。
  注意:
1. 动态页面无法缓存,静态文件允许浏览器进行缓存。
2. 文件本地有直接从本地
3. 请求响应头内包含着静态文件保存的期限,浏览器知道下载的静态文件要静默保留多久。
4. 应头还会有静文件的ETag(相当于版本号),当浏览发现请求的静文件的响应头ETag有的存文件不符,便会再次向服取静文件。

10.浏览器发送Ajax请求

http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/      //原文

http://www.jianshu.com/p/20871477edc2                  //翻

DNS是干嘛的

DNS是域名解析系统

DNS只是将Domain Name转换成IP Address,然后再使用所查到的IP Address去连接(俗称“正向解析”)。事实上,将IP Address转换成Domain Name的功能也是相当常使用到的,当login到一台Unix工作站时,工作站就会去做反查,找出你是从哪个地方连线进来的(俗称“逆向解析”)。

寻找Internet域名并将它转换为IP地址

 

为什么要永久重定向,而不是直接返回用户需要的内容?

为什么要重定向,而不直接返回用户想看的内容呢?(既然服务器已经经过重定向知道了用户需要什么)

  答:原因之一:与搜索引擎排名有关。你看,如果一个页面有两个地址,就像http://www.igoro.com/http://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。

域名是怎样定义的

mail.cctv.com 其中mail是三级域名,cctv是二级,com是顶级

请记住,域名是按照机构划分的,和子网毛关系都没有

 

URL(统一资源定位符)是怎样定义的

协议://主机:端口/路径  (端口默认是80)

协议://服务器/资源 (和上面一样,叫法不同而已)

 

HTTP协议

面向事务的协议,规定了浏览器如何向万维网请求文档以及服务器如何发送文档给客户端

每个万维网都有一个监听tcp的80窗口,判断是否有浏览器发出连接请求。收到之后就会建立tcp连接,到最后断开

TCP面向连接的。http是面向连接的,而且,http协议是无状态的

http的流水线:不收到前一个响应也能发出下一个请求

http非流水线:收到前一个响应才能发出下一个请求

 

cookie存在的意义

因为http是无状态的协议。但是为了能够记住用户。所以在cookie

之中加入了客户的唯一识别码。服务器也知道cookie位123455的用户什么时候来,什么时候访问了什么

 

——————完————————-


 

 

http进阶(http权威指南)

http事务的构成

由一条http请求和一条http响应构成

 

http报文以及报文的构成

报文是http应用程序之间发送的数据块

起始行报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。

首部字段起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。

主体空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。

GET /tools.html HTTP/1.0首部

User-agent: Mozilla/4.75 [en] (Win98; U)

Host: www.joes-hardware.com

Accept: text/html, image/gif, image/jpeg     请求头

Accept-language: en

响应报文

HTTP/1.0 200 OK

Date: Sun, o1 Oct 2000 23:25:17 GMT

Server: Apache/1.3.11 BSafe-SSL/1.38 (Unix)

Last-modified: Tue, 04 Jul 2000 09:46:21 GMT

Content-length: 403

Content-type: text/html

 

响应主体

<P>Joe’s Hardware Online has the largestselection of hammers on the earth.</P>

<H2><ANAME=drills></A>Drills</H2>

<P>Joe’s Hardware has a complete line ofcordless and corded drills, as well as the latest in plutonium-powered atomicdrills, for those big around the house jobs.</P>...

</BODY>

 

http方法有哪些

get:请求资源

head:只返回首部。也就是试探,看一下你有没有

put:请求创建一个文件,有的话则覆盖掉

post:提交数据

trace:看原始的http请求变成什么样了

option

delete 删除某个url资源

 

状态码

100 continue

101 转换协议中

200--299 成功状态码

 200 ok

201 created 常用于put方法,请求已经创建

202 Accept 请求已经被接受

300-399

重定向状态码

301 永久重定向

302 临时重定向

400-499

400 语法错误

401验证

403 禁止

404找不到

409 confilct

414 url太长了

410 gone 老子曾经拥有过

500-599

500 自己错误

501 老子办不到

502 bad gateway

503 我崩了

505 您的协议我没有

2020-02-04 10:54:34 trytrylmt 阅读数 26
  • python全栈习题课

    【程序员工具基础】图灵系统使用,Linux初步,DevOps 【Python基础语法】函数,OOP编程,调试技术 【Python高级语法】函数式编程,多线程,携程异步,IO编程,正则 【Web 编程基础 】Socket编程,WSGI,HTTP协议实战框架项目 【主流数据库】关系型非关系性三大主流数据库,不多说 【WEB实战开发框架】Flask,Django,twisted,tornado 【自动化测试】测试工程,测试脚本,自动化测试框架 【自动化运维】自动化部署工具,服务自动化搭建 【爬虫与反爬虫】ssl,js加密,ajax处理,模拟器selemium,验证码识别,Scrapy框架使用 【计算机数学基础】线性代数,微积分,统计概率,Python数学模块 【数据分析·处理】数据清洗,NLP,回归,贝叶斯,灰度预测,聚类,数据分析实战项目 【人工智能(AI)】回归,正则,决策树,贝叶斯,SVM,聚类,关联规则,神经网络,深度学习,手写字识别,猫狗分类,情感分析,推荐系统,目标检测,机器翻译

    393 人正在学习 去看看 刘英

一、基础概念

URI

URI包含URL和URN

请求和响应报文

1.请求报文

2.响应报文

二、HTTP方法

客户端发送的 请求报文 第一行为请求行,包含了方法字段

GET

获取资源    在当前网络请求中、绝大部分使用的是GET方法。

获取报文首部      和 GET 方法类似,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。

POST

传输实体主体   POST 主要用来传输数据,而 GET 主要用来获取资源。

PUT

上传文件     由于自身不带验证机制,任何人都可以上传文件,存在安全问题,一般使用该方法

PATCH

对资源进行部分修改    PUT也可以用与修改资源,但是只能完全替代资源。

DELETE

删除文件    与PUT功能相反,并且不带验证机制。

OPTIONS

查询支持的方法    查询指定的 URL 能够支持的方法。会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容

CONNECT

要求在与代理服务器通信时建立隧道     使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

TRACE

追踪路径      服务器会将通信路径返回给客户端。

 

三、HTTP状态码

服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。

状态码 类别 含义
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

1XX信息

100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

 

2XX成功

200 OK

204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。

 

3XX重定向

301 Moved Permanently :永久性重定向

302 Found :临时性重定向

303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

  • 注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。

304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。

307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

 

4XX 客户端错误

400 Bad Request :请求报文中存在语法错误。

401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。

403 Forbidden :请求被拒绝。

404 Not Found

 

5XX服务器错误

500 Internal Server Error :服务器正在执行请求时发生错误。

503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

 

四、HHTP首部

有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。

 

 

 

 

 

 

 

 

 

 

2018-06-13 16:18:00 zhangxiafll 阅读数 652
  • python全栈习题课

    【程序员工具基础】图灵系统使用,Linux初步,DevOps 【Python基础语法】函数,OOP编程,调试技术 【Python高级语法】函数式编程,多线程,携程异步,IO编程,正则 【Web 编程基础 】Socket编程,WSGI,HTTP协议实战框架项目 【主流数据库】关系型非关系性三大主流数据库,不多说 【WEB实战开发框架】Flask,Django,twisted,tornado 【自动化测试】测试工程,测试脚本,自动化测试框架 【自动化运维】自动化部署工具,服务自动化搭建 【爬虫与反爬虫】ssl,js加密,ajax处理,模拟器selemium,验证码识别,Scrapy框架使用 【计算机数学基础】线性代数,微积分,统计概率,Python数学模块 【数据分析·处理】数据清洗,NLP,回归,贝叶斯,灰度预测,聚类,数据分析实战项目 【人工智能(AI)】回归,正则,决策树,贝叶斯,SVM,聚类,关联规则,神经网络,深度学习,手写字识别,猫狗分类,情感分析,推荐系统,目标检测,机器翻译

    393 人正在学习 去看看 刘英

《计算机网络》HTTP协议

万维网工作过程

 

具体过程描述:

(1)鼠标点击链接后,客户端分析链接指向页面的URL

(2)客户端向DNS请求解析www.tsinghua.edu.cn的IP地址

(3)域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100

(4)客户端与服务器建立TCP连接(在服务器端的端口号为80)

(5)客户端发出取文件命令:GET /chn/..

(6) 服务器www.tsinghua.edu.cn给出响应,把文件index.htm发送给客户端

(7)释放TCP连接

(8)浏览器上显示清华大学院系设置文件index.htm中的所有文本

HTTP工作流程

 

一次完整的HTTP请求事务包含以下四个环节:

  • 建立起客户机和服务器连接。

  • 建立连接后,客户机发送一个请求给服务器。

  • 服务器收到请求给予响应信息。

  • 客户端浏览器将返回的内容解析并呈现,断开连接。

HTTP协议结构

请求报文

对于请求报文,主要包含三部分,报文首部,空行(CR+LF),报文主体。如下图所示:

 

  //GET例子
  GET /56.jpg HTTP/1.1                      //请求行
  Host    www.4399.com                      //主机的域名,完整的请求URI为www.4399.com/56.jpg
  User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/51.0.2704.106 Safari/537.36
  Accept    image/webp,image/*,*/*;q=0.8
  Referer    http://www.imooc.com/
  Accept-Encoding    gzip, deflate, sdch
  Accept-Language    zh-CN,zh;q=0.8        //各种首部字段
                                           //空行(CR+LF)//GET例子
  GET /56.jpg HTTP/1.1                      //请求行
  Host    www.4399.com                      //主机的域名,完整的请求URI为www.4399.com/56.jpg
  User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/51.0.2704.106 Safari/537.36
  Accept    image/webp,image/*,*/*;q=0.8
  Referer    http://www.imooc.com/
  Accept-Encoding    gzip, deflate, sdch
  Accept-Language    zh-CN,zh;q=0.8        //各种首部字段
                                           //空行(CR+LF)
  • 请求行

    包含用于请求的方法,请求URI和HTTP版本

    结构:method URI version

    • method

      HTTP的请求方法,一共有9种,但GET和POST占了99%以上的使用频次。

      GET方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回相应内容。

      POST通常用于向指定资源提交数据进行处理,提交的数据被包含在请求体中,相对而言比较安全些。

    • URI

      统一资源标识符,用字符串标识某一互联网资源。(附二,介绍URL和URI区别)

    • version

      HTTP协议的版本,该字段有HTTP/1.0和HTTP/1.1两种。

  • 各种首部字段

    在HTTP/1.1中,请求头除了Host都是可选的。包含的头五花八门,这里只介绍部分。

    • Host:指定请求资源的主机(资源主机的域名)和端口号。端口号默认80。

    • Connection:值为keep-alive和close。keep-alive使客户端到服务器的连接持续有效,不需要每次重连,此功能为HTTP/1.1预设功能。close即服务器发送完请求的文档后就可释放连接。

    • Accept:浏览器可接收的MIME类型。假设为text/html表示接收服务器回发的数据类型为text/html,如果服务器无法返回这种类型,返回406错误。

    • Cache-control:缓存控制,Public内容可以被任何缓存所缓存,Private内容只能被缓存到私有缓存,non-cache指所有内容都不会被缓存。

    • Cookie:将存储在本地的Cookie值发送给服务器,实现无状态的HTTP协议的会话跟踪。

    • Content-Length:请求消息正文长度。

    另有User-Agent、Accept-Encoding、Accept-Language、Accept-Charset、Content-Type等请求头这里不一一罗列。由此可见,请求报文是告知服务器请求的内容,而请求头是为了提供服务器一些关于客户机浏览器的基本信息,包括编码、是否缓存等。

  • 空行(一行)

  • 报文主体(多行)

响应报文

响应报文是服务器对请求资源的响应,主要也包含三部分,报文首部,空行(CR+LF),报文主体。如下图所示:

 


  //响应例子
  HTTP/1.1 200 OK                          //请求行
  Date: Fri, 22 May 2009 06:07:21 GMT 
  Content-Type: text/html; charset=UTF-8   //各种首部字段
                                           //空行(CR+LF)
  <html>                                   //报文主体
        <head></head>
        <body>
              <!--body goes here-->
        </body>
  </html>  //响应例子
  HTTP/1.1 200 OK                          //请求行
  Date: Fri, 22 May 2009 06:07:21 GMT 
  Content-Type: text/html; charset=UTF-8   //各种首部字段
                                           //空行(CR+LF)
  <html>                                   //报文主体
        <head></head>
        <body>
              <!--body goes here-->
        </body>
  </html>
  • 请求行(一行)

    结构:version status_code status_message

    • version

      描述所遵循的HTTP版本。

    • status_code

      状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

      1xx:指示信息--表示接收的请求正在处理

      2xx:成功--表示请求正常处理完毕

      3xx:重定向--要完成请求必须进行更进一步的操作

      4xx:客户端错误--请求有语法错误或请求无法实现

      5xx:服务器端错误--服务器处理请求出错

      状态码,指明对请求处理的状态,常见的如下。

      • 200:成功。

      • 204:请求处理成功,但没有资源可返回(即浏览器显示的页面无变化)

      • 206:表示客户端进行 了范围请求,而服务器成功执行了这部分的GET请求。

         

      • 301:永久重定向,请求的资源已被分配新的URI。

      • 302:临时重定向,请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

      • 303:请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

      • 304:客户端发送附带条件的请求时,资源已找到,但未符合条件请求。304和重定向没有关系。

         

      • 400:请求不能被服务器理解。

      • 401:发送的请求需要有通过HTTP认证的认证信息。

      • 403:无权访问该资源。

      • 404:不能找到请求的资源。

         

      • 500:服务器内部错误。

      • 501:服务器不支持请求的方法。

      • 503:服务器暂时处于超负载或正在进行停机维护。

      • 505:服务器不支持请求的版本。

    • status_message

      显示和状态码等价英文描述。

  • 各种首部字段

    这里只罗列部分。

    • Date:表示信息发送的时间。

    • Server:Web服务器用来处理请求的软件信息。

    • Content-Encoding:Web服务器表明了自己用什么压缩方法压缩对象。

    • Content-Length:服务器告知浏览器自己响应的对象长度。

    • Content-Type:告知浏览器响应对象类型。

  • 空行(一行)

  • 报文主体(多行)

    实际有效数据,通常是HTML格式的文件,该文件被浏览器获取到之后解析呈现在浏览器中。

附一:

各种协议与HTTP协议的关系

附二:

URL和URI区别

URI为统一资源标识符,用字符串标识某一互联网资源,而URL为统一资源定位符,表示资源的地点(互联网上所处的位置),URL是URI的子集。

附三:

HTTP1.0 HTTP 1.1主要区别

  1. 长连接

HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。

  1. 节约带宽

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

3.HOST域

现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

附四:

HTTP1.1 HTTP 2.0主要区别

1.多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

  1. 数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

  1. 服务器推送

意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

附五:

GET和POST区别

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.

  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

 

2019-01-28 22:51:37 qq_43090158 阅读数 45
  • python全栈习题课

    【程序员工具基础】图灵系统使用,Linux初步,DevOps 【Python基础语法】函数,OOP编程,调试技术 【Python高级语法】函数式编程,多线程,携程异步,IO编程,正则 【Web 编程基础 】Socket编程,WSGI,HTTP协议实战框架项目 【主流数据库】关系型非关系性三大主流数据库,不多说 【WEB实战开发框架】Flask,Django,twisted,tornado 【自动化测试】测试工程,测试脚本,自动化测试框架 【自动化运维】自动化部署工具,服务自动化搭建 【爬虫与反爬虫】ssl,js加密,ajax处理,模拟器selemium,验证码识别,Scrapy框架使用 【计算机数学基础】线性代数,微积分,统计概率,Python数学模块 【数据分析·处理】数据清洗,NLP,回归,贝叶斯,灰度预测,聚类,数据分析实战项目 【人工智能(AI)】回归,正则,决策树,贝叶斯,SVM,聚类,关联规则,神经网络,深度学习,手写字识别,猫狗分类,情感分析,推荐系统,目标检测,机器翻译

    393 人正在学习 去看看 刘英

在这里插入图片描述
冒号和两个斜线是规定的格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
HTTP 是面向事务的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

用户点击 URL 	http://www.tsinghua.edu.cn/chn/yxsz/index.htm后所发生的事件
(1) 浏览器分析超链指向页面的 URL。
(2) 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
(3) 域名系统 DNS 解析出清华大学服务器的 IP 地址。
(4) 浏览器与服务器建立 TCP 连接。
(5) 浏览器发出取文件命令:GET /chn/yxsz/index.htm。
(6) 服务器给出响应,把文件 index.htm 发给浏览器。
(7) TCP 连接释放。
(8) 浏览器显示“清华大学院系设置”文件 index.htm 中的所有文本。
代理服务器 (proxy server) 又称为万维网高速缓存 (Web cache),它代表浏览器发出 HTTP 请求。

万维网高速缓存把最近的一些请求和响应暂存在本地磁盘中。

当与暂时存放的请求相同的新请求到达时,万维网高速缓存就把暂存的响应发送出去,而不需要按 URL 的地址再去互联网访问该资源。

使用高速缓存可减少 访问互联网服务器的时延

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
HTTP 有两类报文:
请求报文——从客户向服务器发送请求报文。
响应报文——从服务器到客户的回答。

由于 HTTP 是面向正文的 (text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。

关于计算机网络http报文的一些介绍

博文 来自: qq_23100787
没有更多推荐了,返回首页