JS高级--HTTP协议
HTTP 简介
HTTP 全称“超文本传输协议”,HyperText Transfer Protocol,基于 TCP/IP 协议的一员。
TCP/IP 是一个协议群,TCP/IP 下面还有 FTP、Telnet 等。
HTTP 协议的主要特点
-
简单快速
-
无连接
-
无状态
如何标记网络资源
URI、URL、URN
URI:英语全称 Uniform Resource Identifier,翻译成中文就是“统一资源标志符”,这个只是一个抽象的概念,具体应该怎么进行标记?
通过 URN 和 URL。
URN:Uniform Resource Name,统一资源的命名,这个资源在互联网上面的名字
URN urn:isbn:0-395-36341-1
URL:Uniform Resource locator 统一资源定位,这个就是资源在互联网上面的定位
https://developer.mozilla.org https://developer.mozilla.org/en-US/docs/Learn/ https://developer.mozilla.org/en-US/search?q=URL

URL 详解
http://www.xiejie.com:8080/news/index.php?name=xiejie&age=18#name https://www.baidu.com https://gitee.com/xj89959853/f71/tree/master/%E8%AF%BE%E5%A0%82%E7%AC%94%E8%AE%B0 ftp://
-
http:协议部分,代表了我所使用的协议
-
www.xiejie.com:域名部分,也可以通过 IP 地址来进行访问。
-
8080:端口,浏览器默认就是80或者8080端口。
-
news/:这个代表虚拟目录
-
index.php:本次请求的具体文件
-
name=xiejie&age=18:代表此次请求带到服务器的参数
-
#name:锚部分或者 hash 部分
一个 URL,前面任何一个部分发生改变,都会导致重新发送 HTTP 请求,除开锚部分。
HTTP 请求
一个 HTTP 请求,包含 4 个部分。
-
请求行
-
请求头
-
空行
-
请求数据

下面是一个 GET 请求的示例:
GET /index.html?a=1&b=2 HTTP/1.1 Host: localhost.charlesproxy.com:3000 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8, application/signed-exchange;v=b3 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: _ga=GA1.2.448607888.1557887884; _gid=GA1.2.2022442462.1557887884 Connection: keep-alive
-
HOST :服务器的域名。
-
User-Agent :浏览器的浏览器身份标识字符串。
-
Accept:能够接受的回应内容类型( Content-Types )。
-
Accept-Encoding:能够接受的编码方式列表。
-
Accept-Language:能够接受的回应内容的自然语言列表。
-
Cookie:之前由服务器通过 Set- Cookie 发送的一个超文本传输协议 Cookie。
-
Connection:该浏览器想要优先使用的连接类型。
下面是一个 POST 请求的示例:
POST /users/login HTTP/1.1
Host: localhost.charlesproxy.com:3000
Content-Length: 43
Accept: application/json, text/plain, */*
Origin: http://localhost.charlesproxy.com:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://localhost.charlesproxy.com:3000/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: _ga=GA1.2.448607888.1557887884; _gid=GA1.2.2022442462.1557887884
Connection: keep-alive
{"username":"zhangsan","password":"111111"}
GET 请求和 POST 请求的区别:
-
传输数据的位置的区别
-
传输数据的大小:如果是 GET 请求,因为浏览器和服务器一般都对 URL 的长度有一定的限制,这也就意味着对GET请求的数据有一个限制,不同的浏览器,限制的大小不同。而 POST 请求,数据是放在请求体里面的,所以理论上是没有限制。
-
安全性:POST的安全性要比GET更高一些
HTTP 请求的方法
目前为止,我们知道两种HTTP请求方式:GET、POST
但是,从HTTP 1.1开始,新增了很多种请求方式:
-
DELETE
-
PUT
-
PATCH
-
...
HTTP 响应

和 HTTP 请求相同,HTTP响应也分为4个部分:
下面是一个HTTP响应的具体示例:
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
Server:Apache Tomcat/4.0-b1(HTTP/1.1Connector)
Conection:close
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
-
第一部分:响应行,由 HTTP 协议版本号,状态码,状态描述这 3 个部分组成。
该例子中 HTTP/1.1 表明 HTTP 版本为 1.1 版本,状态码为 200,状态消息为 OK
-
第二部分:消息报头,用来说明客户端要使用的一些附加信息。
该例子中第二行和第三行为消息报头。Date 代表生成响应的日期和时间;Content-Type 指定了 MIME类型是 HTML(text/html),编码类型是 UTF-8;Server 描述了服务器的版本信息;Conection 表示连接已经关闭。
-
第三部分:空行,消息报头后面的空行是必须的。
-
第四部分:响应正文,服务器返回给客户端的文本信息。空行后面的 html 部分为响应正文。
状态码
1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现 5xx:服务器端错误--服务器未能实现合法的请求
常见状态码如下:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
更多状态码的信息,可以参阅:https://www.runoob.com/http/http-status-codes.html

浙公网安备 33010602011771号