HTTP协议

一、HTTP的基础

1.1 HTTP之URL

URL(Uniform Resource Locator ):统一资源定位符:是一种特殊类型的统一资源标识符(Identifier,URI),用来标识互联网某一处资源的地址。

URL的标准格式如下:协议://服务器域名[:端口] / 路径/ [?查询]

比如:http://www.baidu.com/sql-lab/?id=1

URL涉及的部分:

(1) 协议:在Internet中可以使用多种协议,如HTTP,HTTPS等。(://为分隔符)

(2) 服务器域名:该服务器域名为www.baidu.com,也可以使用IP地址来表示

(3) 端口:服务器域名后面的是端口,端口不是一个URL必须的部分,省略将会采用默认端口

(4) 路径:路径是在端口后面由零个或多个"/"隔开的字符串,一般用来表示主机上的一个目录或文件地址

(5) 查询:从"?"开始的部分为查询

1.2 HTTP请求

HTTP请求包括3部分,分别是请求行,请求头(消息报头)和请求正文

GET /Less-1/?id=1 HTTP/1.1                //请求行
Host: sql-lab                             //请求头
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

id=1                                      //请求正文

HTTP请求的第一行是请求行,包括请求方法,请求路径和协议版本

HTTP请求的第二行至空白行为HTTP请求中的请求头,包含有关客户端环境和请求正文的有用信息

请求头和请求正文之间是一个空行,这个空行表示请求头已经结束,接下来是请求正文,请求正文中可以包含客户端请求提交的查询字符串信息

1.3 HTTP响应

HTTP响应也是由3部分组成,分别是响应行,响应头(消息报头)和响应正文

HTTP/1.1 200 OK                                    //响应行
Date: Sun, 19 Sep 2021 12:52:17 GMT                //响应头
Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02
X-Powered-By: PHP/5.4.45
Connection: close
Content-Type: text/html
Content-Length: 660
                                                   //空白行以下是响应正文
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-1 **Error Based- String**</title>
</head>

HTTP第一行为响应行,由协议版本、状态码和状态消息3部分组成

HTTP响应第二行至空白行为响应头,用来传递不能放在响应行中的附加响应信息、关于服务器的信息和对Request-URI所标识的资源不能放在响应行中的附加响应信息

响应头之后是响应正文,是服务器返回给客户端的文本信息

1.4 HTTP状态码

客户端发出的HTTP请求,服务器接收到请求,会返回一个包含HTTP状态码的信息头,以响应浏览器的请求

HTTP状态码由一个3位的十进制数字组成,第一位数字定义了状态码的类型,后两位无分类的作用

5种HTTP状态码
分类分类描述
1XX信息,服务器收到请求,需要的请求者继续执行操作
2XX成功,操作被成功接收并处理
3XX重定向,需要进一步操作以完成请求
4XX客户端错误,请求包含语法错误或无法完成请求
5XX服务端错误,服务器在处理请求的过程中发生了错误
常见的HTTP状态码
状态码状态描述说明
200OK客户端请求成功
301Moved Permanently永久移动,请求的资源已被永久移动到新的URI,返回信息会包括新的URI,浏览器会自动定向到新的URI
302Found临时移动。与301类似。但资源只是临时移动。客户端应继续使用原有URI
400Bad Request客户端错误,请求包含语法错误或无法完成请求
401Unauthorized请求要求用户的身份认证
403Forbidden服务端理解客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)
500Internal Server Error服务器内部错误,无法完成请求
503Service Unavailable由于超载或系统维护,服务器暂时无法处理客户端的请求

1.5 HTTP请求方法

HTTP1.0 定义了3个请求方法:GET,HEAD和POST方法

HTTP 1.1 新增了5个请求方法:PUT,DELETE,CONNECT,OPTIONS和TRACE方法

请求方法如下表所示:

