饥人谷技术博客

HTTP粗略入门小白篇

2019-03-01  本文已影响62人  许骁Charles

HTTP简述

HTTP协议,即超文本传输协议(HyperText Transfer Protocol),是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP本身是Tim Berners-Lee发明的万维网中重要三个概念之一,即URL,HTTP,HTML。
其中,

  1. URL,俗称网址
  2. HTTP,两个电脑之间传输内容的协议
  3. HTML,超级文本,主要用来做页面跳转

通俗地讲,URL 的作用是能让你访问一个页面,HTTP 的作用是让你能下载这个页面,HTML 的作用是让你能看懂这个页面。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

URL

了解HTTP之前,需要了解下URL
url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

这里主要了解它的结构。比如:

https://www.baidu.com/s?wd=Jay#6

https:// 超文本传输安全协议
www.baidu.com 域名
/s 路径
?wd=Jay 查询参数
#6 锚点

HTTP请求

HTTP/1.1协议中定义了多种请求方法,包括GET,POST,GET,PUT,PATCH, DELETE,HEAD,OPTIONS等,这里只介绍最常见的GET和POST请求。

curl命令

curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
它可以很直观地将你要访问的网站的请求和响应表示出来,这里我们以访问国内最大同性交友网站bilibili为例。

curl -s -v -H "key: value" -- "https://www.bilibili.com"

-s表示不要显示进度
-v显示一次的http请求的通信过程,去掉的话只返回HTML文档,没有请求和响应
-H表示添加后面的内容到请求头,来自定义Header,里面的内容任意,比如:"Referer: www.example.com"
这是一个GET请求

我们将会得到如下结果:


显示内容的头部,HTML文件太大没截全图
显示内容的尾部

其中的请求部分为:


GET请求
当需要发送表单数据到服务器时,可以用POST请求:
curl -X POST -d "title=xxx&text=yyy" www.example.com/add

-X用于指定发送数据的方式,这里是POST
curl默认以application/x-www-form-urlencoded作为Content-Type来发送数据

那么会相应地返回结果如下:

POST / HTTP/1.1
Host: www.examle.com/add
User-Agent: curl/7.56.0
Accept: */*
Content-Length: 18
Content-Type: application/x-www-form-urlencoded

title=xxx&text=yyy

请求的格式

请求方法 路径 协议/版本
Key1: value1
Key2: value2
Key3: value3
Content-Length: n
Content-Type: application/x-www-form-urlencoded
Host: www.example.com
User-Agent: curl/7.56.0

要上传的数据

第一行是第一部分,第二行直到回车是第二部分,第三部分永远都是一个回车(\n),请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
请求方法就是前面提到的那几种,常用GET,POST。
这里的路径包括「查询参数」,但不包括「锚点」。
如果你没有写路径,那么路径默认为 / 。
第 2 部分中的 Content-Type 标注了第 4 部分的格式。

用 Chrome 发请求

  1. 打开 Network
  2. 地址栏输入网址
  3. 在 Network 点击,查看 request,点击「view source」
  4. 如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
Request Headers

HTTP响应

在上面访问bilibili的例子中,显示末尾的一部分就是服务器的响应:


GET响应

再加上前面很长的那个HTML文件,一起组成了HTTP响应的结构。

响应的格式

协议/版本号 状态码 状态解释
Key1: value1
Key2: value2
Content-Length: n
Content-Type: text/html

要下载的内容

可以看到,响应的格式和请求格式基本一致。
状态码是服务器对浏览器说的话,可以粗暴地如下来记忆:

1xx 表示server说:我知道了,你继续
2xx 表示成功
3xx 表示server说:滚吧
4xx 表示server说:你丫错了
5xx 表示server说:好吧,我错了

一些常见的:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
502 Bad Gateway               //作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

用 Chrome 查看响应

  1. 打开 Network
  2. 输入网址
  3. 选中第一个响应
  4. 查看 Response Headers,点击「view source」
  5. 查看 Response 或者 Preview,你会看到响应的第 4 部分
Response Headers
Response

URI和URL区别

小插曲,一图盖之:


URI & URL
上一篇下一篇

猜你喜欢

热点阅读