出现HTTP Status 400大多是因为,jsp的form表单提交的字段类型和后台接收字段类型不匹配造成的(例如,form中为String,后台接收为Date)

Java与Http协议

引言                                         
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。HTTP协议的主要特点是:

[html] view plain copy
  1. 1.支持客户/服务器模式。
  2. 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,通信速度很快。
  3. 3.灵活:HTTP允许传输任意类型的数据对象。类型由Content-Type加以标记。
  4. 4.无连接:即每次连接只处理一个请求,处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. 5.无状态:无状态是指协议对于事务处理没有记忆能力。

http1.0协议默认的是非持久连接, HTTP1.1默认的连接方式为持久连接。
非持久连接: 每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他对象。每个TCP连接只用于传输一个请求消息和一个响应消息。

持久连接:服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。HTTP/1.1的默认模式使用带流水线的持久连接。

一、HTTP协议详解之请求

[java] view plain copy
  1. //请求行
  2. POST /reg.jsp HTTP/ (CRLF)
  3. //消息报头
  4. Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
  5. Accept-Language:zh-cn (CRLF)
  6. Accept-Encoding:gzip,deflate (CRLF)
  7. If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
  8. If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
  9. User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
  10. Host:www.guet.edu.cn (CRLF)
  11. Connection:Keep-Alive (CRLF)
  12. (CRLF)
  13. //请求正文
  14. user=jeffrey&pwd=1234

以上是http请求的三部:请求行、消息报头、请求正文。
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
Method Request-URI HTTP-Version CRLF其中 Method表示请求方法(如POST、GET、PUT、DELETE等);Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行。

二、HTTP协议详解之响应篇

[html] view plain copy
  1. //状态行
  2. HTTP/1.1 200 OK (CRLF)
  3. //消息报头
  4. Cache-Control: private, max-age=30
  5. Content-Type: text/html; charset=utf-8
  6. Content-Encoding: gzip
  7. Expires: Mon, 25 May 2009 03:20:33 GMT
  8. Last-Modified: Mon, 25 May 2009 03:20:03 GMT
  9. Vary: Accept-Encoding
  10. Server: Microsoft-IIS/7.0
  11. X-AspNet-Version: 2.0.50727
  12. X-Powered-By: ASP.NET
  13. Date: Mon, 25 May 2009 03:20:02 GMT
  14. Content-Length: 12173
  15. //响应正文

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
常见状态代码、状态描述、说明:

[html] view plain copy
  1. 200 OK      //客户端请求成功
  2. 400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
  3. 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
  4. 403 Forbidden  //服务器收到请求,但是拒绝提供服务
  5. 404 Not Found  //请求资源不存在,eg:输入了错误的URL
  6. 500 Internal Server Error //服务器发生不可预期的错误
  7. 503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

三、HTTP协议详解之消息报头

HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行;对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。
1、请求报头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
常用的请求报头

[html] view plain copy
  1. Accept请求报头域用于指定客户端接受哪些类型的信息。
  2. Accept-Charset请求报头域用于指定客户端接受的字符集。
  3. Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。
  4. Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。
  5. Authorization请求报头域主要用于证明客户端有权查看某个资源。

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
2、响应报头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
常用的响应报头

[html] view plain copy
  1. Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
  2. Server响应报头域包含了服务器用来处理请求的软件信息

3. 实体报头
请求和响应消息都可以传送一个实体。
常用的实体报头

[html] view plain copy
  1. Content-Encoding指示已经被应用到实体正文的附加内容的编码。
  2. Content-Language实体报头域描述了资源所用的自然语言。
  3. Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
  4. Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。
  5. Last-Modified实体报头域用于指示资源的最后修改日期和时间。
  6. Expires实体报头域给出响应过期的日期和时间。

四、补充

1、HTTP协议Content Lenth限制漏洞导致拒绝服务攻击
使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,例如ContentLenth:999999999,在传送完成前,内 存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。这种攻击方法基本不会留下痕迹。
2、为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。HTTP1.1中提供了这种持续连接的方式,而下一代HTTP协议:HTTP-NG更增加了有关会话控制、丰富的内容协商等方式的支持,来提供更高效率的连接。

五.Java利用HTTP协议实现联网和下载

Url的请求连接(Get方式)

[html] view plain copy
  1. String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的内容为HTTP请求的正文
  2. URL url = new URL(currentUrl);
  3. HttpURLConnection httpurlconnection = url.openConnection();
  4. //下面的设置对应HTTP请求中的消息报头
  5. httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent);
  6. httpurlconnection.setRequestProperty("Accept",CommonValues.Accept);
  7. httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset);
  8. httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language);
  9. httpurlconnection.setRequestProperty("Connection",CommonValues.Connection);
  10. httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive);
  11. httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut);
  12. httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut);
  13. httpurlconnection.connect();
  14. int responsecode = httpurlconnection.getResponseCode();
  15. if(responsecode == HttpURLConnection.HTTP_OK) //对应HTTP响应中状态行的响应码
  16. {
  17.   //操作请求流,这里对应HTTP响应中的响应正文
  18. }
  19. if (httpurlconnection != null)
  20. {
  21. httpurlconnection.disconnect();
  22. }