HTTP请求方法
请求方法描述
GET请求指定的页面信息,并返回实体主体
HEAD与GET请求相似,但是只返回响应行和响应头,不返回响应正文
POST向指定资源提交数据以处理请求(列如:提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT从客户端向服务器传送数据并进行存储或替换
DELETE请求删除服务器指定的页面
CONNECTHTTP 1.1 协议中预留给能够链接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试或诊断

GET和POST方法都可以获取指定网页的内容,但两者传参方式区别:

区别一:GET方法没有请求正文,而POST方法有请求正文

区别二:GET方法请求数据有长度限制,而POST方法请求数据没有长度限制

区别三:GET方法会在浏览器中显示请求的数据;而POST方法不会在浏览器中显示请求的数据

1.6 HTTP请求头

HTTP请求头包含许多有关的客户端环境和请求正文的有用信息

常见的的HTTP请求头:

Host:请求的Web服务器域名或者IP地址

User-Agent:HTTP客户端运行的浏览器类型的详细信息。通过该信息,Web服务器可以判断出当前HTTP请求的客户端浏览器类别

Accept:指定客户端能够接收的内容类型,内容类型的先后次序表示客户端接收的先后次序

Accept-Language:指定HTTP客户端浏览器用来展示返回信息所优先选择的语言

Cookie:HTTP请求发送时,会把保存在该请求域名下的所有Cookie值一起发送给Web服务器

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面

GET /Less-2/?id=1 HTTP/1.1
Host: sql-lab
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

1.7 HTTP响应头

HTTP响应头中包含服务器在传递过程中不能放在响应行中的附加响应信息,相关服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

Localhost:控制浏览器重定向到哪个页面

Server:服务器的Banner信息

Set-Cookie:服务器发送给客户端的Cookie设置信息

Cache-Control:服务器控制浏览器是否要缓存网页

HTTP/1.1 200 OK
Date: Sun, 19 Sep 2021 14:06:00 GMT
Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02
X-Powered-By: PHP/5.4.45
Connection: close
Content-Type: text/html
Content-Length: 669

二、 Cookie和Session

1、cookie

HTTP本身是无状态的,不能保存服务端和客户端的状态信息。

在特定的情况下,服务器需要记住或者识别用户,为此引入了Cookie和Session的概念、

HTTP请求+Cookie交互过程:

(1)浏览器—————>HTTP请求和用户认证信息—————>服务端

        服务端对用户认证信息验证,成功生成Cookie信息

(2)浏览器<—————HTTP响应+set-cookie<——————-服务端

        浏览器提取并存储Cookie信息到内存中

(3)浏览器—————>HTTP请求+已认证的Cookie————>服务端

        服务端解析Cookie,获取客户端相关信息

(4)浏览器————>HTTP 响应(需要身份认证信息才能访问)——>服务端
 

Cookie属性:

属  性  名

描    述

String name

该Cookie的名称。Cookie一旦创建,名称便不可更改

Object value

该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码

int maxAge

该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1

boolean secure

该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false

String path

该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”

String domain

可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”

String comment

该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明

int version

该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范

服务端发送Cookie给客户端:是对应的set-cookie,包括对应的Cookie名称,值以及各属性

Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; Expires=Tue, 15 Jan 2013 21:47:38 GMT; Path=/; Domain=.169it.com; HttpOnly

Set-Cookie: made_write_conn=1295214458; Path=/; Domain=.169it.com

客户端发送cookie到服务端:只包含各属性的值

GET /spec.html HTTP/1.1  

Host: www.example.org  

Cookie: name=value; name2=value2  

Accept: */*  

设置cookie:设置user的Cookie,赋值为test,过期时间为1H

<?php
setcookie("user","test","time()+3600);
?>

JavaScript操作Cookie:

Cookie是保存在浏览器端的,因此浏览器具有操作Cookie的先决条件。浏览器可以使用脚本程序如JavaScript或者VBScript等操作Cookie。

<script>document.write(document.cookie);</script>

2、session

Session是服务器端使用的一种记录客户端状态的机制

Session保存在服务器上。客户端浏览器访问服务器的时候,服务端把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了

Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。 Session也是一种key-value的属性对

当多个客户端执行程序时,服务器会保存多个客户端的Session。获取Session的时候也不需要声明获取谁的Session。Session机制决定了当前客户只会获取到自己的Session,而不会获取到别人的Session。各客户的Session也彼此独立,互不可见。

下一篇:SQL注入(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值