HTTP协议入门以及curl介绍
HTTP介绍
超文本传输协议(HTTP:The Hypertext Transfer Protocol)是一种应用协议用于分布式,协作,超媒体的信息系统。HTTP是万维网数据通信的基础,其中超文本文档包括用户可以轻松访问的其他资源的超链接,例如通过鼠标点击或点击屏幕。开发HTTP是为了促进超文本和万维网(来自维基百科)。
HTTP的作用
HTTP 的作用就是指导浏览器和服务器如何进行沟通
服务器与浏览器的交互:
交互的步骤:
1. 浏览器发出请求
2. 通过TCP/IP协议,浏览器和客户端三次握手(80端口)
3. 服务器对请求做出回应
HTTP的请求
HTTP的请求指要对所识别的资源执行的期望动作,资源对应于驻留在服务器上的文件或可执行文件的输出。HTTP / 1.0规范定义了GET,POST和HEAD方法,HTTP / 1.1规范添加了五种新方法:OPTIONS,PUT,DELETE,TRACE和CONNECT。通过在这些文档中指定,它们的语义是众所周知的并且可以依赖。任何客户端都可以使用任何方法,并且可以将服务器配置为支持任何方法组合。
如何查看HTTP的请求
- 使用Chrome浏览器输入网址(本例哔哩哔哩)
- 按下F12进入开发者模式,F5刷新
- 点击开头 www.bilibili.com,再点击heardes->request heardes->view source,即可得到HTTP请求。如下:
HTTP请求的格式
GET / HTTP/1.1
Host: www.bilibili.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
- 第一部分
第1行,格式一般为**动词 + 路径 + 协议版本 ** - 第二部分
2-8行- 第2行,HOST用来指定服务器的域名,可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础
- 第3行表示持久连接(persistent connection)是HTTP/1.1 版引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明
- 第6行代表的客户端所使用的浏览器
- 第7行为Content-Encoding 字段说明浏览器可以接受哪些压缩方法
- 第8行,默认语言属性,浏览器告诉服务器其支持什么语言
- 第三部分
第9行,空格
HTTP请求常用动词及作用
- GET
请求指定资源的表示。使用GET的请求应该只检索数据,不应该有其他影响。可以理解为只读取。 - POST
请求服务器接受被附在请求作为新下属的实体网络资源由URI标识。例如 将Web表单提交给数据处理过程的结果数据块; 或要添加到数据库的项目。也就是向服务器提交数据,常见的提交表单都是POST方法。 - PUT
请求将所包含的实体存储在提供的URI下。如果URI引用已存在的资源,则将其修改; 如果URI未指向现有资源,则服务器可以使用该URI创建资源。 - HEAD
只请求页面的首部,但没有响应主体。这对于检索在响应头中编写的元信息非常有用,而无需传输整个内容。
HTTP的响应
如何查看HTTP的响应
步骤如请求,第3步为heardes->response heardes->view source,如图:
HTTP响应的格式
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Origin,Accept-Encoding
Content-Encoding: gzip
- 同样分为三部分
- 第一部分
第1行,格式一般协议版本 + 状态码(status code) + 状态描述 - 第二部分
- 第2行,为字符的编码,1.0版规定,头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用
- 第6行,由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。
- 第三部分
第7 行,空格
HTTP状态码(status code)
超文本传输协议(HTTP)响应状态代码的列表。状态代码由服务器发出,以响应客户端对服务器的请求。它包括来自IETF Request for Comments(RFC)的代码,其他规范以及在超文本传输协议(HTTP)的一些常见应用中使用的一些附加代码。状态代码的第一个数字指定五个标准响应类别之一。所示的消息短语是典型的,但是可以提供任何人类可读的替代方案。除非另有说明,否则状态代码是HTTP / 1.1标准(RFC 7231)的一部分。(来自维基百科)
- 1xx(信息):收到请求,继续处理
- 2xx(成功):请求已成功接收,理解和接受
- 3xx(重定向):需要采取进一步措施才能完成请求
- 4xx(客户端错误):请求包含错误的语法或无法满足
- 5xx(服务器错误):服务器无法满足明显有效的请求
CURL介绍
一个计算机软件项目,提供了一个库和命令行工具,用于使用各种协议传输数据。cURL项目生成两个产品libcurl和cURL。它于1997年首次发布。该名称代表“客户端URL”。原作者和首席开发人员是瑞典开发人员Daniel Stenberg。
用法(待续)
-
查看网页源代码以及下载网页
$ curl www.baidu.com curl -o [xxx] www.baidu.com
-
使用-X GET得到GET请求
$ curl -X GET www.baidu.com
-
使用-i 同时获得HTTP头和文件内容
curl -i www.bilibili.com
-
用 -L对网址重定向
curl -L www.baidu.com
-
用 -d 发送 POST 请求
curl -d [xxx] www.baidu.com