利用终端telnet命令发送一个请求
请求报文
组成结构(必会,面试常问)
请求行、请求头部、空行、请求数据
常用的headers字段(必会,面试常问)
Host(主机和端口号)
- Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。
Connection(链接类型)
Client 发起一个包含 Connection:keep-alive 的请求,HTTP/1.1使用 keep-alive 为默认值。
Server收到请求后:
如果 Server 支持 keep-alive,回复一个包含 Connection:keep-alive 的响应,不关闭连接;
如果 Server 不支持 keep-alive,回复一个包含 Connection:close 的响应,关闭连接。
如果client收到包含 Connection:keep-alive 的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。
User-Agent(浏览器名称)
Accept(传输文件类型)
- Accept: */*:表示什么都可以接收。
- Accept:image/gif:表明客户端希望接受GIF图像格式的资源;
- Accept:text/html:表明客户端希望接受html文本。
Accept: text/html, application/xhtml+xml;q=0.9, image/*;q=0.8:表示浏览器支持的 MIME 类型分别是 html文本、xhtml和xml文档、所有的图像格式资源。
q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容。若没有指定q值,则默认为1,按从左到右排序顺序;若被赋值为0,则用于表示浏览器不接受此内容类型。
Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
Application:用于传输应用程序数据或者二进制数据。
Referer(页面跳转处)
- Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
- 有时候遇到下载某网站图片,需要对应的referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据referer去判断是否是本网站的地址,如果不是,则拒绝,如果是,就可以下载;
Accept-Encoding(文件编解码格式)
- 指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。
Accept-Language(语言种类)
- 指出浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。
Accept-Charset(字符编码)
- 指出浏览器可以接受的字符编码。
Cookie
- 浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能
Content-Type(POST数据类型)
- 举例:Content-Type = Text/XML; charset=gb2312:
- 指明该请求的消息体中包含的是纯文本的XML类型的数据,字符编码采用"gb2312"
响应报文
组成结构(必会,面试常问)
状态行、消息报头、空行、响应正文
常用的headers字段(了解)
常见的状态码(必会,面试常问)
常用的请求方法
至少能说出来五种,熟练掌握get/post
GET/POST的区别(笔试题/面试题常考)
参数位置
get请求的参数位于url后,post请求的参数位于body中
安全性
post相对get安全,但是两者都不安全,好比5块的锁和10块的锁,安全性有差异但是差的不多
数据长度
get请求的数据长度取决于浏览器,通常是2k左右,post请求的数据长度理论上没有限制,实际取决于服务器的性能
使用场景
GET是从服务器上获取数据,POST是向服务器传送数据
注意
以上结论都是流行的说法,实际上协议中并没有规定位置/安全性/长度等要求
HTTP/HTTPS/SSL(必须知道中文表示)
- HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。
- 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本
- HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。
- SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。
端口(常识,必会)
- HTTP的端口号为80,例如http://www.baidu.com:80
- HTTPS的端口号为443,例如https://www.baidu.com:443
- 邮箱端口为25
- 数据库的端口为3306
- 微信的端口为80
浏览器发送请求的过程(能够按照自己的理解说出流程)
- 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
- 当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
- 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
- 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
代理工具
- Fiddler(功能更多)
- charles(操作简单)
安装好以后挑选其中一个软件进行网页抓包演示