一:HTTP请求(Request)的结构
http请求由三部分组成,分别是:请求行、消息报头、请求正文
包括三个部分,请求方法(POST、GET、PUT 等)、URL、http版本号。三者之间用空格分开。最后有一个回车换行标志(CRLF)。
由若干个报头组成。每个报头的结构为:名字+“:”+空格+值。名字是大小写无关的。这些报头用来设置http请求的一些参数,例如host表示被请求资源的主机和端口号。host报头在请求时是必备的。
请求头部后面的空行是必须的,即使第四部分的请求数据为空,也必须有空行。 浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送
只在POST请求里用到,表示要上传的数据。数据体和头部之间有一行空行。
POST请求例子:
二:HTTP响应报文(Response)的结构
服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息;http响应报文:状态行、响应头部、响应正文。
三:常见的HTTP状态码
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码描述:
四:常见的http请求方法
- GET是最常用的方法,通常用于请求服务器发送某个资源。
- HEAD与GET类似,但服务器在响应中值返回首部,不返回实体的主体部分
- PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用干这个主体替代它
- POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。
- TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文。TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。
- OPTIONS方法请求web服务器告知其支持的各种功能。可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法。
- DELETE请求服务器删除请求URL指定的资源
GET方法与POST方法的区别:
1、get重点在从服务器上获取资源,post重点在向服务器发送数据;
2、get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
3、Get传输的数据量小,因为受URL长度限制,但效率较高;Post可以传输大量数据,所以上传文件时只能用Post方式
4、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;post较get安全性较高
5、get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码;post支持标准字符集,可以正确传递中文字符。
五:浏览器输入www.baidu.com会发生什么?主要过程:网络通信和页面渲染
- 当我们在浏览器上敲入一个url时, 浏览器首先接收该url的域名并分析是否符合URL标准,不符合的话,会交给搜索引擎
- 如果是正确的URL,那么浏览器会检索该主机的HOST列表,如果有该域名的IP的话,就万事大吉。否则发送域名给最近的DNS进行解析。DNS接收该域名后,先请求本地服务器缓存,如果本地服务器也没有该域名的IP的话,那么由本地服务器依次向上请求,根服务器,com服务器,百度服务器,直到找到baidu.com的IP地址
- DNS将域名对应的IP地址返回给浏览器
- 应用层浏览器客户端向IP地址所对应的的服务器发送请求数据(请求行为:GET http://www.baidu.com/HTTP/1.1)
- 传输层TCP传输请求报文,“三次握手”建立TCP连接,一般TCP连接的端口号是80
- 网络层IP协议查询MAC地址,IP协议的作用是把TCP分割好的各种数据包传送给接收方,而要保证报文确实能传到接收方还需要接收方的MAC地址,也就是物理地址。ARP协议可以将IP地址解析成对应的MAC地址
- 在找到对方的MAC地址后,就将数据发送到数据链路层传输。这时,客户端发送请求的阶段结束
- 接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在传输层通过TCP协议将分段的数据包重新组成原来的HTTP请求报文。
- 服务器响应请求,发回网页内容(响应状态行为:HTTP/1.1 200 OK)
- 客户端浏览器获取网页内容,解析HTML并进行渲染来显示在浏览器上。