好程序员web前端教程JavaScript系列之HTTP

简介:

  好程序员web前端教程JavaScript系列之HTTP:http 是我们前后台交互的时候的传输协议(即超文本传输协议)
HTTP 的工作流程
.和服务器建立链接
.建立链接后,发送一个请求给服务器(请求)
.服务器接受到请求以后进行相应的处理并给出一个回应(响应)
.断开于服务器的链接
和服务器建立链接
怎么和服务器建立链接呢?
需要保证客户端的接受和发送正常,服务器端的接受和发送正常
这里就涉及到一个东西叫做 TCP/IP 协议
建立链接的主要步骤叫做 三次握手
1、客户端发送一个消息给到服务端
此时: 服务端知道了 客户端可以正常发送消息 服务端知道了 服务端可以正常接受消息
2、服务端回给客户端一个消息
此时:
服务端知道了 客户端可以正常发送消息
服务端知道了 服务端可以正常接受消息
客户端知道了 客户端可以正常发送消息
客户端知道了 客户端可以正常接受消息
客户端知道了 服务端可以正常接受消息
客户端知道了 服务端可以正常发送消息
3、客户端再回给服务端一个消息
此时:
服务端知道了 客户端可以正常发送消息
服务端知道了 服务端可以正常接受消息
客户端知道了 客户端可以正常发送消息
客户端知道了 客户端可以正常接受消息
客户端知道了 服务端可以正常接受消息
客户端知道了 服务端可以正常发送消息
服务端知道了 服务端可以正常发送消息
服务端知道了 客户端可以正常接受消息
至此,依照 TCP/IP 协议的建立链接就建立好了
双方都知道双方可以正常收发消息
就可以进入到第二步,通讯了
发送一个请求
建立完链接以后就是发送请求的过程
我们的每一个请求都要把我们的所有信息都包含请求
每一个请求都会有一个 请求报文
在 请求报文 中会包含我们所有的请求信息(也就是我们要和服务端说的话都在里面)
我们的请求报文中会包含几个东西
1、请求行
POST /user HTTP/1.1

POST 请求方式

/user 请求URL(不包含域名)

HTTP/1.1 请求协议版本

2、请求头(请求头都是键值对的形式出现的)
user-agent: Mozilla/5.0 # 产生请求的浏览器信息accept: application/json # 表示客户端希望接受的数据类型Content-Type: application/x-www-form-urlencoded # 客户端发送的实体数据格式Host: 127.0.0.1 # 请求的主机名(IP)
3、请求空行(请求头和请求主体之间要留一个空白行)

就是一个空行

4、请求体(本次请求携带的数据)

GET 请求是没有请求体数据的

POST 请求才有请求体数据

接下来看一个完整的请求报文
POST /user HTTP/1.1 # 请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0. # 以上是首部

(此处必须有一空行) # 空行分割header和请求内容

name=world # 请求体
接受一个响应
客户端的请求发送到服务端以后
服务端进行对应的处理
会给我们返回一个响应
每一个响应都会有一个 响应报文
在 响应报文 中会包含我们所有的响应信息(也就是服务端在接受到客户端请求以后,给我们的回信)
我们的 响应报文 中会包含几个信息
1、状态行
HTTP/1.1 200 OK

HTTP/1.1 服务器使用的 HTTP 协议版本

200 响应状态码

OK 对响应状态码的简单解释

2、响应头
Date: Jan, 14 Aug 2019 12:42:30 GMT # 服务器时间
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45 # 服务器类型
Content-Type: text/html # 服务端给客户端的数据类型
Content-Length: 11 # 服务端给客户端的数据长度
3、响应体
hello world

服务端给客户端的响应数据

