HTTP粗略入门小白篇

目录

  1. HTTP简述
  2. URL
  3. HTTP 请求
    • 格式
    • GET 请求
    • POST 请求
    • GET 和 POST 的区别
    • 用 Chrome 发请求
  4. HTTP 响应
    • 格式
    • 用 Chrome 查看响应
  5. URI 和 URL 的区别
  6. 总结

HTTP 简述

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

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

  • URL,俗称网址
  • HTTP,两个电脑之间传输内容的协议
  • 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 请求。

格式

请求方法 路径 协议/版本
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

要上传的数据

  • 第一行是第一部分:请求行
    请求方法就是前面提到的那几种,常用GET,POST(思考它们的区别)。这里的路径包括「查询参数」,但不包括「锚点」。如果你没有写路径,那么路径默认为 / 。
  • 第二行直到回车是第二部分:请求报头
    请求报头包含客户端向服务器传递请求的附加信息和客户端自身的信息,由关键字/值对组成,每行一对,关键字和值用英文冒号 : 分隔。
    常见的请求报头有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent 等。
  • 第三部分永远都是一个回车(\n)
  • 回车后的内容是第四部分:请求正文
    当使用 POST、PUT 等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中。请求正文可以承载多个请求参数的数据,包含回车符、换行符和请求数据,并不是所有请求都具有请求数据(也就是说第四部分可以为空)。
    在请求包头中有一些与请求正文相关的信息,例如:现在的 Web 应用通常采用 Rest 架构,请求的数据格式一般为 json。这时就需要设置 Content-Type: application/json

GET 请求

这里先介绍一个工具 curl。

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文件太大没截全图:

显示内容的尾部:

POST请求

当需要发送表单数据到服务器时,可以用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

GET 和 POST 的区别

get 和 post 虽然本质都是 tcp/ip,但两者除了在 http 层面外,在 tcp/ip 层面也有区别。

get 会产生一个 tcp 数据包,post 两个。具体就是:

  • get 请求时,浏览器会把 headers 和 data 一起发送出去,服务器响应 200(返回数据)
  • post 请求时,浏览器先发送 headers,服务器响应 100 continue, 浏览器再发送 data,服务器响应200(返回数据)

用 Chrome 发请求

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

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. 按 F12 进入开发者模式
  2. 打开 Network
  3. 输入网址
  4. 选中第一个响应
  5. 查看 Response Headers,点击「view source」
  6. 查看 Response 或者 Preview,你会看到响应的第 4 部分

Response

URI 和 URL 的区别

小插曲,一图盖之:


URI & URL

总结

HTTP的知识对前端开发非常重要,这里只是浅谈了一下HTTP的格式、分类和一些状态码,等以后学习了HTTP更深入的知识再来填坑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,092评论 0 23
  • 作者:涤生_Woo链接:https://www.jianshu.com/p/6e9e4156ece3 本篇文章篇幅...
    Fi的学习笔记阅读 1,691评论 0 4
  • 当 app 和服务器进行通信的时候,大多数情况下,都是采用 HTTP 协议。HTTP 最初是为 web 浏览器而定...
    Flysss1219阅读 1,250评论 0 4
  • Web 页面的实现 Web 基于 HTTP 协议通信 客户端(Client)的 Web 浏览器从 Web 服务器端...
    毛圈阅读 1,072评论 0 2
  • 一个月前的某天在面点王吃完结账时收银小姐让我扫码办卡当次的付款就可以打折,具体打几折忘记了,但觉得可以省10元也算...
    daisyaa阅读 378评论 0 0