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类型是 HTMLtext/html),编码类型是 UTF-8Server 描述了服务器的版本信息;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

 

 

 

posted @ 2020-12-30 21:36  瓜豆のO泡  阅读(346)  评论(0)    收藏  举报