1、请求头
- Accept:浏览器可以接受的文件类型(application/json JSON格式、text/plain纯文本格式、text/html HTML文本、* / * 所有格式),如果没有Accept请求头,相当于* / *。
- Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。(Accept-Encoding: compress, gzip)
- Accept-Charset:浏览器可以接受的字符编码集。(Accept-Charset: iso-8859-5)
- Accept-Language:浏览器可接受的语言。(Accept-Language: en,zh)
- Authorization:HTTP授权的授权证书。(Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==)
- Connection:表示是否需要持久连接,HTTP 1.1默认进行持久连接。(Connection: close, keep-alive)
- Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。(Cookie: $Version=1; Skin=new;)
- Content-Length:请求的内容长度。(Content-Length: 348)
- Content-Type:请求的与实体对应的MIME信息。(Content-Type: application/x-www-form-urlencoded)
- Cache-Control:指定请求和响应遵循的缓存机制。(Cache-Control: no-cache)
- User-Agent:User-Agent的内容包含发出请求的用户信息。(User-Agent: Mozilla/5.0 (Linux; X11))
想要特别说明其中的cookie。
- 因为HTTP协议本身是无状态的,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同。
- 如果想要服务器记住用户的身份,就可以在HTTP中使用Cookie,Cookie表示在HTTP服务器和客户端之间传递的状态信息。
- Cookie的工作:当用户A浏览某个使用Cookie的网站时,该网站的服务器就为A产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在A的HTTP响应报文中添加一个叫作Set-cookie的首部行(这里的“首部字段名”就是Set-cookie,而后面的值就是赋予该用户的“识别码”),当A收到这个响应式,其浏览器就在它管理的特定Cookie文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面给的识别码,当A继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中。于是,这个网站就能够跟踪用户A在该网站的活动,需要注意的是,服务器并不知道这个用户的真实姓名以及其他信息,但服务器能够知道用户A在什么时间访问了哪些页面,以及访问这些页面的顺序。
请求方式:
1、GET
- 从指定的资源请求数据
- 查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制(URL 的最大长度是 2048 个字符)
- GET 请求只应当用于取回数据
- 编码类型:application/x-www-form-urlencoded
- 对数据类型的限制:只允许 ASCII 字符
2、POST
- 向指定的资源提交要被处理的数据
- 查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求
- 编码类型:application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
- 对数据类型的限制:没有限制,也允许二进制数据
2、响应头:
- Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求。(Accept-Ranges: bytes)
- Allow:对某网络资源的有效的请求行为,不允许则返回405。(Allow: GET, HEAD)
- Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。(Cache-Control: no-cache)
- Content-Encoding:web服务器支持的返回内容压缩编码类型。( Content-Encoding: gzip)
- Content-Language:响应体的语言。( Content-Language: en,zh)
- Content-Length:响应体的长度。(Content-Length: 348)
- Content-Location:请求资源可替代的备用的另一地址。(Content-Location: /index.htm)
- Content-MD5:返回资源的MD5校验值。(Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==)
- Content-Type:返回内容的MIME类型。(Content-Type: text/html; charset=utf-8)
状态码:状态代码为3位数字。
- 1xx:指示信息–表示请求已接收,继续处理。
- 2xx:成功–表示请求已被成功接收、理解、接受。
- 3xx:重定向–要完成请求必须进行更进一步的操作。
- 4xx:客户端错误–请求有语法错误或请求无法实现。
- 5xx:服务器端错误–服务器未能实现合法的请求。
HTTP连接的两种类型
- 持久性连接:每个TCP连接最多允许传输一个对象。
- 非持久性连接:每个TCP连接允许传输多个对象。
假设用户在浏览器中输入URL(www.someSchool.edu/someDepartment/home.index),接下来的过程如下:
- HTTP客户端向地址为www.someSchool.edu的服务器上的HTTP服务器进程(端口80)发起TCP连接请求。
- HTTP服务器在端口80等待TCP连接请求,接收连接请求并通知客户端。
- HTTP客户端将HTTP请求消息(包含URL地址)通过TCP连接的套接字发出。
- HTTP服务器收到请求消息,解析,产生包含所需要对象的响应消息,并通过套接字发给客户端。
- 如果是非持久性连接,这个时候HTTP服务器就会关闭TCP连接。然后,HTTP客户端收到响应消息,解析html文件,显示html文件,发现有10个指向.jpeg对象的超链接,那么将会为每个.jpeg对象重复1~5步骤。
每个对象需要2个RTT,操作系统需要为每个TCP连接开销资源。
浏览器会怎么做?打开多个并行的TCP连接以获取网页所需对象。
- 如果是持久性连接,发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送。
这里的持续连接又分为:
无流水的持久性连接:客户端只有收到前一个响应后才发送新的请求。每个引用的对象耗时1个RTT。
带有流水机制的持久性连接(HTTP1.1默认):客户端只要遇到一个引用对象就尽快发出请求。理想情况下,收到所有的引用对象只需消耗时约1个RTT。