HTTP请求与响应

状态码

请求与响应
参考菜鸟教程资料
什么是HTTPS

Server + Client + HTTP

  • 浏览器负责发起请求
  • 服务器在 80 端口接收请求
  • 服务器负责返回内容(响应)
  • 浏览器负责下载响应内容

HTTP 的作用就是指导浏览器和服务器如何进行沟通。
资料:菜鸟教程 - 学习HTTP

重点 面试题

  1. 请求包括 GET(获取) POST(上传) PUT(整体更新) PATCH(局部更新) DELETE(删除) HEAD OPTIONS等
  • 能够手写http请求,能够手写http响应
  • Content-Type: application/x-www-form-urlencoded : 应用数据/还没有写入规范的格式-万维网-表单-用urlencode形式压缩
  • 知道状态码的含义:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    200 OK:GET时返回,表示响应成功
    201 created:POST时返回,表示创建成功
    301 Moved Permanently:请求的资源已被永久的移动到新URI
    302 Found:请求的资源被临时移走了
    304 未修改Not Modified:所请求的资源未修改,使用缓存的文档
    404 Not Found :无法找到这个网页
    403 Forbidden :服务器拒绝执行此请求
    500 Internal Server Error:服务器内部错误,无法完成请求
    502 Bad Gateway :充当网关或代理的服务器,从远端服务器接收到了一个无效的请求(比如服务器关了)

HTTP请求

发起GET请求

  • 命令行执行curl -s -v -- "https://www.baidu.com"
    请求内容为:
    1
    2
    3
    4
    GET / HTTP/1.1
    Host: www.baidu.com
    User-Agent: curl/7.54.0
    Accept: */*

发起POST请求

  • 命令行执行curl -X POST -s -v -- "https://www.baidu.com"
    请求内容为:
    1
    2
    3
    4
    POST / HTTP/1.1
    Host: www.baidu.com
    User-Agent: curl/7.54.0
    Accept: */*

发起带data的POST请求

  • 命令行执行curl -X POST -d "1234567890" -s -v -- "https://www.baidu.com"
    请求内容为:
    1
    2
    3
    4
    5
    6
    7
    8
    POST / HTTP/1.1
    Host: www.baidu.com
    User-Agent: curl/7.54.0
    Accept: */*
    Content-Length: 10
    Content-Type: application/x-www-form-urlencoded
    1234567890

请求的格式

1
2
3
4
5
6
7
8
9
1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据
  1. 请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
  • 第三部分永远都是一个回车(\n,作为第2部分与第4部分的分界线
  • 动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
  • 这里的路径可以包括「查询参数」,但不包括「锚点」比如GET /s?wd=javascript HTTP/1.1
  • 如果你没有写路径,那么路径默认为 / :GET / HTTP/1.1
  • 第 2 部分中的 Content-Type 标注了第 4 部分的格式

用 Chrome 发请求

  1. 打开 Network
  • 地址栏输入网址
  • 在 Network 点击,查看Headers里的 Request Headers,点击「view source」就可以看到请求内容
  • 如果是POST请求,要点Preserve log防止刷新页面后丢失,此时就有第四部分,那么在 FormData 或 Payload 里面可以看到

响应

上面三个请求示例,前两个请求对应的响应分别为

对GET的响应

用GET请求百度首页后的响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:14:05 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<!DOCTYPE html>
<!--STATUS OK--><html> <head> 后面太长,省略了……

对POST的响应

用POST请求百度首页后的响应:

1
2
3
4
5
6
7
8
9
10
11
HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:19:47 GMT
Etag: "54d9749e-460b"
Server: bfe/1.0.8.18
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 后面太长,省略了……

  1. GET 请求和 POST 请求对应的响应可以一样,也可以不一样
  2. 响应的第四部分可以很长很长很长

响应的格式

1
2
3
4
5
6
7
1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
  • 状态码要背,是服务器对浏览器说的话

    1
    2
    3
    4
    5
    1xx 不常用
    2xx 表示成功
    3xx 表示重定向
    4xx 表示你丫错了(客户端错误)
    5xx 表示好吧,我错了(服务端错误)
  • 状态解释没什么用

  • 第 2 部分中的 Content-Type 标注了第 4 部分的格式
  • 第 2 部分中的 Content-Type 遵循 MIME 规范

用 Chrome 查看响应

  1. 打开 Network
  • 输入网址
  • 选择Headers
  • 查看 Response Headers,点击「view source」
  • 你会看到响应的前两部分
  • 查看 Response 或者 Preview,你会看到响应的第 4 部分

总结

http请求与响应的格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
GET 请求
GET / HTTP/1.1 //GET /?w=xxx HTTP/1.1 查询参数为?w=xxx
Host: baidu.com
Accept: text/html //请求html格式的文件
响应
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8 //响应给我html文件
Content-Length: 10000
<!DOCTYPE> //html格式的文件
<html>......</html>
--------------------------
POST 请求
POST /login?w=xxx HTTP/1.1
Host: baidu.com
Accept: application/json //请求一个json格式的页面
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
username=fangfang&password=mima
响应
HTTP/1.1 403 Forbidden
Content-Type: application/json //返回json格式
Content-Length: 200
{"erroc":"错误"} //返回json文件

比喻版

1
2
3
4
5
6
7
8
9
10
11
12
13
工资请求
GET 11月工资 工资协议/1.1
Host: 百度公司
Accept: 现金 (or 支付宝转账, or 银行汇款)
工资响应
工资协议/1.1 200 OK
类型: 现金
现金张数: 10
10000

https

HTTP缺点:通信不加密内容会被窃听

不验证通信方的身份,遭遇伪装

无法证明报名完整性,可能回被篡改

所以引入HTTPS

HTTP+加密+认证+完整性保护=HTTPS

-------------本文结束感谢您的阅读-------------