1. Http简介
HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是用于从服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档 中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
1.1 HTTP 特点
• 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后, 即断开连接。采用这种方式可以节省传输时间。
• 媒体独立:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 来传输。 详见:MIME 参考手册
• 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。例如:你要实现一个购物车,需要借助于Cookie或Session或服务器端API(如NSAPI and ISAPI)记录这些信息,请求服务器结算页面时同时将这些信息提交到服务器;当你登录到一个网站时,你的登录状态也是由Cookie或Session来“记忆”的,因为服务器并不知道你是否登录。优点:服务器不用为每个客户端连接分配内存来记忆大量状态,也不用在客户端失去连接时去清理内存,以更高效地去处理WEB业务。缺点:客户端的每次请求都需要携带相应参数,服务器需要处理这些参数。
容易犯的误区:
1)HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)
2)从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
3)Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
1.2 HTTP和HTTPS的区别
现在在浏览很多网站时,通过浏览器地址栏可以看到有的网站是 https 开头(https://www.baidu.com/ ), 但是有的是 http 开头(如:http://www.weather.com.cn )这两种有什么区别呢?
HTTPS 的全称是 Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的 HTTP 通道, 简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层(Secure Sockets Layer 安全套接层),简称为 HTTPS,S 其实是 Security 单词的首字母。
HTTPS 的安全基础是 SSL,因此通过它传输的内容都是经过 SSL 加密的,它的主要作用可以分为两种:
1)是建立一个信息安全通道,来保证数据传输的安全。
2) 确认网站的真实性,凡是使用了 https 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过 CA 机构颁发的安全签章来查询。
1.3 HTTP 与 TCP/IP 的区别
TCP/IP 协议是传输层协议,主要解决数据如何在网络中传输,而 HTTP 是应用层协议,主要解决如何包装数据。
1.4 HTTP 请求过程
浏览器向网站所在的服务器发送了一个 Request,即请求,网站服务器接收到这个 Request 之后进行处理和解析,然后返回对应的一个 Response,即响应,然后传回给浏览器,Response 里面就包含了页面的源代码等内容,浏览器再对其进行解析便将网页呈现了出来。
2. Request
Request即请求,由客户端向服务端发出,请求报文结构如下图:
可以将 Request 划分为四部分内容:
• Request Method: 请求方式
• Request URL: 请求链接
• Request Headers: 请求头
• Request Body: 请求体
2.1 Request Method
1)http 八大请求方式
- 八大方法
1)get:从指定的资源请求数据,即查找资源
2)post:向指定资源提交需要被处理的数据,即修改资源
3)put:上传uri标识的资源到某个主机
4)delete:删除uri指定的资源
5) head:与get方法相同,但是不返回实体的主体,只返回首部
6)trace:回显服务器收到的请求,主要用于测试或诊断。
7)connect:要求在与代理服务器通信时建立隧道,用隧道协议进行tcp通信。主要是使用SSL(Secure Sockets Layer,安全套阶层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
允许客户端查看服务器的性能
8)options:允许客户端查看服务器的性能。
2)get与post请求的区别
2.2 Request URL
URL
是Uniform Resource Locator
的简写,统一资源定位符。 一个URL
由以下几部分组成:
scheme://host:port/path/?query-string=xxx#anchor
- scheme:代表的是访问的协议,一般为
http
或者https
以及ftp
等。 - host:主机名,域名,比如
www.baidu.com
。 - port:端口号。当你访问一个网站的时候,浏览器默认使用80端口。
- path:查找路径。比如:
www.jianshu.com/trending/now
,后面的trending/now
就是path
。 - query-string:查询字符串,比如:
www.baidu.com/s?wd=python
,后面的wd=python
就是查询字符串。 - anchor:锚点,后台一般不用管,前端用来做页面定位的。
在浏览器中请求一个url
,浏览器会对这个url进行一个编码。除英文字母,数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码。
2.3 Request Headers
请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent 等,下面将一些 常用的头信息说明如下:
• Accept,请求报头域,用于指定客户端可接受哪些类型的信息。
• Accept-Language,指定客户端可接受的语言类型。
• Accept-Encoding,指定客户端可接受的内容编码。
• Host,用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。从 HTTP 1.1 版本开始,Request 必须包含此内容。
• Cookie,也常用复数形式 Cookies,是网站为了辨别用户进行 Session 跟踪而储存在用户本地的数据。 Cookies 的主要功能就是维持当前访问会话。
• Referer,此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、做防盗链处理等。
• User-Agent,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、浏览器 及版本等信息。在做爬虫时加上此信息可以伪装为浏览器,如果不加很可能会被识别出为爬虫。
• Content-Type,即 Internet Media Type,互联网媒体类型,也叫做 MIME 类型,在 HTTP 协议消息头 中,使用它来表示具体请求中的媒体类型信息。例如 application/x-www-form-urlencoded 表示表单数 据, text/html 代表 HTML 格式,image/gif 代表 GIF 图片,application/json 代表 Json 类型。
• Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默认为3000ms;
• Content-Length:请求体长度
2.4 Request Body
即请求体,一般用于 POST 请求中,主要定义向服务器提交的数据类型,而对于 GET 请求 Request Body 则为空。请求头与请求体之间用空行分隔开,下面为一个Post请求:
Request Headers Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate Accept-Language:zh-CN,zh;q=0.8 Cache-Control:no-cache Connection:keep-alive Content-Length:13 Content-Type:application/x-www-form-urlencoded Cookie:csrftoken=z5H43ZwARx7AIJ82OEizBOWbsAQA2LPk Host:127.0.0.1:8090 Origin:http://127.0.0.1:8090 Pragma:no-cache Referer:http://127.0.0.1:8090/login/ Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36 Form Data username:yuan
3.Response
Response即响应,由服务端向客户端发出,响应报文结构如下图:
可以将Response划为三部分内容:
• Response Status Code
• Response Headers
• Response Body
3.1 Response Status Code
- 2xx:
200 Ok:表示请求正常处理
204 No Content :表示服务器成功处理请求,但返回的相应报文中不含实体的主体部分
206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分请求
- 3xx:
301 Moved Permanently:永久性重定向。也就是说原来请求的uri被分配了新的uri,以后就使用这个新的uri。如果之前的uri被保存为了书签,那么把uri替换为新的uri
302 Found:临时性的重定向。与301不同之处在于不更新书签等。其在收到302后马上用新的uri进行第二次请求,并将方法改为get,但规范本身是禁止这么做的,只是大多数浏览器都没有遵守规范。
303 See Other:表示请求的资源有多个uri,明确规定应使用get方法定向获取请求的资源。在现在的使用中302与其有一致的含义。
307 Temporary Redirect:与302有一致的含义,禁止post方法转成get方法
304 Not Modified:与附带条件的请求配合使用(例如if-None-Match,if-Range等,下文请求首部字段将会讲到),表示请求的资源找到了,但是没有满足请求的附带条件。
- 4xx
400 Bad Request:表示请求报文中存在语法错误,当发生错误是,需要修改请求的内容再次发送请求,另外,客户端浏览器会像对待200 0k一样对待该状态码
401 Unauthorized:表示发送的请求需要通过HTTP认证的认证信息,响应报文必须包含一个使用与被请求资源的www-authenticate首部用以质询用户信息,当浏览器初次接收401时,会弹出认证用的窗口
403 Forbidden
404 Not Found
- 5xx
500 Internal Server Error:表示服务器端在执行请求时发生了错误,也有可能是web的bug
503 Service Unavailable:服务器可能正超负荷或暂停维护无法访问
扩展资料:Http响应码
3.2 Response Headers
响应头,其中包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等,下面将一些常用的 头信息说明如下:
• Date,标识 Response 产生的时间。
• Last-Modified,指定资源的最后修改时间。
• Content-Encoding,指定 Response 内容的编码。
• Server,包含了服务器的信息,名称,版本号等。
• Content-Type,文档类型,指定了返回的数据类型是什么,如 text/html 则代表返回 HTML 文档, application/x-javascript 则代表返回 JavaScript 文件,image/jpeg 则代表返回了图片。
• Set-Cookie,设置 Cookie,Response Headers 中的 Set-Cookie 即告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 内容。
• Expires,指定 Response 的过期时间,使用它可以控制代理服务器或浏览器将内容更新到缓存中,如果再次访问时,直接从缓存中加载,降低服务器负载,缩短加载时间。
3.3 Response Body
即响应体,响应的正文数据都是在响应体中,如请求一个网页,它的响应体就是网页的 HTML 代码,请求一张图 片,它的响应体就是图片的二进制数据。一般在接口的响应内容大多都是 Json 数据内容。
>>>>>>>待续