OkayStudy
ZH English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

如何开启通知

此浏览器或网址无法使用通知。请使用支持通知的浏览器,通过安全连接访问SONUB。

如果通知被屏蔽,请在浏览器设置中允许通知。

  1. 打开地址栏旁的站点设置或浏览器的站点设置,将此网站的通知设为允许。
  2. 在设备设置中允许浏览器发送通知,并检查勿扰模式或专注模式。
  3. 返回SONUB,刷新页面,然后通过铃铛开启通知。

在iPhone或iPad上,将SONUB添加到主屏幕,从主屏幕打开后允许通知。

返回 Vibe 编程

Web 客户端

所有向服务器开口要东西的一方。

浏览器是 Web 客户端,一行 curl 也是。先用 nc 亲手写一个 HTTP 请求,再在 curl 和 Chrome 开发者工具里看同样的文字来回传递。

一个浏览器窗口、一个黑色的终端窗口和一部智能手机,各自向同一台服务器寄出一个信封,页面又分别送回到它们手里。
、 和手机应用扮演的是同一个角色:它们先开口问,再回答。

在终端里做一个 Web 客户端

要最快地相信 只是文字,就自己动手打一份出来。先把上一主题里的 服务器跑起来,再开第二个,亲手跟它说话。

用 nc 手写一份请求

连上,把你敲的字原样送上线路。打完两行、按两次回车,服务器就会回答 —— 你刚刚亲手做了浏览器的活。

terminal
# connect, then type the two lines below and press Enter once more
nc localhost 8084

GET / HTTP/1.1
Host: localhost

# or send it all at once (printf's \r\n is HTTP's line break;
# sleep keeps the line open a moment so the shell server can answer)
{ printf 'GET / HTTP/1.1\r\nHost: localhost\r\n\r\n'; sleep 1; } | nc localhost 8084
  • 很重要。它告诉服务器请求到此为止,所以你要多按一次回车。
  • HTTP 要求每行以结束。手打也能通,是因为多数服务器比较宽容;而 那一版送出的正是标准所要求的样子。
  • 是 强制要求的。对着真实站点少写它,通常换回来的是一个错误,而不是页面。

把它包成脚本

既然请求已经只是一句 printf,一个可以反复用的也就是几行的事。下面这份接收主机、端口和,送出请求,并把和正文分开显示。

client.sh
#!/bin/bash
# usage: bash client.sh localhost 8084 /

HOST=${1:-localhost}
PORT=${2:-8084}
PATH_=${3:-/}

{ printf 'GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n' "$PATH_" "$HOST"; sleep 1; } \
  | nc "$HOST" "$PORT" \
  | tr -d '\r' \
  | awk 'BODY { print; next } /^$/ { BODY = 1; next } { print "[header] " $0 }'

去掉 HTTP 留在每行末尾的回车, 则在遇到空行之前把每行都标成头部 —— 空行之后的一切都是正文。这跟浏览器开始绘制之前所做的切分完全一样。

把两头一起跑起来

一个终端跑 Shell 服务器,另一个跑这个客户端,你就同时握有一场自己写出来的对话的两端。发给 Shell 服务器时,要像上面的那样用 让连接多开一会儿,才收得到回答。改一改服务器的,客户端立刻就看得见 —— 因为中间再没有别的东西。

回到 Shell Web 服务器

这一栏由你自己标记,这里不打分。

要把这一阶段标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

请选择要取消的待付款预约。每次取消都需要确认。

你所在国家的时间:

关闭