断开于服务端的链接
之前我们的建立链接是基于 TCP/IP 协议的 三次握手
我们的断开链接是基于 TCP/IP 协议的 四次挥手
.客户端发送一个我要断开的消息给服务端
.服务端接受到以后发送一个消息告诉客户端我已经进入关闭等待状态
.服务端再次发送一个消息告诉客户端,这个是我的最后一次消息给你,当我再接受到消息的时候就会关闭
.客户端接受到服务端的消息以后,告诉服务器,我已经关闭,这个是给你的最后一个消息
完成一个 HTTP 请求
至此,一个 HTTP 请求就完整的完成了
一个 HTTP 请求必须要包含的四个步骤就是
.建立链接
.发送请求
.接受响应
.断开链接
在一个 HTTP 请求中,请求的部分有请求报文,接受响应的部分有响应报文
请求报文包含
.请求行
.请求头
.请求空行
.请求体
响应报文
.状态行
.响应头
.响应体
常见的 HTTP 响应状态码
在一个 HTTP 请求的响应报文中的状态行会有一个响应状态码
这个状态码是用来描述本次响应的状态的
通常会出现五种状态码
.100 ~ 199
.200 ~ 299
.300 ~ 399
.400 ~ 499
.500 ~ 599
100 ~ 199
一般我们看不到,因为表示请求继续
100: 继续请求,前面的一部分内容服务端已经接受到了,正在等待后续内容
101: 请求者已经准备切换协议,服务器页表示同意
200 ~ 299
2 开头的都是表示成功,本次请求成功了,只不过不一样的状态码有不一样的含义(语义化)
200: 标准请求成功(一般表示服务端提供的是网页)
201: 创建成功(一般是注册的时候,表示新用户信息已经添加到数据库)
203: 表示服务器已经成功处理了请求,但是返回的信息可能来自另一源
204: 服务端已经成功处理了请求,但是没有任何数据返回
300 ~ 399
3 开头也是成功的一种,但是一般表示重定向
301: 永久重定向
302: 临时重定向
304: 使用的是缓存的数据
305: 使用代理
400 ~ 499
4 开头表示客户端出现错误了
400: 请求的语法服务端不认识
401: 未授权(你要登录的网站需要授权登录)
403: 服务器拒绝了你的请求
404: 服务器找不到你请求的 URL
407: 你的代理没有授权
408: 请求超时
410: 你请求的数据已经被服务端永久删除
500 ~ 599
5 开头的表示服务端出现了错误
500: 服务器内部错误
503: 服务器当前不可用(过载或者维护)
505: 请求的协议服务器不支持
常见的 HTTP 请求方式
每一个 HTTP 请求在请求行里面会有一个东西叫做请求方式
不同的请求方式代表的含义不同
.GET: 一般用于获取一些信息使用(获取列表)
.POST: 一般用于发送一些数据给服务端(登录)
.PUT: 一般用于发送一些数据给服务当让其添加新数据(注册)
.DELETE: 一般用域删除某些数据
.HEAD: 类似于 GET 的请求,只不过一般没有响应的具体内容,用于获取报文头
.CONNECT: HTTP/1.1 中预留的方式,一般用于管道链接改变为代理的时候使用
.PATCH: 是和 PUT 方式类似的一个方式,一般用于更新局部数据
.OPTIONS: 允许客户端查看服务端性能
我们比较常用的就是 GET 和 POST
GET 请求
参数以 querystring 的形式发送,也就是直接拼接在 请求路径的后面
GET 请求会被浏览器主动缓存
GET 请求根据不同的浏览器对长度是有限制的
IE: 2083 个字符
FireFox: 65536 个字符
Safari: 80000 个字符
Opera: 190000 个字符
Chrome: 8182 个字符
APACHE(server): 理论上接受的最大长度是 8192 个字符(有待商榷)
对参数的类型有限制,只接受 ASCII 码的格式
GET 请求是明文发送,相对不安全
POST 请求
参数以 request body的形式发送,也就是放在请求体中
POST 请求不会被浏览器主动缓存,除非手动设置
POST 请求理论上是没有限制的,除非服务端做了限制
对参数类型没有限制,理论上可以传递任意数据类型,只不过要和请求头对应
POST 请求是密文发送,相对安全

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
网络协议 Shell 网络安全
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
163 0
|
21天前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
1月前
|
前端开发 JavaScript 程序员
推荐给前端程序员的5款浏览器插件
推荐给前端程序员的5款浏览器插件
|
1月前
|
前端开发 JavaScript UED
前端开发的魔法:CSS动画与JavaScript的完美结合
本文将探讨如何利用CSS动画和JavaScript的结合,为前端页面增添生动的效果。我们将通过实例展示如何使用这两种技术为网页元素创建吸引人的动画效果,并讨论它们的优缺点和适用场景。
27 0
|
1月前
|
机器学习/深度学习 人工智能 前端开发
【前端】JavaScript简介
【前端】JavaScript简介
17 0
|
1月前
|
JavaScript 前端开发 网络架构
JavaScript的数组教程(最详细,更新至es6新语法)
JavaScript的数组教程(最详细,更新至es6新语法)
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
125 1
|
1月前
|
Rust 前端开发 JavaScript
前端技术的未来:WebAssembly与JavaScript的融合之路
【2月更文挑战第12天】本文旨在探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)的结合如何为前端开发带来革命性变化。传统上,JS一直是前端开发的核心,但随着Wasm的出现,我们看到了前端性能和功能的新天地。文章首先介绍Wasm的基本概念,然后分析其对前端开发的影响,包括性能提升、新功能实现以及开发模式的变化。最后,探讨了Wasm与JS融合的未来趋势,以及这种融合如何推动前端技术的进步。
|
1月前
|
Rust 前端开发 JavaScript
探索前端技术的未来:WebAssembly与JavaScript的融合之路
【2月更文挑战第12天】 随着Web技术的不断进步,前端开发正迎来一场革命性变革。本文将深入探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)的结合如何为前端开发带来前所未有的性能提升与新的编程模式。我们将从两者的基本概念入手,探索它们各自的优势与局限,然后深入分析Wasm和JS协同工作时能够解锁的潜力,最后展望这一技术趋势如何塑造未来的前端开发生态。本文旨在为前端开发者提供洞见,帮助他们理解并准备好迎接这一即将到来的技术浪潮。
|
1月前
|
Rust 前端开发 JavaScript
前端技术的未来演进:WebAssembly与JavaScript的深度融合
【2月更文挑战第11天】 在数字化时代,前端技术的迅速发展不仅推动了用户体验的革新,也促进了Web应用的性能提升。本文将探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)之间的深度融合如何成为前端技术发展的关键转折点。不同于传统的技术文章摘要,我们将通过一种叙事式的预览引导读者进入这一技术领域的探索之旅,揭示Wasm和JS结合后为前端开发带来的无限可能性和挑战。