- 超文本传输协议(HyperText Transfer Protocol)是一种应用层协议。
- HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
- 请求request-响应response 式模式
Content-Type指示响应的内容
请注意,浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是http://www.baidu.com/meimei.jpg,它也不一定就是图片。
浏览器解析过程
当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。
1. HTTP协议特点
- 传输网页资源的协议
- 基于TCP协议实现的应用层协议
- 99年公布HTTP/1.1版本
- 请求request-响应response式
2. HTTP请求报文格式说明
- GET / HTTP/1.1
- 请求行 request line
- 请求方法 资源请求路径
- HTTP协议版本\r\n
- GET方法浏览器获取网页资源
- POST方法浏览器向服务器发送数据
请求行 后续都是请求头部[头名称: 头值\r\n]
- Host: itcastcpp.cn
- 代表 浏览器请求的主机名字
- Connection: keep-alive
- 代表长连接keep-alive 还是 短连接close方式
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) - - - - - Chrome/64.0.3282.186 Safari/537.36
- 代表 浏览器身份 网页适配 初步反爬
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
- 代表浏览器能够接受的 文件类型
- Accept-Encoding: gzip, deflate
- 可以接受的压缩方式 -- 节约带宽资源 提高文件的传输效率
- Accept-Language: zh-CN,zh;q=0.9
- 可以接受的语言文件
- 空行 \r\n
- 请求体
- GET方式请求 一般请求体为空
- POST方式请求 请求体中存储的就是 浏览器要发送给服务器的数据(图片 文件 用户数据)
3. HTTP请求报文总结
- 请求行[方法 资源请求路径 版本\r\n]
- 请求头[头名称: 头值\r\n]
- 空行 [\r\n]
- 请求体[浏览器要发送给服务器的数据]
4. HTTP请求数据的实例
GET / HTTP/1.1\r\nHost: 127.0.0.1:8888\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
X-Lantern-Version: 4.4.2\r\n
\r\n
5. HTTP响应数据实例-了解
HTTP/1.1 200 OK\r\n
Server: nginx/1.6.3\r\nDate: Sun, 11 Mar 2018 04:33:10 GMT\r\n
Content-Type: text/html\r\nContent-Length: 612\r\n
Last-Modified: Sat, 02 Sep 2017 15:23:27 GMT\r\n
Connection: keep-alive\r\nETag: "59aaccef-264"\r\n
Accept-Ranges: bytes\r\n
\r\n
<!DOCTYPE html>
\n<html>
\n<head>\n
<title>Welcome to nginx!</title>
\n<style>\n
body {
\n width: 35em;
\n margin: 0 auto;
\n font-family: Tahoma, Verdana, Arial, sans-serif;
\n }
\n</style>
\n</head>
\n<body>
\n<h1>Welcome to nginx!</h1>
\n<p>If you see this page, the nginx web server is successfully installed and\nworking. Further configuration is required.</p>\n
\n<p>For online documentation and support please refer to
\n<a href="http://nginx.org/">nginx.org</a>.<br/>\nCommercial support is available at
\n<a href="http://nginx.com/">nginx.com</a>.</p>\n
\n<p><em>Thank you for using nginx.</em></p>
\n</body>
\n</html>
\n