【Javaweb】HTTP协议

目录

一、认识HTTP

二、理解 HTTP 协议的工作过程

三、抓包工具的使用

四、HTTP 请求 (Request)

1,认识 URL

2,认识 "方法" (method)

2,认识请求 "报头" (header)

3,认识请求 "正文" (body)

五、HTTP 响应详解

1,认识 "状态码" (status code)

2,认识响应 "报头" (header)

3,认识响应 "正文" (body)


一、认识HTTP

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议

HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP 实现)

我们平时打开一个网站, 就是通过 HTTP 协议来传输数据的.

所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据

二、理解 HTTP 协议的工作过程

当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收 到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.

三、抓包工具的使用

以 Fiddler 为例. (下载地址: https://www.telerik.com/fiddler/)

左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.

右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)

右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)

请求和响应的详细数据, 可以通过右下角的 View in Notepad 通过记事本打开.

抓包工具的原理

浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器.

四、HTTP 请求 (Request)

1,认识 URL

URL 基本格式

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:
1、协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2、域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3、端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80

4、虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

URL 中的可省略部分

协议名: 可以省略, 省略后默认为 http:// ip 地址 /

域名: 在 HTML 中可以省略(比如 img, link, script, a 标签的 src 或者 href 属性). 省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致.

端口号: 可以省略. 省略后如果是 http 协议, 端口号自动设为 80; 如果是 https 协议, 端口号自 动设为 443.

带层次的文件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问 /index.html 查询字符串: 可以省略

片段标识: 可以省略

2,认识 "方法" (method)

方法 GET
GET 获取资源
POST 传输实体主体
PUT 传输文件
HEAD 获取报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
LINK 建立和资源之间的联系
UNLINE 断开连接关系

GET 方法

使用 Fiddler 观察 GET 请求

GET https://www.sogou.com/ HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Microsoft Edge";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-Dest: document
Referer: https://www.baidu.com/link?url=bAC5tIdytpdzkSnR83D-OPUYrzUkAENbmCkeTYVVRAm&wd=&eqid=d99bc9f2000266dc000000056222d4a9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: ABTEST=0|1646446675|v17; IPLOC=CN6101; SUID=D7C0146F5053A00A000000006222C853; SUV=1646446674969299; browerV=3; osV=1; SNUID=2D39EE96F9FC2095B8BDD401FA80A1C5; ld=Ekllllllll2Aw7AXlllllpwAh3tlllllbeFlCZllll9lllllxylll5@@@@@@@@@@

GET 请求的特点

        首行的第一部分为 GET

        URL 的 query string 可以为空, 也可以不为空.

        header 部分有若干个键值对结构.

        body 部分为空.

POST 方法

POST https://edu.bitejiuyeke.com/tms/login HTTP/1.1
Host: edu.bitejiuyeke.com
Connection: keep-alive
Content-Length: 117
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Microsoft Edge";v="98"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62
Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS
Content-Type: application/json;charset=UTF-8
Access-Control-Allow-Origin: *
Accept: application/json, text/plain, */*
Access-Control-Allow-Headers: Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild
sec-ch-ua-platform: "Windows"
Origin: https://edu.bitejiuyeke.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://edu.bitejiuyeke.com/login
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: sidebarStatus=0

{"username":"15891231617","password":"lGe6FxOtNMr9dzgqTzXsjA==","uuid":"e96cee90b84240deb7c2aef69e99183f","status":0}

POST 请求的特点

首行的第一部分为 POST

URL 的 query string 一般为空 (也可以不为空)

header 部分有若干个键值对结构.

body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由 header 中的 Content-Length 指定.

GET 和 POST 的区别

        语义不同: GET 一般用于获取数据, POST 一般用于提交数据

        GET 的 body 一般为空, 需要传递的数据通过 query string 传递, POST 的 query string 一般 为空, 需要传递的数据通过 body 传递

        GET 请求一般是幂等的, POST 请求一般是不幂等的. (如果多次请求得到的结果一样, 就视为 请求是幂等的).

        GET 可以被缓存, POST 不能被缓存. (这一点也是承接幂等性).

2,认识请求 "报头" (header)

header 的整体的格式也是 "键值对" 结构,每个键值对占一行. 键和值之间使用分号分割.

Host

表示服务器主机的地址和端口

Content-Length

表示 body 中的数据长度.

Content-Type

表示请求的 body 中的数据格式

User-Agent (简称 UA)

表示浏览器/操作系统的属性. 形如

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36

Referer

表示这个页面是从哪个页面跳转过来的. 形如

www.baidu.com

如果直接在浏览器中输入URL, 或者直接通过收藏夹访问页面时是没有 Referer 的

Cookie

Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服 务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据).

3,认识请求 "正文" (body)

响应的正文来说,最常见的数据格式就是HTML,表示一个网页的具体内容

五、HTTP 响应详解

1,认识 "状态码" (status code)

200 OK

这是一个最常见的状态码, 表示访问成功

404 Not Found

没有找到资源.

403 Forbidden

表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.

302 Move temporarily

临时重定向,就相当于手机号码中的 "呼叫转移" 功能

状态码小结

类别 原因语句
1XX 信息状态码 接受的请求正在处理
2XX 成功状态码 请求正常处理完毕
3XX 重定向状态码 需要进行附加操作以完成请求
4XX 客户端错误状态码 服务器无法处理请求
5XX 服务器错误状态码 服务器处理请求错误

2,认识响应 "报头" (header)

应报头的基本格式和请求报头的格式基本一致

Content-Type

text/html : body 数据格式是 HTML

text/css : body 数据格式是 CSS

application/javascript : body 数据格式是 JavaScript

application/json : body 数据格式是 JSON

3,认识响应 "正文" (body)

正文的具体格式取决于 Content-Type

猜你喜欢

转载自blog.csdn.net/qq_50156012/article/details/123289431