今天来整理下关于http的请求与响应
http请求
我们在访问一个网页时,都会发什么数据给服务器呢?下面以访问百度首页为例,我们在在浏览器中输入:www.baidu.com, 此时请求的内容包括:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0(这里表示我用的什么软件发起的响应)
(User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36)
Accept: * / *(这里表示我接受你返回过来的任何内容)
http请求最多包含四个部分最少包含三个部分。
-
第一部分:
方法 路径 协议/版本
-
共有8种方法如: GET(获取), POST(上传), PUT(更新), DELETE(删除),PATCH(局部更新), HEAD, OPTIONS, TRACE, CONNECT
-
路径包括查询参数,但是不包括锚点,因为查询参数是给服务器的而锚点是给浏览器看的。路径一定是要以'/' 开头,如果没有写路径,那么会默认为'/'。
-
协议/版本号 如http/1.1
-
-
第二部分
格式为:key : value
如:
Host: www.baidu.com User-Agent: curl/7.54.0 Accept: */* Content-Length: 10(上传的数据的长度) Content-Type: application(/x-www-form-urlencoded(上传的数据的格式) (application:表示应用数据 www:万维网 from:表单 urlencoded:用urlencoded将数据压缩一下)你可以把任何想要告诉服务器的信息,都放在这里,以key:value的格式。第2部分的 Content-Type标注了第四部分的格式
-
第三部分
!!注意:第三部分是个回车,必须要有,是为了让服务器知道第四部分与第二部分的分界点
-
第四部分
第四部分就是要上传的数据,如用户名和密码,头像,昵称 等等。第四部分也可以是空的。
用Chrome开发者工具查看 HTTP 请求内容
- 打开浏览器进入百度主页
- 右键点击检查,再点击Network
- 在百度主页地址栏中输入https//www.baidu.com,回车
- 点击第一个请求,此时在右边的框内找到Request Headers,点击小箭头使其数据展开,然后点击右边的 view source,此时,所有的请求内容就一览无余了。
- 点一下浏览器上的Preserve log这样可以观察到请求,而不会因为页面刷新掉看不到请求记录
http响应
浏览器向服务器请求了之后,服务器会给予一个响应,那么响应的格式是怎么样呢?
响应分为四个部分
-
第一部分
协议/版本号 状态码 状态解释
状态码:
2xx -请求成功 3xx - 请求的资源改变了位置 4xx - 浏览器请求出错了,如语义错了,参数错了等 5xx - 服务器出错了 -
第二部分
格式为: key : value
Content-Length: 198 Content-Type: text/html ......Content-Type 标注了第 4 部分的格式,遵循 MIME 规范
-
第三部分
回车
-
第四部分
要下载的内容,这部分可以很长很长很长(注意!!!: 返回的都是字符串,不是对象,也不是json,后台是无法返回对象给前端的,只能是字符串)
用Chrome开发者工具查看 HTTP 响应内容
- 打开浏览器进入百度主页
- 右键点击检查,再点击Network
- 在百度主页地址栏中输入https//www.baidu.com,回车
- 点击第一个请求,此时在右边的框内找到Response Headers,点击小箭头使其数据展开,然后点击右边的 view source,此时,所有的响应内容就一览无余了。第四部分在Response中。
命令curl的使用方法
curl是利用URL语法在命令行方式下工作的开源文件传输工具。 利用 curl命令可以向服务器发起请求。
如:curl -s -v -- "https://www.baidu.com/s?wd=java"
请求信息
GET /s?wd=java HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.43.0
Accept: */*
响应信息
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 227
.....后面还有很多就不拷贝了
也可以加入请求方法
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"
GET & POST
get:获取内容
post: 上传内容
get在请求的时候也可以很多数据,但是一般服务器不会接收,服务器会觉得你来我这里拿东西还给我送东西,哪有这么好,一般不会这样子。拿东西的时候就好好拿东西,不要拿东西又上传东西