HTTP GET请求的最大长度是多少?是否存在定义的响应错误,如果收到GET请求超过此长度,服务器可以/应该返回?
更新:如标签中所示,这是在Web服务API的上下文中,尽管看到浏览器限制也很有趣.
REST API至少可以通过两种方式获取参数:
/api/resource/parametervalue )/api/resource?parameter=value )这里的最佳做法是什么?是否有任何一般指导原则何时使用1以及何时使用2?
真实世界的例子:Twitter使用查询参数来指定间隔.(http://api.twitter.com/1/statuses/home_timeline.json?since_id=12345&max_id=54321)
将这些参数放在URL路径中会被认为是更好的设计吗?
可能重复:
带请求正文的HTTP GET
我在这里看过几个不提倡通过HTTP GET发送内容的讨论.可以通过客户端(Web浏览器)发送的数据大小有限制.处理GET数据也取决于服务器.请参阅 以下资源部分.
但是,我被要求测试使用RestTemplate通过HTTP GET发送内容的可能性.我在春季论坛上几乎没有讨论,但没有回答.(请注意通过http Post发送数据工作正常).这里的讨论建议使用POST.
dev env - JBoss AS 5.1,Spring 3.1.3
客户
@Test
public void testGetWithBody()
{
// acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.TEXT_PLAIN);
// header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
// body
String body = "hello world";
HttpEntity<String> entity = new HttpEntity<String>(body, headers);
Map<String, Object> uriVariables = new HashMap<String, Object>();
uriVariables.put("id", "testFile");
// Send the request as GET
ResponseEntity<String> result = restTemplate.exchange(
"http://localhost:8080/WebApp/test/{id}/body",
HttpMethod.GET, entity, String.class, …Run Code Online (Sandbox Code Playgroud) 我需要使用客户端技术将潜在的大量数据从一个页面传递到另一个页面.它基本上是一个id列表,它将显示在目标页面上.显然查询字符串不合适,因为可能有数千个ID,所以我认为我可以使用javascript动态添加表单(method = GET),将id写入隐藏字段并将表单提交到目标页面.它似乎工作正常,但我想知道是否有更好的方法 - 这感觉有点hacky.
标签src属性中的文件名img是否有字符数限制?或操作系统(OS)浏览器之间的兼容性问题......
例如:
<img src="../img/misc/this-is-a-very-long-image-filename-of-an-image-named-leaders-systems02.gif" alt="Leaders Systems" class="emblem" />
Run Code Online (Sandbox Code Playgroud)
this-is-a-very-long-image-filename-of-an-image-named-leaders-systems02.gif在所有操作系统浏览器中都没有问题?
我有一个分类广告网站.
在主页面(索引)中,我有几个用户可能填写或不填写的表单字段,以指定分类的详细搜索.
例如:
Category: Cars
Price from: 3000
Price to: 10000
Color: Red
Area: California
Run Code Online (Sandbox Code Playgroud)
表单的动作设置为php页面:
<form action='query_sql.php' method='post'>
Run Code Online (Sandbox Code Playgroud)
在query_sql.php中,我获取如下变量:
category=$_POST['category'];
etc etc...
Run Code Online (Sandbox Code Playgroud)
然后查询MySql:
$query="SELECT........WHERE category='$category' etc etc....
$results = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)
然后,我只需通过创建一个根据结果集动态填充的表来向用户显示查询结果.
但是,根据我以前的QI中的校长Shrapnel的回答,不应该在这里使用POST:如何在提交此表单时隐藏用户的URL?
我使用post的原因只是隐藏浏览器地址栏中的"one-page-word-document"长URL.
我很困惑,是否可以使用POST?
当我现在使用GET或POST时它工作正常......它已经在生产服务器上...
顺便说一句,在链接的问题中,我并不是指make URL不可见(或隐藏它)我只是想让它看起来更好(我用mod_rewrite完成了).
更新:
如果我使用GET,那么我应该如何让网址更好看(漂亮)?检查此前的问题:
我喜欢 Django 并且经常使用它。我发现它的大部分默认设置都是正常的,但有一个一直困扰着我,以至于我在每个项目中都覆盖了它。
模型字段的默认最大长度URLField为 200 个字符。文档验证了这个限制,但没有解释为什么会这样。
class URLField(CharField):
...
def __init__(self, verbose_name=None, name=None, **kwargs):
kwargs['max_length'] = kwargs.get('max_length', 200)
...
Run Code Online (Sandbox Code Playgroud)
我重写它是因为很多 URL 的长度都超过 200 个字符,尤其是带有查询字符串的 URL。
据我所知,虽然 HTTP 规范没有指定最大长度,但实际上所有浏览器都支持至少 2000 个字符,这对我来说意味着一个新的合理的默认值。
好奇地想深入挖掘,我发现了 2007 年 1 月添加限制的第一个提交(# f6390e8by @jacobian);从那以后它基本上没有变化。
更进一步,我发现了我认为的 ORM 字段类型到数据库列类型映射代码的版本(#f69cf70作者:@adrianholovaty)。例如,MySQL 文件于 2006 年 5 月存在,自 Django 0.95 以来具有相同的 200 个字符限制:
当我尝试通过ajax.get()传递大量变量时,其中一些变量包含很长的文本(~1000个字符),PHP似乎没有收到任何变量.另一方面,当变量包含的文本少得多时,一切似乎都运行良好.
这是代码:
$.ajax({
type: "GET",
url: "../rate_insert.php",
async: true,
data: ({
"ftiaxto_save_input": ftiaxto_save_input,
"lektion_buch": lektion_buch,
.
. // lots of variables
.
"lektion_photo": lektion_photo,
"lektion_photo_thessi": lektion_photo_thessi
}),
success: function(data) {
alert("Data Loaded: " + data);
} // data
}); // .get
Run Code Online (Sandbox Code Playgroud)
rate_insert.php中的Var_dump($ _ GET)不返回任何内容.我的php.ini设置如下:
post_max_size = 80M
max_input_time -1
memory_limit = 128M
Run Code Online (Sandbox Code Playgroud)
注意:没有httpd服务器,php作为CLI SAPI运行.
在PHP中,如何将对象(实际上是一个数组)从一个站点传递到另一个站点(通过不丢失其原始的对象结构和值)?
我想通过NOT using HTML和web表单直接从自动脚本传递.
请提出任何建议.
我有一个flash表单,每月发送一个报告,用户填写一个php文件,将其发送到MS SQL数据库.我遇到的这个问题是,任何超过1300个字符的内容都会输入flash表单根本不起作用.如果我将文本量减少到1300个字符或更少,它会将它发送到PHP和数据库就好了.我的研究表明,flash变量应该能够处理65,000个字符,当我将我的输出从flash跟踪到php时,所有数据都被跟踪.但是,它没有发送到PHP.我正在使用LoadVars使用_GET发送数据.那么这是一个php问题,还是一个flash问题?我运行了一个php信息页面,我的max_post设置为10M,应该足以处理这个负载.我不知道为什么它不能处理超过1300个字符的任何东西.下面是我的php和flash文件的代码.
受此影响的变量是testEvlauation,projects,support和programManagement变量.我需要它们向php文件发送至少8000个字符.任何帮助都将不胜感激.
on (release) {
sendData = new LoadVars();
sendData.contractor = contractor.text;
sendData.name = name.text;
sendData.contractNum = contractNum.text;
sendData.performance = performance.text;
sendData.manager = manager.text;
sendData.activity = activity.text;
sendData.taskNum = taskNum.text;
sendData.date = date.text;
sendData.testEvaluation = testEvaluation.text;
sendData.projects = projects.text;
sendData.support = support.text;
sendData.programManagement = programManagement.text;
sendData.send("Flash/php/MRform.php","_blank","GET");
trace(sendData.support);
Run Code Online (Sandbox Code Playgroud)
}
PHP代码:
//MS SQL SERVER CONNECTION PERAMETERS
$serverName = "lsv-fs-jepac1\JEPAC";
$uid = "SQLLogin";
$pwd = "XXXXXXXXXXXXXXXXXXXXXX";
$connectionInfo = array("UID" => $uid, "PWD" => $pwd, "Database"=>"Requests");
/* Connect using MS SQL …
Run Code Online (Sandbox Code Playgroud)Run Code Online (Sandbox Code Playgroud)