HTTP Status 400相关推荐

  1. Nginx+Tomcat负载均衡访问网页出现报错HTTP Status 400 – 错误的请求

    小故障 今天在搭建Nginx反向代理两个Tomcat站点负载均衡访问网页出现了400的网页报错. HTTP Status 400 – 错误的请求 故障原因 问题出在了nginx主配置文件中给后端tom ...

  2. feign消费时,如果传入参数过长,会导致feign.FeignException: status 400 reading错误

    抛出异常: feign.FeignException: status 400 reading ProjectFeignClient#getPartsByNodes(String,List) 原因: 查 ...

  3. HTTP Status 400,400 (Bad Request)

    400 (Bad Request) 点击添加按钮转跳没反应,控制台没报错,然后在Chrome上检查发现报错了 百度了一下,发现http Status 400这个错误大多是因为,jsp的form表单提交 ...

  4. {ResponseInfo:com.qiniu.http.Response@62bd765,status:400, reqId:d4kAAACMt2hWMSEW, xlog:X-Log, xvia:,

    {ResponseInfo:com.qiniu.http.Response@62bd765,status:400, reqId:d4kAAACMt2hWMSEW, xlog:X-Log, xvia:, ...

  5. http status 400,http 400,400 错误

    4 请求失败4xx 4xx应答定义了特定服务器响应的请求失败的情况.客户端不应当在不更改请求的情况下重新尝试同一个请求.(例如,增加合适的认证信息).不过,同一个请求交给不同服务器也许就会成功. 4. ...

  6. 亚马逊后台网页提示HTTP Status 400 – Bad Request无法登陆的解决办法

    在后台操作的时候,无意中点了一个什么库存限制的对话框叉叉,再打开的时候浏览器老是提示 HTTP Status 400 – Bad Request 以为是亚马逊网站或电脑网络问题,可是其他网站和亚马逊主 ...

  7. “status“: 400, “error“: “Bad Request“,

    错误描述: HTTP Status 400 – Bad Request Type Status Report 错误原因一: 通过测试接口工具或者前台form表单提交数据到后台,前后数据类型要保持一致, ...

  8. HTTP Status 400 (HTTP400状态码)

    异常信息记录_2019-11-16 HTTP Status 400 – 错误的请求 前两天写了一个关于时间格式转换的400错误的请求的博客,给公司的大佬看了一下,被吐槽--特此修改一下. 1.问题分析 ...

  9. HTTP Status 400 - Required String parameter '/q' is not present

    今天在敲项目的时候遇到了这样的问题,HTTP Status 400 - Required String parameter '/q' is not present.翻译过来就是所需字符串q不存在,这个 ...

最新文章

  1. 手机如何看python代码_python如何绘制iPhone手机图案?(代码示例)
  2. python程序多线程_Python-多线程编程
  3. Elasticsearch-5.1.2分词器IK+pinyin简单测试
  4. theano中的vector和dvector
  5. json string 格式_GO小知识之如何做JSON美化
  6. mybatis sql xml 字符逃脱
  7. OpenResty(nginx)操作mysql的初步应用
  8. 替代top的系统监控工具glances
  9. QuartusII下载程序报错,无法正常下载
  10. 计算机房电脑装软件,机房轻松批量安装软件
  11. 用html制作四种九九乘法表,JavaScript制作九九乘法表
  12. C/C++实现matlab的imfill()函数
  13. qt安装报错:下载“http://download.qt.io/online/xxxxx/_meta.7z“server replied: Bad Gateway出现网络错误
  14. 「第二部:容器和微服务架构」(2) 容器化单体应用
  15. java.security.egd 作用
  16. Ajax传递数组乱码,layUI批量删除时乱码
  17. 你的用户珍贵么?杀鸡吃肉和养鸡吃蛋的选择……
  18. geohash网格图_Geohash 网格聚合
  19. eventListener-一个控件控制另一个控件的显示
  20. MyBatis---插件

热门文章

  1. WebService using Spring throwed org.xml.sax.SAXException: Bad envelope tag: htm
  2. MFC程序框架的剖析
  3. FLV 封装格式解析
  4. 物联网6类技术无线连接技术的分析
  5. 通过RMAN克隆11g数据库(基于active database)
  6. PHP7 学习笔记(七)如何使用zephir编译一个扩展记录
  7. Vue Iview Tree插件的无限层
  8. 与servlet Api 的集成
  9. UE如何使用正则表达式
  10. 大企业内部创业到底多难?从华为员工内网热议阿里钉钉谈起